2015-06-02 7 views
2

Я создаю приложение unity3d, которое загружает сборку и перемещает ее. Я могу загрузить сборку куба с помощью мировой координаты. Я хочу переместить этот объект в положение щелчка мыши. Для выполнения этой работы я использую ниже код. Мой объект никуда не движется.Как перенести единство на запястье на позицию мыши?

public GameObject[] model_prefabs; 

void Start() { 
    //for (int i = 0; i < 1; i++) { 
    int i = 0; 
     Instantiate (Resources.Load ("Cube"), new Vector3 (i * 1.8F - 8.2f, 0, 0), Quaternion.identity); 
    //} 
} 

void Update() { 

    if (Input.GetKey("escape")) 
     Application.Quit(); 

    if (Input.GetMouseButtonDown (0)) { 

     Debug.Log ("mouseDown = " + Input.mousePosition.x + " " + Input.mousePosition.y + " " + Input.mousePosition.z); 
     Plane p = new Plane (Camera.main.transform.forward , transform.position); 
     Ray r = Camera.main.ScreenPointToRay (Input.mousePosition); 
     float d; 
     if (p.Raycast (r, out d)) { 
      Vector3 v = r.GetPoint (d); 
      //return v; 
      Debug.Log ("V = " + v.x + " " + v.y + " " + v.z); 
      transform.position = v; 
     } 
     else { 
      Debug.Log ("Raycast returns false"); 
     } 
    } 
} 

Я конвертирую из положения щелчка мыши в мировые координаты. Они выглядят как подходящие.

mouseDown = 169 408 0 
V = -5.966913 3.117915 0 

mouseDown = 470 281 0 
V = -0.1450625 0.6615199 0 

mouseDown = 282 85 0 
V = -3.781301 -3.129452 0 

Как переместить этот объект?

ответ

0

Я использую ниже код. Меня устраивает.

void Start() { 
    for (int i = 0; i < 3; i++) { 
     gO[i] = Instantiate (Resources.Load ("Cube"), new Vector3 (i * 1.8F - 8.2f, 0, 0), Quaternion.identity) as GameObject; 
    } 
} 

void Update() { 

    if (Input.GetKey("escape")) 
     Application.Quit(); 
#if UNITY_EDITOR 
    if (Input.GetMouseButtonDown (0)) { 
     Debug.Log ("mouseDown = " + Input.mousePosition.x + " " + Input.mousePosition.y + " " + Input.mousePosition.z); 
     Plane p = new Plane (Camera.main.transform.forward , transform.position); 
     Ray r = Camera.main.ScreenPointToRay (Input.mousePosition); 
     float d; 
     if (p.Raycast (r, out d)) { 
      Vector3 v = r.GetPoint (d); 

      for (int i = 0; i < 3; i++) { 
       gO[i].transform.position = v; 
       v.y = v.y - 2f; 
      } 
     } 
    } 
#endif 
1

Прямо сейчас, похоже, что вы перемещаете объект GameObject, к которому прикреплен ваш скрипт, вместо созданного GameObject. Это можно сделать двумя способами.

  1. Вы можете переместить все из если (MouseButtonDown (0)) заявление на сценарий, который прилагается к вашему Кубик префаб. Но тогда каждый из тех сборников, которые вы породили, переместится в одно и то же место.

  2. Вы можете добавить переменную GameObject currentObject; то у вас функция Start() say currentObject = Instantiate (Resources.Load («Cube»), новый Vector3 (i * 1.8F - 8.2f, 0, 0), Quaternion.identity); и в вашей функции обновления напишите currentObject.transform.position = v;

0

Вы можете использовать это. Просто проверьте, какой сборник активен.

public GameObject activePrefab; 
Vector3 targetPosition; 

void Start() { 

    targetPosition = transform.position; 
} 
void Update(){ 

    if (Input.GetMouseButtonDown(0)){ 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     RaycastHit hit; 

     if (Physics.Raycast(ray, out hit)){ 
      targetPosition = hit.point; 
      activePrefab.transform.position = targetPosition; 
     } 
    } 
}