粒子系统 OnTriggerEnter 不起作用(但所有其他功能都起作用)

我有简单的脚本,当敌人击中玩家=负1生命时的onTriggerEnter2d等,效果完美。


现在我想向其中添加粒子系统爆炸,但什么也没有发生。不确定我做错了什么。


玩家拥有 BoxColder2d,并勾选了触发器。


谢谢你的帮助。


一些代码:


敌人:


 public ParticleSystem explosion;

 private void OnTriggerEnter2D(Collider2D enter)

 {

 if (enter.gameObject.tag.Equals("Player"))

 {

     HartCount.HartValue -= 1;

     gameObject.GetComponent<ParticleSystem>().Play();

     Destroy(this.gameObject);

 }

 }

我也尝试过这个:


 public GameObject explosion;

 private void OnTriggerEnter2D(Collider2D enter)

 {

 if (enter.gameObject.tag.Equals("Player"))

 {

     HartCount.HartValue -= 1;

     Instantiate (explosion, transform.position, Quaterion.identity);

     Destroy(this.gameObject);

 }

 }


烙印99
浏览 172回答 2
2回答

慕侠2389804

考虑到您尚未将粒子系统作为游戏对象的子对象,请尝试以下操作:public GameObject explosion;&nbsp; //drag the particle system prefab hereprivate void OnTriggerEnter2D(Collider2D enter){&nbsp; &nbsp;if (enter.gameObject.tag.Equals("Player")) //when the enemy collides with the Player&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; HartCount.HartValue -= 1;&nbsp; &nbsp; &nbsp; GameObject particle = Instantiate (explosion, this.transform.position, Quaterion.identity);&nbsp; &nbsp; &nbsp; particle.GetComponent<ParticleSystem>().Play();&nbsp; &nbsp; &nbsp; Destroy(this.gameObject);&nbsp; &nbsp;}}确保粒子系统放大到足够大,以便它实际上可见。上面的代码将在敌人的位置生成一个您选择的粒子系统(您已将其拖入编辑器中的“爆炸”字段中的粒子系统)。

炎炎设计

因此,经过一番挖掘,我找到了导致您问题的可能原因。粒子系统不会触发 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:我不确定为什么敌人能够击中你的玩家,根据文档,这是不应该发生的。但也许我只是误解了一些东西。
打开App,查看更多内容
随时随地看视频慕课网APP