试图在Unity中显示GameObject的速度,数字全都弹跳

时间:2016-06-21 23:58:46

标签: unity5

好的我正在开发一种游戏,你可以在这种游戏中登陆火箭飞船,同时避开小行星......非常简单。我有两个UI Text元素,用于显示当前的垂直和水平速度。我搜索了一下并且在统一性方面显得很空洞,它具有内置功能以获得2D刚体的当前速度所以我想出了这个:

void Update () {

    shipVelocity = Mathf.Abs((lastPosition.y - spaceShip.transform.position.y) / Time.deltaTime);
    shipAngularVelocity = Mathf.Abs((lastPosition.x - spaceShip.transform.position.x) / Time.deltaTime);
    uiText = "Vertical Velocity: " + shipVelocity;
    currentVelocityText.text = uiText;
    uiText = "Horizontal Velocity: " + shipAngularVelocity;
    currentAngularVelocityText.text = uiText;

    lastPosition = spaceShip.transform.position;
}

基本上它只是你的标准速度=增量位置/增量时间,但有些事情是错误的。数字在整个地方反弹,在船降落并完全静止之后,数字仍然从0-1反弹。虽然飞行时数字迅速从我认为的准确速度变为0并且返回 - 如此之快,它基本上看起来就像是在眨眼。

难道它只是称它太快了吗?即帧率太高了?如果是这样,我怎么能减慢速度呢?

日Thnx!

1 个答案:

答案 0 :(得分:0)

如果要更新Rigidbody,请务必将更新逻辑放在" FixedUpdate()"中。此版本的更新以设定速率(默认为50x / sec)调用,因此应用于更新物理逻辑。链接:https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

这在游戏中很常见,因为它将帧速率(绘制/秒)与更新逻辑(更新/秒)分开,这意味着帧速率下降,物理游戏不会改变。