C# Raycast在Update()Unity c中不工作#

C# Raycast在Update()Unity c中不工作#,c#,unity3d,touch,transform,raycasting,C#,Unity3d,Touch,Transform,Raycasting,我正在做一个游戏,一个物体跟着我的手指。但是,如果我点击屏幕上的任何地方,我不希望对象跳到我的手指上。我正在使用光线投射来执行此操作。除非我的手指移动得太快,否则物体就会冻结 我的理论是,由于它位于Update()中,一旦我将手指从对象上移开,它就会检测到我无法再拖动它。我不知道如何解决这个问题 公共游戏对象Bigball; 公众游戏对象小球; //每帧调用一次更新 私有无效更新() { //让球跟随手指 if(Input.touchCount>0&&Input.GetTouch(0.phas

我正在做一个游戏,一个物体跟着我的手指。但是,如果我点击屏幕上的任何地方,我不希望对象跳到我的手指上。我正在使用光线投射来执行此操作。除非我的手指移动得太快,否则物体就会冻结

我的理论是,由于它位于
Update()
中,一旦我将手指从对象上移开,它就会检测到我无法再拖动它。我不知道如何解决这个问题

公共游戏对象Bigball;
公众游戏对象小球;
//每帧调用一次更新
私有无效更新()
{ 
//让球跟随手指
if(Input.touchCount>0&&Input.GetTouch(0.phase==TouchPhase.Moved | | Input.GetTouch(0.phase==TouchPhase.Stational)
{
var touch=Input.GetTouch(0);
Vector3 fingerPos=触摸位置;
雷卡斯特击中;
光线=摄影机.main.ScreenPointRoay(fingerPos);
if(Physics.Raycast(光线,外击)&&(hit.collider.tag==“ball”))
{
Smallball.SetActive(false);
Bigball.SetActive(true);
Vector3 pos=新的Vector3((Camera.main.ScreenToWorldPoint(Input.GetTouch(0.position)).x,
(Camera.main.ScreenToWorldPoint(Input.GetTouch(0.position)).y,0);
Bigball.transform.position=pos;
}
}
其他的
{
Bigball.SetActive(false);
Smallball.SetActive(真);
Smallball.transform.position=新向量3(Bigball.transform.position.x,Bigball.transform.position.y,0);
}
}

当手指触摸屏幕时,只进行一次光线投射可能更有意义。如果该光线投射找到要拖动的对象,只需存储该对象并在每次更新()时将其移动以跟随手指,只要手指继续触摸屏幕即可

松开手指后,只需忘记对象,直到下一次触摸找到要拖动的新对象


另一种方法是完全不使用光线投射,而是构建在IBeginDragHandler、IDragHandler和IEndDragHandler上,正如Bijan已经提到的那样。

您可以使用ui拖动,但可能只是增加刚体的速度。