在触摸和拖动时移动单个对象

时间:2017-12-31 20:46:20

标签: c# unity3d

我有一个脚本应用于场景中的几个球体。我希望能够通过将它们放在屏幕上并拖动来移动场景中的各个球体。我的第一个问题是,无论你触摸和拖动哪个球体,所有球体都在一起运动(它们是同一预制件的一部分,但它们都不是其他球体的子体)。第二个问题是,当您触摸并拖动屏幕上的任何位置时,球体会做出反应,而不是仅在您触摸其中一个球体时做出反应。

    Touch touch = Input.GetTouch(0);
    for (int i = 0; i < Input.touchCount; i++)
    {
        if (touch.phase == TouchPhase.Began)
        {
            screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
            offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, screenPoint.z));
        } 
        else if (touch.phase == TouchPhase.Moved)
        {
            Vector3 cursorPoint = new Vector3(touch.position.x, touch.position.y, screenPoint.z);
            Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
            transform.position = cursorPosition;
        }
    }

我感觉所有球体一起移动的问题源于相同的脚本应用于所有球体的事实,screenpointoffest来自{{1而不是被触摸的特定球体。我试图通过将以下代码置于gameObject.transform.position循环之上来解决此问题,但我猜这可能不是正确的方法。我是新手:)。

for

我正确设置了我的标签,如果这对第一个球体(Sphere0)起作用,我会编写其他球体的代码。但是,它似乎根本不起作用。我的项目是一个ARCore项目,但我不认为这应该改变我需要为场景的这些方面编码。

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:1)

您只需要一个与您的球体分开的主脚本来进行触摸和球体控制的光线投射。然后使用相同的标记(即“球体”)标记所有球体。

10 things on my todo list  (2018-01-01 00:00:01)