粒子系统行为对于由几个游戏对象组件组成的游戏对象是不同的

时间:2016-03-14 09:12:35

标签: c# unity3d collision particle-system unity3d-2dtools

我有2D游戏。我有游戏对象,这些游戏对象由带有碰撞器的单一形状组成,有些是由几个形状组成的,并且包含在我添加了角色对撞机的空游戏对象中。所有游戏对象都添加了粒子系统,单个形状的游戏对象按预期工作并在碰撞上爆炸,多形状物体不会。

当使用Play On Awake和循环测试它们时,爆炸按预期工作,但它们不会在onCollision上爆炸。我已经尝试将粒子系统放在外部游戏对象内的一个形状上,然后它显示一个错误缺失组件系统,试图访问x对象的粒子系统,这是有道理的。

在每个游戏Object C#类中,我有以下方法:

private void OnCollisionEnter(Collision coll)
{
    Explode();
}

private void Explode()
{
    var exp = GetComponent<ParticleSystem>();
    exp.Play();
    GetComponent<Renderer>().enabled = false;
    Destroy(gameObject, exp.duration);
}

炸弹的速度设定为0,一次爆炸。

我尝试过搜索,但在使用由多个3D游戏对象形状组成的游戏对象中的粒子系统时,找不到所需的缺失信息。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我把它整理出来了,因为不了解该做什么以及制造黑客行为而产生了一些问题。

第一个问题是在子对象中创建了渲染器,因此最好获取所有子对象并循环遍历这些对象,然后在每个对象中禁用渲染器。

我还删除了角色对撞机,因为这不需要并使用了球体对撞机。

然后我取消选中是运动学的,因为这可以阻止我在空中的游戏对象被踢,而是我在僵硬的身体中增加了质量。

在爆炸方法中,我注释掉了删除渲染可见性,因为它干扰了爆炸:

private void Explode()
{
    var exp = GetComponent<ParticleSystem>();
    exp.Play();
    //GetComponent<Renderer>().enabled = false;
    Destroy(gameObject, exp.duration);
}

我还将粒子系统的开始寿命延长到超过持续时间。确保在物体被摧毁时粒子可见。

我仍然需要调整爆炸,但这给我带来了很大的影响。