仅在场景开始时在几个随机位置生成多个随机对象
Spawning several random objects in several random positions only when a scene begins
我只想在场景开始时在几个随机位置生成几个随机对象。我该怎么做?这是我的代码,但只出现了一个对象。
using UnityEngine;
using System.Collections;
public class SpawnItems : MonoBehaviour
{
public Transform[] SpawnPoints;
public GameObject[] Objetos;
void Start ()
{
int spawnindex = Random.Range (0, SpawnPoints.Length);
int objectindex = Random.Range (0, Objetos.Length);
Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation);
}
}
我相信这是因为您在 Start()
函数中调用了 spawnindex
。
这意味着您的 spawnindex
将始终与 Start()
函数相同的数字,或多或少只会在您点击播放模式时发生一次。
这也意味着 objectIndex
具有相同的编号,所以它总是会生成相同的对象。
这意味着您所有生成的对象都使用相同的编号生成。如果您查看层次结构,您的 GameObjects
可能都在相同的位置和相同的对象中。
您需要找到一种方法来为每个 GameObject
生成不同的数字。 :-)
编辑:
此代码来自 Unity 网站的其中一个教程。它以设定的时间速率生成对象。您可以这样做,但将生成时间率设置为非常小的数字,这样您所有的 GameObject
就会看起来是同时生成的。
void Start ()
{
// Call the Spawn function after a delay of the spawnTime and then continue to call after the same amount of time.
InvokeRepeating ("Spawn", spawnTime, spawnTime);
}
void Spawn ()
{
// If the player has no health left...
if(playerHealth.currentHealth <= 0f)
{
// ... exit the function.
return;
}
// Find a random index between zero and one less than the number of spawn points.
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
// Create an instance of the enemy prefab at the randomly selected spawn point's position and rotation.
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
你可以只用循环
Start()
{
int numberOfObjectsToSpawn = 10;
int spawnindex;
int objectindex
for(int i = 0; i < numberOfObjectsToSpawn; i++){
spawnindex = Random.Range (0, SpawnPoints.Length);
objectindex = Random.Range (0, Objetos.Length);
Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation);
}
}
希望我答对了你的问题。
我制作了一个函数来为我正在开发的游戏执行此操作。
public List<GameObject> spawnPositions;
public List<GameObject> spawnObjects;
void Start()
{
SpawnObjects();
}
void SpawnObjects()
{
foreach(GameObject spawnPosition in spawnPositions)
{
int selection = Random.Range(0, spawnObjects.Count);
Instantiate(spawnObjects[selection], spawnPosition.transform.position, spawnPosition.transform.rotation);
}
}
它的工作方式是将您的不同位置放在一个列表中,并将您想要生成的所有不同对象预制件放在一个单独的列表中,然后循环在每个不同位置生成一个随机对象。
记得放:
using System.Collections.Generic;
最上面的class为了使用Lists。您也可以为此使用数组,但我个人更喜欢列表。
并且每个对象只调用一次 Start() 函数,因此每次加载场景时这段代码只会 运行 一次。
我只想在场景开始时在几个随机位置生成几个随机对象。我该怎么做?这是我的代码,但只出现了一个对象。
using UnityEngine;
using System.Collections;
public class SpawnItems : MonoBehaviour
{
public Transform[] SpawnPoints;
public GameObject[] Objetos;
void Start ()
{
int spawnindex = Random.Range (0, SpawnPoints.Length);
int objectindex = Random.Range (0, Objetos.Length);
Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation);
}
}
我相信这是因为您在 Start()
函数中调用了 spawnindex
。
这意味着您的 spawnindex
将始终与 Start()
函数相同的数字,或多或少只会在您点击播放模式时发生一次。
这也意味着 objectIndex
具有相同的编号,所以它总是会生成相同的对象。
这意味着您所有生成的对象都使用相同的编号生成。如果您查看层次结构,您的 GameObjects
可能都在相同的位置和相同的对象中。
您需要找到一种方法来为每个 GameObject
生成不同的数字。 :-)
编辑:
此代码来自 Unity 网站的其中一个教程。它以设定的时间速率生成对象。您可以这样做,但将生成时间率设置为非常小的数字,这样您所有的 GameObject
就会看起来是同时生成的。
void Start ()
{
// Call the Spawn function after a delay of the spawnTime and then continue to call after the same amount of time.
InvokeRepeating ("Spawn", spawnTime, spawnTime);
}
void Spawn ()
{
// If the player has no health left...
if(playerHealth.currentHealth <= 0f)
{
// ... exit the function.
return;
}
// Find a random index between zero and one less than the number of spawn points.
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
// Create an instance of the enemy prefab at the randomly selected spawn point's position and rotation.
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
你可以只用循环
Start()
{
int numberOfObjectsToSpawn = 10;
int spawnindex;
int objectindex
for(int i = 0; i < numberOfObjectsToSpawn; i++){
spawnindex = Random.Range (0, SpawnPoints.Length);
objectindex = Random.Range (0, Objetos.Length);
Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation);
}
}
希望我答对了你的问题。
我制作了一个函数来为我正在开发的游戏执行此操作。
public List<GameObject> spawnPositions;
public List<GameObject> spawnObjects;
void Start()
{
SpawnObjects();
}
void SpawnObjects()
{
foreach(GameObject spawnPosition in spawnPositions)
{
int selection = Random.Range(0, spawnObjects.Count);
Instantiate(spawnObjects[selection], spawnPosition.transform.position, spawnPosition.transform.rotation);
}
}
它的工作方式是将您的不同位置放在一个列表中,并将您想要生成的所有不同对象预制件放在一个单独的列表中,然后循环在每个不同位置生成一个随机对象。
记得放:
using System.Collections.Generic;
最上面的class为了使用Lists。您也可以为此使用数组,但我个人更喜欢列表。
并且每个对象只调用一次 Start() 函数,因此每次加载场景时这段代码只会 运行 一次。