1. 程式人生 > >Unity之Update與FixedUpdate區別

Unity之Update與FixedUpdate區別

str 點擊 區別 com unity 3-0 auto ongui info

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

技術分享圖片
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; } } }
GamePauseTest

註意事項

示例中的 速度*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,就可以修改了。

點擊查看原文

Unity之Update與FixedUpdate區別