C# 粒子系统OnTiggerCenter不工作(但所有其他功能都不工作)

C# 粒子系统OnTiggerCenter不工作(但所有其他功能都不工作),c#,unity3d,C#,Unity3d,我有一个简单的脚本,当敌人击中玩家时,OnTiggerEnter2D=负1生命等等。效果完美 现在我想给它添加粒子系统爆炸,但什么都没有发生。不知道我做错了什么 玩家有一个勾选了触发器的BoxColider2d 谢谢你的帮助 一些代码: 敌人: public ParticleSystem explosion; private void OnTriggerEnter2D(Collider2D enter) { if (enter.gameObject.tag.Equals("Player"

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

现在我想给它添加粒子系统爆炸,但什么都没有发生。不知道我做错了什么

玩家有一个勾选了触发器的BoxColider2d

谢谢你的帮助

一些代码:

敌人:

 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;  //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);
   }
}
公开游戏对象爆炸//将粒子系统预设拖到此处
私有void OnTiggerEnter2D(碰撞r2D输入)
{
如果(输入.gameObject.tag.Equals(“玩家”)//当敌人与玩家碰撞时
{
HartCount.HartValue-=1;
游戏对象粒子=实例化(爆炸,this.transform.position,Quaterion.identity);
particle.GetComponent().Play();
摧毁(这个游戏对象);
}
}
确保粒子系统的比例足够大,使其实际可见。
上面的代码将在敌人的位置产生一个你选择的粒子系统(你在编辑器中拖入“爆炸”区域的粒子系统)

考虑到您尚未将粒子系统作为游戏对象的子对象,请尝试以下操作:

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);
   }
}
公开游戏对象爆炸//将粒子系统预设拖到此处
私有void OnTiggerEnter2D(碰撞r2D输入)
{
如果(输入.gameObject.tag.Equals(“玩家”)//当敌人与玩家碰撞时
{
HartCount.HartValue-=1;
游戏对象粒子=实例化(爆炸,this.transform.position,Quaterion.identity);
particle.GetComponent().Play();
摧毁(这个游戏对象);
}
}
确保粒子系统的比例足够大,使其实际可见。
上面的代码将在敌人的位置产生一个你选择的粒子系统(你在编辑器中拖入“爆炸”区域的粒子系统)

因此,经过一番挖掘,我找到了您问题的可能原因。
粒子系统不会触发碰撞中心和碰撞中心事件。
相反,它们会触发一个自定义事件,即

本质上,可以对粒子系统对象以及被击中的对象调用此方法。
您可以这样使用它:

public ParticleSystem explosion;

private void OnParticleCollision(GameObject other)
{
    if (other.tag.Equals("Player"))
    {
        HartCount.HartValue -= 1;
        gameObject.GetComponent<ParticleSystem>().Play();
        Destroy(this.gameObject);
    }
}
公共粒子系统爆炸;
私有void OnParticleCollision(游戏对象其他)
{
if(other.tag.Equals(“玩家”))
{
HartCount.HartValue-=1;
gameObject.GetComponent().Play();
摧毁(这个游戏对象);
}
}
请注意,这是您的代码的改编副本。
实际上,它还有另一个问题:
你玩粒子系统,但之后你直接摧毁了游戏对象,因此粒子系统也消失了

注1:
文档中缺少有关如何检索有关粒子碰撞的更多信息的明确信息。
链接页面中的示例代码使用如下内容:

var collisionEvents = new List<ParticleCollisionEvent>();
myParticles.GetCollisionEvents(other, collisionEvents);
var collisionEvents=new List();
myParticles.GetCollisionEvents(其他,collisionEvents);
其中myParticles是对粒子系统的引用

但是,没有关于此方法的文档。
相反,有一些关于过时静态的文档
我猜文档已经过时了,因此您应该使用非静态方法

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

但也许我只是遗漏了什么。

所以经过一些挖掘,我找到了你问题的可能原因。
粒子系统不会触发碰撞中心和碰撞中心事件。
相反,它们会触发一个自定义事件,即

本质上,可以对粒子系统对象以及被击中的对象调用此方法。
您可以这样使用它:

public ParticleSystem explosion;

private void OnParticleCollision(GameObject other)
{
    if (other.tag.Equals("Player"))
    {
        HartCount.HartValue -= 1;
        gameObject.GetComponent<ParticleSystem>().Play();
        Destroy(this.gameObject);
    }
}
公共粒子系统爆炸;
私有void OnParticleCollision(游戏对象其他)
{
if(other.tag.Equals(“玩家”))
{
HartCount.HartValue-=1;
gameObject.GetComponent().Play();
摧毁(这个游戏对象);
}
}
请注意,这是您的代码的改编副本。
实际上,它还有另一个问题:
你玩粒子系统,但之后你直接摧毁了游戏对象,因此粒子系统也消失了

注1:
文档中缺少有关如何检索有关粒子碰撞的更多信息的明确信息。
链接页面中的示例代码使用如下内容:

var collisionEvents = new List<ParticleCollisionEvent>();
myParticles.GetCollisionEvents(other, collisionEvents);
var collisionEvents=new List();
myParticles.GetCollisionEvents(其他,collisionEvents);
其中myParticles是对粒子系统的引用

但是,没有关于此方法的文档。
相反,有一些关于过时静态的文档
我猜文档已经过时了,因此您应该使用非静态方法

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

但也许我只是问了一些问题。

这些粒子有对撞机吗?玩家层和粒子层之间的碰撞被激活了吗?这两个对象中有没有一个有rigidbody2d?我的粒子有碰撞器,我设置的层是默认的,看起来应该可以工作。Eddge-敌人和玩家有刚体,粒子有对撞机吗?玩家层和粒子层之间的碰撞被激活了吗?这两个对象中有没有一个有rigidbody2d?我的粒子有碰撞器,我设置的层是默认的,看起来应该可以工作。埃奇-敌人和玩家都有刚体