撞墙后Unity 3D停止生成粒子

时间:2019-05-28 10:42:51

标签: c# unity3d

我正在为学校工作:像是轰炸机的游戏。
我的问题是,炸弹爆炸时,粒子应在墙后停止产生。这里是问题的图像:

我在这里有以下代码来生成炸弹并启动协程以在每个方向上生成粒子:

void Explode()
    {
        Instantiate(explosionPrefab, transform.position, Quaternion.identity);
        StartCoroutine(CreateExplosions(Vector3.forward));
        StartCoroutine(CreateExplosions(Vector3.right));
        StartCoroutine(CreateExplosions(Vector3.back));
        StartCoroutine(CreateExplosions(Vector3.left));
        GetComponent<MeshRenderer>().enabled = false;
        exploded = true;
        GetComponent<CapsuleCollider>().enabled = false;
        Invoke("desativar_particulas", 0.4f);
        Destroy(gameObject, .45f);

      }

这是我的协程生成粒子:

 private IEnumerator CreateExplosions(Vector3 direction)
{
    for (int i = 1; i < 3; i++)
    {

        RaycastHit hit;

        Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction * 10, out hit, i, levelMask);

        if (!hit.collider)
        {
                Instantiate(explosionPrefab, transform.position + (i * direction * 10), explosionPrefab.transform.rotation);
        }

        else
        {
            break;
        }


        yield return new WaitForSeconds(.05f);
    }
}

该if语句应该可以解决问题:墙壁上有一个盒子组件碰撞器,而粒子有一个盒子碰撞组件作为触发器。 我想念什么吗?请帮忙,谢谢。

2 个答案:

答案 0 :(得分:1)

在此: Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction * 10, out hit, i, levelMask) 看起来您每次都在增加每次施法的距离以到达下一个方块(顺便说一句,是聪明的举动。我会以更复杂的方式做到这一点。),但只能达到3,而在所有提及爆炸位置的信息中,您都将其放大了十倍。 您可能是想做这样的事情吗?

Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction, out hit, i * 10, levelMask)

光线投射的方向只是您输入该功能的方向,而距离会放大十倍吗?

答案 1 :(得分:0)

您可以在此子菜单中配置碰撞在粒子系统中的工作方式,动态地进行可能很困难:

enter image description here