首页 文章

Unity3D Choppy Camera Motion

提问于
浏览
0

我尝试了许多不同的方法,但从未成功完成一个非常流畅的相机运动 . 即使在非常简单的场景中,相机跟随也不够好 . 运动中有尖峰 . 尖峰不是定期发生,而是随机发生 . 如果我不知道某些游戏(例如Manuganu)统一制作并且有完美的相机跟随,我认为这是不可能的 .

我到目前为止所尝试的内容: - 更改LateUpdate / FixedUpdate中的摄像头位置 . - 制作我的目标插值/外推 . -Moved相机取决于Deltatime . - 增加物理步骤 . - 设置targetframerate = 60.-使用所有质量设置,Vsync等 . - 许多变化和其他东西......

最好的情况是,随机打嗝......在手机和编辑器中都会发生 . Unity的示例脚本也不能完美地运行 . 由于这个打嗝问题,我无法继续开发sidecroll runner游戏 .

问题是:有没有我没有提到的方式,互联网上有什么例子吗?我做了我能做的一切 .

transform.position = new Vector3(target.x, target.y, -10);

这是我在LateUpdate中更新相机位置的方法 .

PS:没有FPS掉线问题 .

2 回答

  • 1

    @Kashbel有一半 . 您使用的是固定移动值,但无法保证每帧都占用相同的实际时间 . 您需要确保每秒的单位是常量,这意味着您需要使用时间来控制更新的速度 .

    处理此问题的典型方法是使用 Time.DeltaTime ,它始终是一小部分,以秒为单位表示帧的实际长度 . 例如,如在文档中:

    using UnityEngine;
    using System.Collections;
    
    public class ExampleClass : MonoBehaviour {
        void Update() {
            float translation = Time.deltaTime * 10;
            transform.Translate(0, 0, translation);
        }
    }
    

    这里脚本将以每秒10个单位的速度移动它的游戏对象,无论帧速率如何 . 如果没有 Time.deltaTime ,它可能会在一帧的1/60秒内移动10个单位,而在1/15秒内在特别慢的帧上移动10个单位 .

  • 0

    尝试使用 Lerp 函数而不是直接移动 transform.position .

    它会像 transform.position = Vector3.Lerp(startPosition, endPosition, time);

    使用它应该很顺利 . 您有更多的信息和示例Vector3.Lerp Unity3D

相关问题