2014-02-13 42 views
0

我是新来的团结。我正在为Android设备制作游戏等蛋糕制作者。我正面临将物体从柜子拖到桌子上的困难。在桌子上,我想把它们混合在一个罐子里。这些是很多项目。所以,我不能通过使用统一标签来分开它们。如何使通用的方式将其拖动到桌面上?如何在unity3D中拖动对象?

我正在使用此代码,但它不适合我。

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上打印)?此外,我记不清楚了,但我认为如果您不将Input.mousePosition上的Z值设置为某个距离,那么该点将仅仅是相机位置(想象从相机出来的光线长度为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撞机可以从相机获得射线,看看是否有可拖动相交。

然后,您可以使用其他碰撞体来检测它们何时放置在罐子上。