2016-06-21 2 views
1

Ok小惑星を避けながらロケット船を着陸させるゲームを開発しています。現在の垂直方向と水平方向の速度を表示するための2つのUI Text要素があります。私は周りに検索し、2Dの現在の速度を取得するために、機能に建てられた団結の面で空思い付いた剛体ので、私はこの思い付いた:GameObjectの速度をUnityで表示しようとしていると、数字があちこちにバウンスする

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!

答えて

0

リジッドボディを更新する場合は、更新ロジックを "FixedUpdate()"に入れることが重要です。このバージョンのアップデートは、設定された速度(デフォルト50x /秒)で呼び出されるため、フィジックスロジックの更新に使用する必要があります。リンク:https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

これは、更新ロジック(更新/秒)からフレームレート(ドロー/秒)を分離するため、ゲームで一般的です。つまり、フレームレート降下の意味で物理的なゲームは変更されません。

+0

Time.FixedDeltaTime値を調べる価値があります。https://docs.unity3d.com/ScriptReference/Time-fixedDeltaTime.html – Umibozu

関連する問題