2014-05-01 55 views
-1

我有一個級別,我已經放置了許多預製Gameobject(目標)的實例。我需要在腳本中使用這些目標的座標。有沒有辦法獲得所有這些對象的xyz矢量座標並將它們導出到文本文件?現在我需要手動複製每個單獨的目標從Unity檢查器到MonoDevelop,這是一個PITA ...提取Unity Gameobject的座標並導出到文本文件

回答

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將返回任何一個ssets(網格,紋理,預製,...)或非活動對象。

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

+0

謝謝,但那不過還是需要大量的手動工作。我希望從我放在場景中的超過75個遊戲對象列表中提取所有座標,以便我可以在外部腳本中使用這些座標。 – Killbert

+0

這對循環來說是微不足道的,我已經更新了我的答案。 –

+0

非常棒!謝啦!! – Killbert