Unity游戲暫停之Update與FixedUpdate區別


游戲暫停

示例程序

下面這段代碼演示游戲暫停

using UnityEngine;
using System.Collections;

public class GamePauseTest : MonoBehaviour
{
    public float moveSpeed = 2.0f;

    void Update ()
    {
        //move
        transform.Translate (new Vector3 (0, 0, moveSpeed * Time.deltaTime));
    }
 
    void OnGUI ()
    {

        if (GUI.Button (new Rect (140, 0, 100, 50), "暫停")) {
            Time.timeScale = 0;
        }

        if (GUI.Button (new Rect (280, 0, 100, 50), "繼續")) {
            Time.timeScale = 1;
        }
    }
}

注意事項

示例中的 速度*Time.deltaTime ,目的是保證游戲運行在 幀數不同的情況下角色移動速度都一樣,因為此時角色是按時間移動與幀數無關。

Update和FixedUpdate區別

FPS=2的情況

FPS=60的情況

 

Update和FPS有關

從上面的兩幅圖可以看了,當FPS為2時,update打印的次數特別少,而當FPS改為60時,update打印的次數就明顯提高了很多

總結

update跟當前平台的幀數有關,而FixedUpdate是真實時間,所以處理物理邏輯的時候要把代碼放在FixedUpdate而不是Update.

Update

Update是在每次渲染新的一幀的時候才會調用,也就是說,這個函數的更新頻率和設備的性能有關以及被渲染的物體(可以認為是三角形的數量)。在性能好的機器上可能fps 30,差的可能小些。這會導致同一個游戲在不同的機器上效果不一致,有的快有的慢。因為Update的執行間隔不一樣了。

FixedUpdate

FixedUpdate是在固定的時間間隔執行,不受游戲幀率的影響。Tick:在處理Rigidbody的時候最好用FixedUpdate。

修改FixedUpdaet

FixedUpdate的時間間隔可以在項目設置中更改,點擊 Edit - Project Setting - time  找到 Fixed timestep,就可以修改了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM