为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
烙印99 2023-08-20 15:01:23
我有简单的脚本,当敌人击中玩家=负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); } }
查看完整描述

2 回答

?
慕侠2389804

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);

   }

}

确保粒子系统放大到足够大,以便它实际上可见。上面的代码将在敌人的位置生成一个您选择的粒子系统(您已将其拖入编辑器中的“爆炸”字段中的粒子系统)。


查看完整回答
反对 回复 2023-08-20
?
炎炎设计

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:

我不确定为什么敌人能够击中你的玩家,根据文档,这是不应该发生的。

但也许我只是误解了一些东西。


查看完整回答
反对 回复 2023-08-20
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信