我正在做一个对象跟在我手指上的游戏。但是如果我点击屏幕上的任何地方,我不希望对象跳到我的手指。我正在使用光线投影来做到这一点。它的效果非常好,除非我的手指移得太快,否则物体会冻结。
我的理论是因为它在Update()
中,一旦我将手指从物体上移开,它就会检测到我无法再拖动它。我不知道如何解决这个问题。
public GameObject Bigball;
public GameObject Smallball;
// Update is called once per frame
private void Update ()
{
// lets ball follow finger
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(0).phase == TouchPhase.Stationary)
{
var touch = Input.GetTouch(0);
Vector3 fingerPos = touch.position;
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(fingerPos);
if (Physics.Raycast(ray, out hit) && (hit.collider.tag == "ball"))
{
Smallball.SetActive(false);
Bigball.SetActive(true);
Vector3 pos = new Vector3((Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)).x,
(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)).y, 0);
Bigball.transform.position = pos;
}
}
else
{
Bigball.SetActive(false);
Smallball.SetActive(true);
Smallball.transform.position = new Vector3(Bigball.transform.position.x, Bigball.transform.position.y, 0);
}
}
答案 0 :(得分:0)
当手指触摸屏幕时,只有一次Raycast可能更有意义。如果Raycast找到要拖动的对象,只需手指继续触摸屏幕,只需存储该对象并将其移动到每个Update()后跟随手指。
释放手指后,只需忘记对象,直到下一次触摸找到要拖动的新对象。
另一种选择是根本不使用Raycasts,而是建立在IBeginDragHandler,IDragHandler和IEndDragHandler上,就像Bijan已经提到的那样。