void Update ( ) 更新 void FixedUpdate ( )
void Update ( ) 更新?
void FixedUpdate ( ) 固定更新
相同點(diǎn):當(dāng)MonoBehaviour啟用時(shí),其在每一幀被調(diào)用,都是用來更新的。?
異同點(diǎn):第一點(diǎn)不同:?
Update()每一幀的時(shí)間不固定,即第一幀與第二幀的時(shí)間間隔t1和第三幀與第四幀的時(shí)間間隔t2不一定相同。比如:
代碼片段:
using UnityEngine;using System.Collections;public class TestScript : MonoBehaviour{int i = 0;float time = 0f;void Update () {i ++;time = Time.deltaTime;Debug.Log("這是第" + i + "幀");Debug.Log("時(shí)間為:" + time);}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
這里t1 = 0.04 - 0.02 = 0.02;t2 = 0.55 - 0.35 = 0.2;大約相差了十倍。而如果使用FixedUpdate()會(huì)出現(xiàn)什么情況?
代碼片段:
using UnityEngine;using System.Collections;public class TestScript : MonoBehaviour{int i = 0;float time = 0f;void FixedUpdate () {i ++;time = Time.deltaTime;Debug.Log("這是第" + i + "幀");Debug.Log("時(shí)間為:" + time);}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
我們很清楚地看到t1 = t2 = 0.02。也就是說,FixedUpdate()每幀與每幀之間相差的時(shí)間是固定的,而Update()不是固定的。?
第二點(diǎn)不同:?
Update受當(dāng)前渲染的物體影響,這與當(dāng)前場(chǎng)景中正在被渲染的物體有關(guān)(比如人物的面數(shù),個(gè)數(shù)等),有時(shí)快有時(shí)慢,幀率會(huì)變化,Update被調(diào)用的時(shí)間間隔就會(huì)發(fā)生變化。但是FixedUpdate則不受幀率的變化影響,它是以固定的時(shí)間間隔來被調(diào)用。?
在官網(wǎng)文檔中也提到說: 處理Rigidbody時(shí),需要用FixedUpdate代替Update。例如:給剛體加一個(gè)作用力時(shí),你必須應(yīng)用作用力在FixedUpdate里的固定幀,而不是Update中的幀。(兩者幀長不同)。正是因?yàn)镕ixedUpdate是以固定的時(shí)間間隔來被調(diào)用,所以人物運(yùn)動(dòng)起來比較平滑(運(yùn)動(dòng)起來不會(huì)有忽快忽慢的感覺,像是跳幀似的),這也就是為什么處理Rigidbody時(shí)要用FixedUpdate了(當(dāng)然還有其他一些原因)。FixedUpdate是以固定的時(shí)間間隔來被調(diào)用的,而這個(gè)固定的時(shí)間是可以修改的。?
Edit->Project Setting->time 下的Fixed timestep。?
?
這里是0.02;與上面做的實(shí)驗(yàn)t1 = t2 = 0.02一致
總結(jié)
以上是生活随笔為你收集整理的void Update ( ) 更新 void FixedUpdate ( )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3d 插值同步
- 下一篇: 9 月 19 日,腾讯云安全中心监测到