2016-10-24 16 views
0

所以,我試圖找出如何寫一個腳本,將可以在遊戲中的對象是在一定的國際地位,檢測,改造這些遊戲對象,並通過說1如何使用統一的世界位置移動GameObjects?

希望他們動起來這是有道理的,如果不是請請問,我會盡力解釋更詳細的信息。真的很感激任何幫助。

+1

這太寬泛了 - 通常預期您會嘗試先編寫自己的代碼,並且如果遇到無法解決的問題,只會提出Stack Overflow的問題;本網站不是爲了提供從頭開始編寫的代碼。爲了讓你開始,請查看['Transform.Translate()'](https://docs.unity3d.com/ScriptReference/Transform.Translate.html)並考慮使用觸發器collider(或['Physics.OverlapSphere() '](https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html))來檢測進入特定區域的物體。 – Serlite

回答

4
void updateGameObjectsMatchingPosition(float x, float y, float z) 
{ 
    // Please try to use something more specific like GameObject.FindGameObjectWithTag("CoolTag"); 
    var gameObjects : GameObject[] = GameObject .FindObjectsOfType(GameObject) as GameObject[]; 

    for(var i = 0; i < gameObjects.length; i++) { 
     var position = gameObjects[i].transform.position; 
     if(position.x == x && position.y == y && position.z == z) { 
      //Do something with the position of this object. 
      gameObjects[i].transform.position = new Vector3(x + 1, y + 1, z + 1); 
     } 
    } 
} 
+0

是的,這是有效的,但除非你強制執行一個離散化的世界,否則你應該檢查一下,看看你的位置是否在你所看到的位置的一小段距離內,而不是硬的等於。 – code11

+0

或者,[Kd-trees](http://unitycoder.com/blog/2013/03/26/kdtree-find-nearest-object/)可用於有效搜索您的對象。如果對象太多,你應該考慮這一點。 – ldavid

+0

與code11和lucasdavid一致,只將它用於測試目的,儘量使用更高性能的東西,只要求GameObjects太懶,太昂貴。 –

1

將此腳本附加到您的遊戲對象。

[SerializedField] Vector3 _designatePosition; 
IEnumerator MoveUp() { 
    var speed = 5 * Time.deltaTime; 
    var targetPosition = transform.position + new Vector3(0, 1, 0); 
    while (Vector3.Distance(transform.position, targetPosition) > 0.01f) { 
     transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed); 
    } 
} 

void Update() { 
    if (Vector3.Distance(transform.position, _designatePosition) < 0.01f) { 
     StartCoroutine(MoveUp()); 
    } 
} 
相關問題