提取Unity Gameobject坐标并导出到文本文件

时间:2014-05-01 09:00:31

标签: unity3d

我有一个级别,我已经放置了许多预制Gameobject(目标)的实例。我需要在脚本中使用这些目标的坐标。有没有办法获取所有这些对象的xyz矢量坐标并将它们导出到文本文件?现在我需要手动将每个目标从Unity检查器复制到MonoDevelop,这是一个PITA ......

1 个答案:

答案 0 :(得分:0)

要获取对象的坐标,请使用item.transform.Position,其中item是对要获取坐标的对象的引用。结果是一个Vector3,您可以从中.x.y.z获取单独的坐标/

Writing to a text file is well-documented.

或者,您可能需要查看Serialization

编辑:为场景中的所有对象执行此操作:

string filePath = "D:/mycoords.txt";
string coordinates = "";
var objects = GameObject.FindObjectsOfType(Transform) as Transform[];
foreach(Transform trans in objects)
{
    coordinates+= "x: " + trans.position.x.ToString() + ", y: " + trans.position.y.ToString() + ", z: " + trans.position.z.ToString() + System.Environment.NewLine;
}

//Write the coords to a file
System.IO.File.WriteAllText(filePath,coordinates);

注意:FindObjectsOfType将返回任何资产(网格,纹理,预制件......)或非活动对象。

EDIT3:如果你只想获得目标,请向你添加一个脚本预制名为" SaveMeToFile"并使用此代码:

string filePath = "D:/mycoords.txt";
string coordinates = "";
var objects = GameObject.FindObjectsOfType(SaveMeToFile) as SaveMeToFile[];
foreach(SaveMeToFile smtf in objects)
{
    Transform trans = smtf.transform;
    coordinates+= "x: " + trans.position.x.ToString() + ", y: " + trans.position.y.ToString() + ", z: " + trans.position.z.ToString() + System.Environment.NewLine;
}

//Write the coords to a file
System.IO.File.WriteAllText(filePath,coordinates);

编辑4:或者如果您有任何特定于您的目标的组件,您可以在上面的代码中使用它而不是SaveMeToFile,这样您就不必创建一个新的,毫无价值的Monobehaviour