2015-06-10 118 views
1

我遇到問題。我正在Unity 3D(c#)中做一個3D世界編輯器的項目。我的問題是我想通過選擇它們來移動多個對象。我設法移動一個與我的鼠標,但多我失敗:d 這是我的代碼來移動一個:Unity 3D腳本移動多個對象

public class ClickAndDrag : MonoBehaviour { 
    private RaycastHit raycastHit; 
    private GameObject Gobj; 
    private float distance; 
    private Vector3 ObjPosition; 
    private bool Bobj; 

    // Use this for initialization 
    void Start() { 
    } 

    // Update is called once per frame 
    void Update() { 
     if (Input.GetMouseButton (0)) { 
      var ray = GetComponent<Camera>().ScreenPointToRay (Input.mousePosition); 
      var hit = Physics.Raycast (ray.origin, ray.direction, out raycastHit); 

      if (hit && !Bobj) { 
       Gobj = raycastHit.collider.gameObject; 
       distance = raycastHit.distance; 
       Debug.Log (Gobj.name); 
      } 

      Bobj = true; 
      ObjPosition = ray.origin + distance * ray.direction; 
      Gobj.transform.position = new Vector3 (ObjPosition.x, ObjPosition.y, ObjPosition.z); 
     } else { 
      Bobj = false; 
      Gobj = null; 
     }  
    } 
} 

感謝您的幫助!

+1

這只是編碼移動一個單獨的對象。移動多個對象時面臨什麼問題?你沒有在你的問題中指定這個。 –

+0

我不知道如何做到這一點,因爲當我移動一個對象,我用我的鼠標做到這一點,但我不能這樣做多個對象 –

回答

1

private GameObject Gobj;是一個變量單個 GameObject。其重新格式化爲private List<GameObject> objects;和替代Gobj.transform.position = new Vector3 (ObjPosition.x, ObjPosition.y, ObjPosition.z)做到這一點:

foreach (GameObject item in objects) 
{ 
    item.transform.position = new Vector3 (ObjPosition.x, ObjPosition.y, ObjPosition.z) 
} 

編輯:如果你不知道如何操作列表,List<T>擁有一套內置的功能,使之很容易。您現在可以撥打objects.Add(newObject);添加一個對象,然後objects.Remove(oldObject);刪除一個對象。

+0

我會盡力做到這一點! –

+1

部分答案:您沒有解釋如何獲取這個對象列表。它不會神奇地被填滿。 – Kryptos

+0

要使用'List ',您必須在腳本的頂部添加'using System.Collections.Generic;'以及不要忘記。 – maksymiuk