2016-10-07 814 views
0

我的particlesystem.Play()不起作用。我已經花了幾個小時在這個問題上,仍然無法弄清楚。Unity ParticleSystem播放和停止

每當我的角色遇到一個對象時,它會調用函數particleAuraPlay(),並顯示日誌消息「HIT」,表示函數被正確調用。

playAura設置爲true時,粒子應該播放,並且再次顯示日誌消息「正在運行」。由於信息顯示我假設我的邏輯是正確的,但粒子不會開始播放。任何人都可以解決我的問題嗎?

using UnityEngine; 
using System.Collections; 

public class ParticleController : MonoBehaviour { 

    private bool playAura = false; 
    private ParticleSystem particleObject; 

    void Start() { 
     particleObject = GetComponent<ParticleSystem>(); 
     particleObject.Stop(); 
    } 


    void Update() { 
     if (playAura) 
     { 
      Debug.Log("Running"); 
      particleObject.Play(); 
     } 

    } 

    public void particleAuraPlay() 
    { 
     Debug.Log("HIT"); 
     playAura = true; 
    } 
} 
+0

邏輯似乎是正確的...查看您的粒子系統對象是活動或不...並檢查其上繪製或位置的層? – user1201239

+0

@ bubibu - 你確定粒子系統在正確的位置嗎?在忘記父母之前,我遇到了問題,或者我使用了錯誤的座標系。另外,我不會在更新中調用Play,只需調用一次即可。 – Absinthe

+0

嗨感謝您的回覆。我很確定它是在正確的位置,因爲如果我排除了particleObject.Stop()這一行,粒子將開始播放。 – bubibu

回答

0

When the playAura is set to true, the particle should play, and again the log message "Running" is showing up, too. Since the message is showing I assume my logic is correct but the particle just won't start playing

的是一個邏輯錯誤。

當調用particleAuraPlay()函數時,playAura設置爲true

在更新的功能,因爲particleObject.Play();playAuratrue將被稱爲每一幀

你不能這樣做。調用particleObject.Play();每一幀實際上都不會做任何事情,因爲它會嘗試播放和停止每幀中的粒子,導致沒有粒子。

解決的辦法是檢查是否playAuratrue,如果true,調用particleObject.Play();功能然後設置playAurafalse,使particleObject.Play();功能將不會被再次調用,直到particleAuraPlay()被再次調用。

Update()功能修復邏輯錯誤:

void Update() 
{ 
    if (playAura) 
    { 
     Debug.Log("Running"); 
     particleObject.Play(); 
     playAura = false; 
    } 
}