2 回答
TA贡献1719条经验 获得超6个赞
考虑到您尚未将粒子系统作为游戏对象的子对象,请尝试以下操作:
public GameObject explosion; //drag the particle system prefab here
private void OnTriggerEnter2D(Collider2D enter)
{
if (enter.gameObject.tag.Equals("Player")) //when the enemy collides with the Player
{
HartCount.HartValue -= 1;
GameObject particle = Instantiate (explosion, this.transform.position, Quaterion.identity);
particle.GetComponent<ParticleSystem>().Play();
Destroy(this.gameObject);
}
}
确保粒子系统放大到足够大,以便它实际上可见。上面的代码将在敌人的位置生成一个您选择的粒子系统(您已将其拖入编辑器中的“爆炸”字段中的粒子系统)。
TA贡献1808条经验 获得超4个赞
因此,经过一番挖掘,我找到了导致您问题的可能原因。
粒子系统不会触发 OnCollisionEnter 和 OnTriggerEnter 事件。
相反,它们会触发一个自定义事件,即OnParticleCollision。
本质上,可以在粒子系统对象以及被击中的对象上调用此方法。
你可以这样使用它:
public ParticleSystem explosion;
private void OnParticleCollision(GameObject other)
{
if (other.tag.Equals("Player"))
{
HartCount.HartValue -= 1;
gameObject.GetComponent<ParticleSystem>().Play();
Destroy(this.gameObject);
}
}
请注意,这是您的代码的改编副本。
它实际上还有一个问题:
你玩了粒子系统,但之后你直接销毁了游戏对象,因此粒子系统也消失了。
注 1:
文档缺乏有关如何检索有关粒子碰撞的更多信息的明确信息。
链接页面中的示例代码使用如下内容:
var collisionEvents = new List<ParticleCollisionEvent>();
myParticles.GetCollisionEvents(other, collisionEvents);
其中 myParticles 是对粒子系统的引用。
但是,没有关于此方法的文档。
相反,有一些关于过时的静态GetCollisionEvent 的
文档 ,我想该文档已经过时了,因此您应该使用非静态方法。
注 2:
我不确定为什么敌人能够击中你的玩家,根据文档,这是不应该发生的。
但也许我只是误解了一些东西。
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报