在各类项目中,我们都会经常的使用粒子特效,虽然大多数时候是美工提供完整的特效,但是个别情况下,我们还是需要根据实际情况去动态的修改特效的某个或多个参数。
第一步,我们需要先获取到粒子组件。
我们可以公开一个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 ;
}