close
我的環境配置:Windows 10、Unity 5.3.4f1。
 
 
相信大家都知道 Time.timeScale 的用途,它是用來控制遊戲運作速度的,而遊戲中有個很基本的功能,那就是 "暫停",相信很多人的做法都是將 Time.timeScale 設為 0 來達到暫停的效果。
 
但是問題來了,在 Time.timeScale 為 0 的情況底下,Unity 的 Animation 與 ParticleSystem 都會跟著被暫停,但是偏偏有些暫停畫面也會用到一些 Animation 或者 ParticleSystem 來做一些點綴,所以我們要如何讓這兩項功能 Time.timeScale 為 0 的情況下繼續運作呢?
 
 
Animation 在 Time.timeScale 為 0 時,也能繼續運作的方法:
Animation 比較容易,直接將 Animator 裡面的 UpdateMode 改成 UnscaledTime 就可以了,該更新模式就不受 Time.timeScale 影響

image01.jpg

image02.jpg

 
 
ParticleSystem 在 Time.timeScale 為 0 時,也能繼續運作的方法:
ParticleSystem 需要建立一個腳本,在 Update 方法中自行更新
 
private void Update()
{
    // 更新粒子系統, 
    // Time.unscaledDeltaTime 可以解釋為不受 Time.timeScale 影響的 Time.deltaTime, 
    // 所以可以用來取代 Time.deltaTime, 來當作粒子系統運作時的依據
    particleSystem.Simulate( Time.unscaledDeltaTime, true, false );
}
 
這邊我們使用 Time.unscaledDeltaTime 來當作更新需要的時間參數,因為當 Time.timeScale 為 0 時,Time.deltaTime 也會跟著變成 0,而 Time.unscaledDeltaTime 則不受 Time.timeScale 的影響。
 
Simulate 方法所接收的三個參數分別為
參數 1 = 更新時的時間參數,值越大粒子運作得越快,值越小粒子運作得越慢,若值為 0,則粒子系統一樣不會運作。
參數 2 = 該 ParticleSystem 底下的子物件若也是 ParticleSystem 的話,是否需要一起更新?
參數 3 = 該 ParticleSystem 是否要重置?重新執行?若參數 2 為 true 的話,也是會受到參數 3 的影響喔! 
 
 
下面我有提供範例,以及更新 ParticleSystem 的腳本,大家可以直接下載腳本,直接拖曳到 ParticleSystem 物件上,就可以直接使用了

image03.jpg

 
 
 
arrow
arrow

    岳 發表在 痞客邦 留言(0) 人氣()