Unity Acceleration&减速C#

时间:2016-10-24 06:47:55

标签: c# unity3d

我对Unity和C#很陌生,并一直在努力解决这个问题!

我希望我的船逐渐加速,然后慢慢停下来,好像没有引力一样,因为它将成为太空游戏!

如果有人可以帮助我,甚至指导我参加这个主题的教程,我将不胜感激! :)

这是我目前的太空船代码......

using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;

public class PlayerMovement : MonoBehaviour {

    public float maxSpeed = 6f;
    public float rotSpeed = 180f;


    void Start ()
    {

    }

    void Update () {
        Quaternion rot = transform.rotation;

        float z = rot.eulerAngles.z;

        z -= CrossPlatformInputManager.GetAxis ("Horizontal") * rotSpeed * Time.deltaTime;

        rot = Quaternion.Euler (0, 0, z);

        transform.rotation = rot;

        Vector3 pos = transform.position;

        Vector3 velocity = new Vector3 (0, CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime, 0);

        pos += rot * velocity;

        transform.position = pos;


    }
}

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

与Unity中的任何内容一样,有一百种方法可以做到这一点,但我认为使用物理将是最简单的。

现在你正在直接操纵变换。这很好,但实际上比让Unitys物理为你做数学要复杂得多。

您需要做的就是将一个Rigidbody组件(或2D游戏的Rigidbody2D)附加到您的船上。

然后,通过向刚体添加力,您将获得良好的逐渐加速,并且通过在检查器中调整Rigidbodys线性和角度阻力,您将获得非常平滑和自然的减速感觉。

以下是使用物理的官方文档:https://docs.unity3d.com/Manual/class-Rigidbody.html

利用物理学是Unity开发中非常有趣和重要的一部分,所以如果你刚刚开始我强烈建议你现在就学习它,这是用它解决的完美问题。

答案 1 :(得分:0)

你可以试试这个:

Vector3 velocity = transform.forward * CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime;

pos += velocity;

transform.position = pos;

我希望它有用。