如何在unity3d中随机初始化场景中不同场景的粒子系统

时间:2016-04-11 18:46:02

标签: unity3d unity5

我最近尝试过问这个问题,但我意识到这不是一个充分的问题。在我的游戏中,玩家是消防员学习者,我想在我的游戏中随机爆发火焰(就像玩家无法预测的那样),但我不知道如何实现这一点。 到目前为止,我已经做到了这一点,但没有什么事情发展。(我有一个空的对象,称为统一的t,有3到5个粒子系统,并且所有都设置为在开始时不醒) 代码在这里:

using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
public ParticleSystem[] particles;
public int numOn = 3;
public int j;

void Start() {
    for (int i = 0; i < particles.Length - 1; i++) {
         j = Random.Range(i + 1, particles.Length - 1);
        ParticleSystem t = particles[j];
        particles[j] = particles[i];
        particles[i] = t;
    }
    for (j = 0; j < numOn; j++ )
    {
        particles[j].Play();
    }
        }
        }

帮助将不胜感激: - )

1 个答案:

答案 0 :(得分:1)

您可以尝试使用预制件。在编辑器中创建一个游戏对象,其中包含您的fire对象所需的任何粒子系统和脚本。一旦它好,将对象从层次结构拖到项目中。这将创建一个预制件(您现在可以从场景中删除它)。现在,在您的产卵脚本上,添加一个GameObject类型的字段,然后将之前制作的预制件拖入其中。现在,当您需要创建一个时,只需调用Instantiate(prefabVar)即可创建预制件的副本。

编辑:
对于您的特定情况,因为您只想在随机位置实例化一个火,您可以让您的产卵脚本看起来像这样:

public Transform[] SpawnPoints;
public GameObject FirePrefab;

void Start() {
    Transform selectedSpawnPoint = SpawnPoints[(int)Random.Range(0, SpawnPoints.Count - 1)];
    Instantiate(FirePrefab, selectedSpawnPoint.position, selectedSpawnPoint.rotation);
}

如果需要,此解决方案允许您潜在地生成多个火灾对象。另一种选择是,如果你在场景中只有一个火对象。该对象不是从预制件实例化,而是已经在场景中,您只需将其移动到场景开始处的一个生成点即可。火对象本身的示例脚本:

public Transform[] SpawnPoints;

void Start() {
    Transform selectedSpawnPoint = SpawnPoints[(int)Random.Range(0, SpawnPoints.Count - 1)];
    transform.position = selectedSpawnPoint.position;
    transform.rotation = selectedSpawnPoint.rotation;
}