2014-02-13 4 views
0

Я новичок в единстве. Я работаю над создателем торта, как игра для Android-устройства. Я сталкиваюсь с трудностями в перетаскивании объектов из шкафа в стол. На столе я хочу смешать их в банке. Это много предметов. Итак, я не могу этого сделать, разделив их с помощью тегов единства. Как сделать общий способ перетащить их на стол?Как перетаскивать объекты в единстве3D?

Я использую этот код, но его не работает для меня.

using UnityEngine; 
    using System.Collections; 

    public class DragObjects : MonoBehaviour { 

    Ray ray; 
    RaycastHit hit; 

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

    // Update is called once per frame 
    void Update() 
    { 

     if (Input.GetMouseButtonDown(0)) 
     { 
      ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
      if (Physics.Raycast (ray, out hit)) 
      { 
       if (hit.collider.tag == "oil") 
       { 
        OnMouseDrag(); 
       } 
      } 
     } 

    } 


void OnMouseDrag() 

    { 

    Vector3 point = Camera.main.ScreenToWorldPoint(Input.mousePosition); 


    point.x = gameObject.transform.position.x; 

    gameObject.transform.position = point; 
    } 


} 
+0

Какая часть не работает. Означает ли это ваше столкновение (попробуйте поставить печать на RayCast)? Кроме того, я не помню точно, но я думаю, что если вы не установите значение Z на Input.mousePosition на некоторое расстояние, тогда точка будет просто позицией камеры (представьте, что луч, выходящий из камеры, является длиной 1) –

+0

Да, это обнаружение столкновения. Но не работать, чтобы тащить. Я попытался проверить код, используя Debug.Log(), а также по Z-значению. Когда я нажимаю объект, он не перетаскивается. но изменение позиции. некоторое время некоторые Z-Valve, когда я использую просто (point.x = gameObject.transform.position.x;). некоторое время перед камерой, когда я использую оба (point.x = gameObject.transform.position.x; && point.z = gameObject.transform.position.z;). –

+0

Извините, я не понимаю, движется ли объект, но неправильно или вообще не двигается? –

ответ

1

Путь Единства делать это будет иметь Draggable поведение, которое вы придаете каждому объекту вы хотите перетащить.

Если вы используете 2D коллайдеров вы можете использовать что-то вроде этого:

Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
bool isOver = collider2D.OverlapPoint(pos); 

С 3D коллайдерах вы можете получить луч из камеры и увидеть, что если пересекается с перетаскиваемым.

Затем вы можете использовать другие коллайдеры, чтобы определить, когда они установлены на банке.

Смежные вопросы