Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 使用移动摄影机在unity 2d中拖动对象_C#_Unity3d - Fatal编程技术网

C# 使用移动摄影机在unity 2d中拖动对象

C# 使用移动摄影机在unity 2d中拖动对象,c#,unity3d,C#,Unity3d,我想在unity2d中使用以下代码拖动2d对象: offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 问题是我的相机也在沿x轴移动,所以当我点击gameobject拖动它时,它会沿x轴移动。我想让这个gameobejct保持静止,这样它就不会移动了?有

我想在
unity2d
中使用以下代码拖动2d对象:

offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new 

Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));

问题是我的相机也在沿x轴移动,所以当我点击
gameobject
拖动它时,它会沿x轴移动。我想让这个
gameobejct
保持静止,这样它就不会移动了?有什么建议吗?

您可以尝试使用鼠标指针的速度,而不是使用绝对屏幕中心位置。比如:

if(beingDragged) {
    transform.position += new Vector3(Input.GetAxis("Mouse X"),
            Input.GetAxis("Mouse Y"), 0);
}

另一个选项是使用变量跟踪自拖动开始以来摄影机的移动。然后,您可以从计算中减去此移动偏移量,以便在“世界空间”而不是“屏幕空间”中进行拖动。对不起,我无法实现您的建议。下面是拖动对象的代码,当OnMouseDown()时,它总是获取移动摄影机的位置

void OnMouseDown()

   {

    screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
    offset = gameObject.transform.position + Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

void OnMouseDrag()
{ 
    Vector3 curScreenPoint = new Vector3(screenPoint.x, Input.mousePosition.y, screenPoint.z);

    Vector3 curPosition = Camera.main.ScreenToWorldPoint (curScreenPoint);
    transform.position = curPosition;

}

}

对不起,我无法实施你的建议。下面是拖动对象的代码,当OnMouseDown()时,它总是获取移动摄影机的位置。下面是上面的代码我要说的是忽略从
输入中获得的坐标。鼠标位置
,不要使用
屏幕到世界点
。相反,如果对“鼠标X”和“鼠标Y”使用
Input.GetAxis
方法,则可以访问自上一帧以来鼠标移动的距离。如果仅基于这些值进行拖动移动,则拖动移动将完全基于鼠标移动,而不受摄影机的影响。