Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用鼠标光标移动对象_C#_Unity3d - Fatal编程技术网

C# 如何使用鼠标光标移动对象

C# 如何使用鼠标光标移动对象,c#,unity3d,C#,Unity3d,找到了一个实现此功能的脚本,但如果光标移动过快,则对象将落后。 我尝试了很多方法,甚至限制fps。 在Unity本身,没有太多的延迟,但当我通过Unity Remote在手机上启动时,仍然有强大的延迟。也许这不是最强大的手机?但其余的物体移动正常 private Vector3 offset; 如果按下鼠标,我们就会移动 void OnMouseDown() { offset = gameObject.transform.position - Camera.main.Scre

找到了一个实现此功能的脚本,但如果光标移动过快,则对象将落后。 我尝试了很多方法,甚至限制fps。 在Unity本身,没有太多的延迟,但当我通过Unity Remote在手机上启动时,仍然有强大的延迟。也许这不是最强大的手机?但其余的物体移动正常

private Vector3 offset;
如果按下鼠标,我们就会移动

void OnMouseDown()
{

    offset = gameObject.transform.position -
    Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x+ RotationCar, 
                                                Input.mousePosition.y + RotationCar, 50));

}
void OnMouseDrag()
{

    Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 50);
    transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset;
}
如果按下鼠标,则保存坐标

void OnMouseDown()
{

    offset = gameObject.transform.position -
    Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x+ RotationCar, 
                                                Input.mousePosition.y + RotationCar, 50));

}
void OnMouseDrag()
{

    Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 50);
    transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset;
}

通过unity remote启动将产生大量调试器通信开销。分离并定期运行,在发布版本中不应如此严重。还考虑在拖动时隐藏光标。不同于它的名称<代码> OnMouthRoad 并不是用于拖动对象的完美解决方案。它可以告诉您鼠标何时在对象上拖动。如果要实现拖放操作,这不是问题的主要原因,而是
Camera。main
是一个昂贵的操作,因为它在内部和外部调用
FindGameObjectsWithTag
。您应该自己缓存结果,例如使用
private-Camera-myMain
void Start(){…myMain=Camera.main;…}
然后
myMain.ScreenToWorldPoint(…)
通常,Unity Remote用于调试。。你永远不能指望它有好的表现。部署后它的表现如何?请注意,延迟是这里的一个次要问题——您应该始终以一种能够应对任何理论延迟的方式进行编码(在这种情况下,准备手指从一个帧移动到另一个帧,即使在仍然触摸的情况下)。Bizhan的评论包含一个拖放教程链接。