You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.9 KiB
124 lines
3.9 KiB
using UnityEngine; |
|
using System.Collections; |
|
|
|
public class ParticleControl : MonoBehaviour { |
|
private ParticleSystem particle; |
|
[SerializeField] |
|
private bool startLifetimeIsOn; |
|
[SerializeField] |
|
private bool startSizeIsOn; |
|
[SerializeField] |
|
private bool RateIsOn; |
|
[SerializeField] |
|
private bool shapIsOn; |
|
private void Start() |
|
{ |
|
particle = GetComponent<ParticleSystem>(); |
|
mo = particle.emission; |
|
shap = particle.shape; |
|
curve = new ParticleSystem.MinMaxCurve(mo.rate.constant); |
|
if (RateIsOn) |
|
InvokeRepeating("RateControl", RateLateTime, Time.deltaTime); |
|
if (startSizeIsOn) |
|
InvokeRepeating("startSizeControl", startSizeLateTime, Time.deltaTime); |
|
if (startLifetimeIsOn) |
|
InvokeRepeating("startLifetimeControl", startLifetimeLateTime, Time.deltaTime); |
|
if (shapIsOn) |
|
{ |
|
if (shap.shapeType == ParticleSystemShapeType.Cone) |
|
InvokeRepeating("ConeShapControl", radiusLateTime, Time.deltaTime); |
|
if (shap.shapeType == ParticleSystemShapeType.Box) |
|
InvokeRepeating("BoxShapContron", BoxLateTime, Time.deltaTime); |
|
} |
|
} |
|
private void Update() |
|
{ |
|
|
|
} |
|
[SerializeField] |
|
private float RateMax;//数量 |
|
[SerializeField] |
|
private float RateSpeed;//数量速度 |
|
[SerializeField] |
|
private float RateLateTime;//延迟时间 |
|
private ParticleSystem.EmissionModule mo; |
|
private ParticleSystem.MinMaxCurve curve; |
|
//发射数量 |
|
private void RateControl() |
|
{ |
|
if (curve.constant < RateMax) |
|
{ |
|
curve.constant += Time.deltaTime * RateSpeed; |
|
mo.rate = curve; |
|
} |
|
else |
|
CancelInvoke("RateControl"); |
|
} |
|
[SerializeField] |
|
private float startSizeMax;//大小 |
|
[SerializeField] |
|
private float startSizeSpeed;//速度 |
|
[SerializeField] |
|
private float startSizeLateTime;//延迟时间 |
|
//粒子大小 |
|
private void startSizeControl() |
|
{ |
|
if (particle.startSize < startSizeMax) |
|
{ |
|
particle.startSize += Time.deltaTime * startSizeSpeed; |
|
} |
|
else |
|
CancelInvoke("startSizeControl"); |
|
} |
|
[SerializeField] |
|
private float startLifetimeMax;//生命周期 |
|
[SerializeField] |
|
private float startLifetimeSpeed;//速度 |
|
[SerializeField] |
|
private float startLifetimeLateTime;//延迟时间 |
|
//生命周期 |
|
private void startLifetimeControl() |
|
{ |
|
if (particle.startLifetime < startLifetimeMax) |
|
{ |
|
particle.startLifetime += Time.deltaTime * startLifetimeSpeed; |
|
} |
|
else |
|
CancelInvoke("startLifetimeControl"); |
|
} |
|
[SerializeField] |
|
private float radiusMax;//最大半径 |
|
[SerializeField] |
|
private float radiusSpeed;//速度 |
|
[SerializeField] |
|
private float radiusLateTime;//延迟时间 |
|
private ParticleSystem.ShapeModule shap; |
|
//圆形发射器大小 |
|
private void ConeShapControl() |
|
{ |
|
if (shap.radius < radiusMax) |
|
{ |
|
shap.radius += Time.deltaTime * radiusSpeed; |
|
} |
|
else |
|
CancelInvoke("ConeShapControl"); |
|
} |
|
[SerializeField] |
|
private Vector3 BoxMax;//最大尺寸 |
|
[SerializeField] |
|
private Vector3 BoxSpeed;//速度 |
|
[SerializeField] |
|
private float BoxLateTime;//延迟时间 |
|
//方形发射器大小 |
|
private void BoxShapContron() |
|
{ |
|
if (shap.box.x < BoxMax.x) |
|
shap.box = new Vector3(shap.box.x + Time.deltaTime * BoxSpeed.x, shap.box.y, shap.box.z); |
|
if (shap.box.y < BoxMax.y) |
|
shap.box = new Vector3(shap.box.x, shap.box.y + Time.deltaTime * BoxSpeed.y, shap.box.z); |
|
if (shap.box.z < BoxMax.z) |
|
shap.box = new Vector3(shap.box.x, shap.box.y, shap.box.z + Time.deltaTime * BoxSpeed.z); |
|
if (shap.box.x >= BoxMax.x && shap.box.y >= BoxMax.y && shap.box.z >= BoxMax.z) |
|
CancelInvoke("BoxShapContron"); |
|
} |
|
}
|
|
|