首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单位平滑精密相机惯性运动

单位平滑精密相机惯性运动
EN

Stack Overflow用户
提问于 2019-02-18 06:40:23
回答 2查看 1.2K关注 0票数 0

我正在尝试写一个相机脚本,但它不能像预期的那样工作。

代码语言:javascript
复制
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可以提供帮助,但相机是即时通讯的风格,我想要移动它,就像我移动地面“拖放”\

EN

回答 2

Stack Overflow用户

发布于 2019-02-18 16:24:45

您应该尝试使用Vector3.Lerp(_lastPosition, deltaxz, someValue * Time.deltaTime)

这是我用来让动作更流畅的东西,它很不错,只需根据你想要的速度调整someValue即可

票数 0
EN

Stack Overflow用户

发布于 2019-02-18 19:40:53

这是因为deltaTime (在很多迭代中它总是大约0.01f-0.02f =不好的精度),你可以使用Lerp变通方法来平滑移动,就像Jichael一样,但有很小的变化(它直接与transform.positon一起工作),完整的代码:

代码语言:javascript
复制
//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?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54738337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档