1. 程式人生 > >unity 2017.3 動態修改粒子特效引數

unity 2017.3 動態修改粒子特效引數

在各類專案中,我們都會經常的使用粒子特效,雖然大多數時候是美工提供完整的特效,但是個別情況下,我們還是需要根據實際情況去動態的修改特效的某個或多個引數。


第一步,我們需要先獲取到粒子元件。

我們可以公開一個GameObject的欄位來獲取這個物件,或者是去Find物件,當然直接掛在它身上也可以。

第二步,我們需要獲取到這個元件,直接GetComponent<ParticleSystem>()就好了。

第三步,這裡比較容易出問題。


兩種不同的寫法有不同的結果,第一次寫的時候遇到了這個問題,然後我就去看了一眼元資料,



這樣就可以看出問題所在了,如果直接去 . 的話,只能找到.shape,而.ShapeModule才是真正包含.angle的結構體,所以還必須經過一步獲取到ShapeModule。

完整程式碼如下:

using UnityEngine;

public class LaserAnimation : MonoBehaviour {
    public GameObject laser;
    private ParticleSystem L;
    ParticleSystem.ShapeModule A;
	// 初始化時執行
	void Start () {
        L = laser.GetComponent<ParticleSystem>();
        A = L.shape;
	}
	
	// 固定時間執行 Edit - Project Setting - time  Fixed timestep=0.02	
	void FixedUpdate () {
        if(A.angle<2)
        A.angle += 1f*Time.deltaTime ;
    }