OnParticleTrigger():如何让对撞机进入一个粒子?
OnParticleTrigger(): How to get the collider a particle entered?
我正在尝试在 Unity3d 中灭火。我有 2 个粒子系统:火和水。由于 2 个粒子系统无法碰撞,我在火的底部添加了一个盒子碰撞器(选中 isTrigger)。我用OnParticleTrigger()
来伤害火的健康。但是现在我想要多次点火,所以我需要知道粒子进入了哪个 fire/box 对撞机。我知道你不能得到像 OnTriggerEnter()
这样的对撞机,但有没有办法解决它?
我试过OnParticleCollision()
,但是箱体碰撞器的水粒子反弹(这不是我想要的视觉效果)。
每个触发事件我都会得到所有进入对撞机的粒子。然后,对于这些粒子中的每一个,我用 collider.bounds.Contains()
检查它们进入了哪个盒子对撞机,并破坏了盒子对撞机所属的火。我不知道这是否是最好的方法(可能不是),但目前有效。
private void OnParticleTrigger()
{
//Get all particles that entered a box collider
List<ParticleSystem.Particle> enteredParticles = new List<ParticleSystem.Particle>();
int enterCount = waterPS.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enteredParticles);
//Get all fires
GameObject[] fires = GameObject.FindGameObjectsWithTag("Fire");
foreach (ParticleSystem.Particle particle in enteredParticles)
{
for (int i = 0; i < fires.Length; i++)
{
Collider collider = fires[i].GetComponent<Collider>();
if (collider.bounds.Contains(particle.position))
{
fires[i].GetComponent<Fire>().Damage();
}
}
}
}
我正在尝试在 Unity3d 中灭火。我有 2 个粒子系统:火和水。由于 2 个粒子系统无法碰撞,我在火的底部添加了一个盒子碰撞器(选中 isTrigger)。我用OnParticleTrigger()
来伤害火的健康。但是现在我想要多次点火,所以我需要知道粒子进入了哪个 fire/box 对撞机。我知道你不能得到像 OnTriggerEnter()
这样的对撞机,但有没有办法解决它?
我试过OnParticleCollision()
,但是箱体碰撞器的水粒子反弹(这不是我想要的视觉效果)。
每个触发事件我都会得到所有进入对撞机的粒子。然后,对于这些粒子中的每一个,我用 collider.bounds.Contains()
检查它们进入了哪个盒子对撞机,并破坏了盒子对撞机所属的火。我不知道这是否是最好的方法(可能不是),但目前有效。
private void OnParticleTrigger()
{
//Get all particles that entered a box collider
List<ParticleSystem.Particle> enteredParticles = new List<ParticleSystem.Particle>();
int enterCount = waterPS.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enteredParticles);
//Get all fires
GameObject[] fires = GameObject.FindGameObjectsWithTag("Fire");
foreach (ParticleSystem.Particle particle in enteredParticles)
{
for (int i = 0; i < fires.Length; i++)
{
Collider collider = fires[i].GetComponent<Collider>();
if (collider.bounds.Contains(particle.position))
{
fires[i].GetComponent<Fire>().Damage();
}
}
}
}