【问题标题】:converting string to vector in Unity在 Unity 中将字符串转换为向量
【发布时间】:2015-06-20 22:19:41
【问题描述】:

我正在尝试将 unityscript 中的字符串数组转换为包含以下值的值:

"向量3(5, 3, 8)"

放入向量数组中,但 Unity 不会按原样接收这些字符串。有人有什么想法吗?

【问题讨论】:

  • 你尝试过什么,哪里失败了?字符串拆分和基本操作还不够吗?
  • 如果对您有帮助,请考虑投票并接受答案。

标签: vector unity3d unityscript


【解决方案1】:

你不能在 c# 中将所有矢量元素一起转换,你可以像下面这样:

它的伪代码:

position.x=convert.ToFloat("3");
position.y=....

我认为没有 api 可以为您制作这个: "向量3(5, 3, 8)"

【讨论】:

  • 我在 UnityScript 中尝试了你的方法,它有效,谢谢!
【解决方案2】:

你没有给我们任何示例代码,所以我假设数组组织得很好,所有元素都彼此相邻。

虽然我不认为有任何方法可以完全使用 UnityScript 来完成此操作,但有一些方法可以用其他语言处理文字字符串,即从 Unity 脚本复制到另一个可以进行更改的程序中给你。

这是我会做的一个小例子。

用法:用所有Vector3(x,x,x)字符串创建一个文件array.txt,用换行符分隔并创建另一个文件array.php

Array.txt(示例)

Vector3(5, 1, 3)
Vector3(3, 3, 1)
Vector3(2, 2, 7)
Vector3(6, 6, 4)
Vector3(8, 8, 8)
Vector3(9, 3, 2)
Vector3(1, 2, 1)
Vector3(4, 3, 6)
Vector3(5, 3, 8)

Array.php

<?

$file = file('array.txt');

$text = array();

$text[] = "var vectors = new Array;";

foreach ( $file as $i )
{
    $text[] = "vectors.Push(".trim($i).");";
}

echo implode("<br>", $text);

然后只需在 PHP 沙箱或 Web 服务器下运行它,然后将新数组复制并粘贴到您的脚本中。

【讨论】:

    【解决方案3】:

    使用此方法将单个String值转换为vector3值

    public static Vector3 StringToVector3(string sVector)
         {
             // Remove the parentheses
             if (sVector.StartsWith ("(") && sVector.EndsWith (")")) {
                 sVector = sVector.Substring(1, sVector.Length-2);
             }
     
             // split the items
             string[] sArray = sVector.Split(',');
     
             // store as a Vector3
             Vector3 result = new Vector3(
                 float.Parse(sArray[0]),
                 float.Parse(sArray[1]),
                 float.Parse(sArray[2]));
     
             return result;
         }
    

    【讨论】:

      【解决方案4】:

      我认为其他人稍后可能会发现这很有用:

      if(PlayerPrefs.GetFloat("nodeNum") > 0) {
          //Assemble axis value arrays
      
          //X
          var xString = PlayerPrefs.GetString("xVals");
          var xValues = xString.Split(","[0]);
          //Y
          var yString = PlayerPrefs.GetString("yVals");
          var yValues = yString.Split(","[0]);
          //Z
          var zString = PlayerPrefs.GetString("zVals");
          var zValues = zString.Split(","[0]);
      
          var countNode = 0;
          var goal = PlayerPrefs.GetFloat("nodeNum");
          var nodeVecs = new Array(Vector3.zero);
      
          while (countNode != goal) {
              var curVec = Vector3(float.Parse(xValues[countNode]), float.Parse(yValues[countNode]), float.Parse(zValues[countNode]));
              nodeVecs.Push(curVec);
              countNode += 1;
          }
          var convNodeVecs : Vector3[] = nodeVecs.ToBuiltin(Vector3) as Vector3[];
      
          for(var nodeVec : Vector3 in convNodeVecs) {
              Instantiate(nodeObj, nodeVec, Quaternion.identity);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多