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

how to randomly initialize particles system in different places of scene in unity3d

我最近试着问这个问题,但我意识到这不是一个足够的问题。在我的游戏中,玩家是一名消防员学习者,我想在我的游戏中随机开火(玩家无法预测),但我不知道如何实现。 到目前为止我已经完成了这个但没有任何进展。(我有一个名为 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();
    }
        }
        }

我们将不胜感激:-)

您可以尝试使用预制件。在编辑器中创建一个游戏对象,其中包含您的火焰对象所需的任何粒子系统和脚本。完成后,将对象从层次结构拖到您的项目中。这将创建一个预制件(您现在可以将其从场景中移除)。现在,在您的生成脚本中,添加一个 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;
}