c# - 当我试图让粒子系统慢慢消失时,Unity 崩溃(C 代码)
问题描述
我做了一些事情,由于某种原因,在执行这段代码后,统一就崩溃了。我想做的是慢慢地让粒子系统消失。这是代码:
public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;
private void Start()
{
ParticleSystem = GetComponent<ParticleSystem>();
OriginalTimeToDestroy = TimeToDestroy;
MaxParticle = ParticleSystem.maxParticles;
OriginalMaxParticle = MaxParticle;
Destroy(gameObject, TimeToDestroy);
while (TimeToDestroy >= 0)
{
MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
}
Destroy(gameObject);
}
private void Update()
{
TimeToDestroy -= Time.deltaTime;
}
解决方案
Malphegal 说了这么多,你有一个无限循环。您永远不会将控制权交给 Unity,以便Update
可以运行(并TimeToDestroy
减少),因此它会冻结。要么按照 Malphegal 的建议使用 Update 方法,要么制作Start
协程。
协程方式
public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;
private IEnumerator Start()
{
ParticleSystem = GetComponent<ParticleSystem>();
OriginalTimeToDestroy = TimeToDestroy;
MaxParticle = ParticleSystem.maxParticles;
OriginalMaxParticle = MaxParticle;
while (TimeToDestroy >= 0)
{
MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
yield return null;
TimeToDestroy -= Time.deltaTime;
}
Destroy(gameObject);
}
Update
方法
public float TimeToDestroy;
private ParticleSystem ParticleSystem;
private float MaxParticle;
private float OriginalTimeToDestroy;
private float OriginalMaxParticle;
private void Start()
{
ParticleSystem = GetComponent<ParticleSystem>();
OriginalTimeToDestroy = TimeToDestroy;
MaxParticle = ParticleSystem.maxParticles;
OriginalMaxParticle = MaxParticle;
}
private void Update()
{
if(TimeToDestroy >= 0)
{
TimeToDestroy -= Time.deltaTime;
MaxParticle = Mathf.Lerp(OriginalMaxParticle, 0, OriginalTimeToDestroy);
ParticleSystem.maxParticles = Mathf.RoundToInt(MaxParticle);
}
else
Destroy(gameObject);
}
推荐阅读
- javascript - 为什么这个 javascript 计算器不起作用?
- hibernate - Hibernate pooled vs pooled-lo id 生成器
- javafx - JavaFx:如何将逗号替换为 TextfieldTableCell 中的点
- openedge - 如何使用进度 4GL 在一个 csv 文件中计算总行数并创建新/选择表?
- python - 使用 decode() 时起始字节无效
- python - 如何在 Android 中从 chaquopy python 函数返回一个值(不是对象)
- java - java.lang.ClassNotFoundException:org.threeten.bp.temporal.TemporalAccessor
- r - 使用 jsonlite 解析的 GeoJSON 文件中的多面体未使用传单可视化
- javascript - javascript中不同输入文件之间的比较,无法到达全局变量
- javascript - 在运行下一个突变之前重置值