我正在尝试写一个相机脚本,但它不能像预期的那样工作。
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可以提供帮助,但相机是即时通讯的风格,我想要移动它,就像我移动地面“拖放”\
发布于 2019-02-18 16:24:45
您应该尝试使用Vector3.Lerp(_lastPosition, deltaxz, someValue * Time.deltaTime)
这是我用来让动作更流畅的东西,它很不错,只需根据你想要的速度调整someValue即可
发布于 2019-02-18 19:40:53
这是因为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;
}
}附言:你为什么要用LateUpdate?
https://stackoverflow.com/questions/54738337
复制相似问题