【问题标题】:Unity smooth precise camera moving with inertiaunity 平滑精确相机随惯性移动
【发布时间】:2019-02-17 22:40:23
【问题描述】:

我正在尝试编写相机脚本,但它没有按预期工作。

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 风格,我想像移动地面一样移动它“拖放”\

【问题讨论】:

    标签: c# unity3d vector camera human-computer-interface


    【解决方案1】:

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

    这是我用来让动作更流畅的东西,非常好,只需根据你想要的速度调整 someValue

    【讨论】:

      【解决方案2】:

      那是因为 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?

      【讨论】:

      • 感谢您的回答!这是完全一样的。尝试将相机以 5 个单位放置在地面上,它移动得非常快,而不是像素到像素。我正在使用lateupdate,因为我想在所有事情之后移动相机以避免小滞后
      • 如果你想让它变慢 - 降低感觉
      • 不要让速度变慢。要有精准的动作。和同样的规模。距离地面 1 个单位或 50 个单位无关紧要
      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多