我想只在场景开始时在几个随机位置产生几个随机对象。我该怎么做?这是我的代码,但只出现一个对象。
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);
}
}
答案 0 :(得分:1)
您只需使用循环
即可 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);
}
}
希望我能回答你的问题。
答案 1 :(得分:0)
我相信这是因为您在spawnindex
函数中调用了Start()
。
这意味着您的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);
}
答案 2 :(得分:0)
我为我正在制作的游戏做了一个功能来完成这个。
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;
在课程顶部以便使用列表。您也可以使用Arrays,但我个人更喜欢列表。
每个对象只调用一次Start()函数,因此每次加载场景时此代码只运行一次。