我正在尝试编写相机脚本,但无法正常工作。
void LateUpdate(){
if (Input.GetMouseButtonDown(0)
{
_lastPosition = Input.mousePosition;
}
if (Input.GetMouseButton(0))
{
var delta = _lastPosition - Input.mousePosition;
var deltaxz = new Vector3(delta.x, 0f, delta.y);
transform.Translate(deltaxz * Time.deltaTime, Space.World);
_lastPosition = Input.mousePosition;
}
}
我编写了这段代码来移动相机,但是鼠标却奇怪地移动了相机。如果我将鼠标移动得太快,它也会移动得很快。如果速度较慢,则相机的移动速度将比鼠标慢。
我认为ScreenToWorldPoint
可以提供帮助,但是摄像机是RTS样式,我想像移动地面“拖放”一样移动它\
答案 0 :(得分:0)
您应该尝试使用
Vector3.Lerp(_lastPosition, deltaxz, someValue * Time.deltaTime)
这是我用来使运动更平滑的方法,它非常好,只需根据所需速度调整一些值
答案 1 :(得分:0)
那是因为deltaTime(总是约0.01f-0.02f =多次迭代的精度差) 您可以使用Lerp变通办法来像Jichael一样平滑移动,但要稍作更改(直接与transform.positon一起使用),完整代码:
//new:
public float Sensitivity;
private Vector3 _lastPosition;
private void LateUpdate()
{
if (Input.GetMouseButtonDown(0))
{
_lastPosition = Input.mousePosition;
}
if (Input.GetMouseButton(0))
{
var delta = (_lastPosition - Input.mousePosition);
var deltaxz = new Vector3(delta.x, 0f, delta.y);
//new:
transform.position = Vector3.Lerp(transform.position, transform.position + deltaxz, Sensitivity * Time.deltaTime);
_lastPosition = Input.mousePosition;
}
}
P.S。为什么要使用LateUpdate?