如何在Unity3D中平滑我的基于加速计的角色运动

本文关键字:加速 运动 角色 于加速 Unity3D 平滑 我的 | 更新日期: 2023-09-27 18:16:03

我正在为手机平台创建一个无限垂直平台,我使用加速计来左右移动玩家。设备倾斜得越远,玩家在屏幕上移动的速度就越快。目前我的球员有点太摇晃了,我想在屏幕上创造一个更流畅的运动。下面是我移动字符的代码:

  /********************************* Variables  **************************************/
        // Variables
        float jumpForce = 700f;
        float maxSpeed;
        float acceleration;
  /********************************* Start Method ************************************/
        void Start ()
            {
            acceleration = Mathf.Abs (Input.acceleration.y);
            }
  /************************************ Fixed Update  *************************************/
        void FixedUpdate () {
                if (acceleration < 0.2f) {
                    maxSpeed = 17;
                } else if (acceleration < 0.9f) {
                    maxSpeed = 25;
                } else {
                    maxSpeed = 40;
                }
            float move = Input.acceleration.x;
                rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
    /******************************* Collision Function ******************************/
        void OnCollisionEnter2D(Collision2D coll)
            {
                foreach(ContactPoint2D contact in coll.contacts)
                {   
                     rigidbody2D.AddForce (new Vector2(0, jumpForce));
                }
            }

如何在Unity3D中平滑我的基于加速计的角色运动

你不能用你的Input.acceleration.y作为速度吗?这样你就不需要if条件了。如果这还不够,再乘以一个乘数。

void Update () {
    maxSpeed = Mathf.Abs(Input.acceleration.y);
    speedMultiplier = 30;
    float move = Input.acceleration.x;
    rigidbody2D.velocity = new Vector2 (move * maxSpeed * speedMultiplier, rigidbody2D.velocity.y);

你可以调整speedMultiplier以满足你的需要。
另外,如果你有一些物理作品(在这种情况下是rigidbody2D.velocity),你应该使用Update()而不是FixedUpdate()

您可以使用Mathf。平滑速度值的Lerp方法。

尝试使用

maxSpeed = Mathf.Lerp(maxSpeed, 17, Time.deltaTime);

代替

maxSpeed = 17;