在 Unity 中将字符串转换为向量

converting string to vector in Unity

我正在尝试在 unityscript 中转换一个字符串数组,其值包含如下值:

"Vector3(5, 3, 8)"

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

您不能在 C# 中将所有向量元素一起转换,您可以像下面那样进行:

其伪代码:

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

我认为没有 api 可以为您做这个: "Vector3(5, 3, 8)"

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

虽然我认为没有任何方法可以完全使用 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 服务器下,然后将新数组复制并粘贴到您的脚本中。

我想其他人以后可能会觉得这很有用,所以:

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);
    }
}

使用此方法将单个字符串值转换为 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;
     }