为什么在以下代码中vector 3移动的X坐标始终为0?Camera.main.ScreenToWorldPoint方法返回的X分量始终为0,即使Input.mounsPosition提供X!=0。
private void Pan()
{
// save initial position of mouse whenn RMB pressed for first time
if(Input.GetMouseButtonDown(1))
{
mouseWorldPosStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
// calculate distance between initial mouse position and current mouse position
if (Input.GetMouseButton(1))
{
var newMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 mouseWorldPosDiff = mouseWorldPosStart - newMousePosition;
Debug.Log( "Initial position: " + mouseWorldPosStart + " Delta = " + mouseWorldPosDiff + " New Position: " + newMousePosition );
//move the camere by the distance
transform.position += mouseWorldPosDiff;
}
}
目标是编写摄像机平移功能的代码。
1条答案
按热度按时间1bqhqjot1#
我认为主要的问题将是,当你移动相机时,即使没有进一步移动光标,
ScreenToWorldPoint
也已经返回了一个新值。你更需要保存原点,然后用一个delta来移动相机。我想可能是像eidogg这样的东西。
这里的技巧是,我们使用局部空间来计算摇摄,然后将其转换回全局空间,以便将此增量添加到初始世界空间位置。这样,相机本身的移动不会直接影响
ScreenToWorldPoint
增量