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