如何随机生成对象?
How to spawn objects at random times?
我正在尝试创建一个随机生成对象的脚本,不幸的是我的脚本运行得不是很好。你能帮我随机化游戏对象生成之间的时间吗?谢谢!
#pragma strict
var SpawnObject : GameObject;
var SpawnPoint : GameObject;
var SpawnCounter : int = 0;
var SpawnCounterMinMax : int =0;
var SpawnCounterMaxMax : int =0;
function Update ()
{
var float_min_bother_I_hate_you_js : float = this.SpawnCounterMinMax;
var float_max_bother_I_hate_you_js : float = this.SpawnCounterMaxMax;
var SpawnCounterMax = Random.Range(float_min_bother_I_hate_you_js, float_max_bother_I_hate_you_js);
this.SpawnCounter++;
if (this.SpawnCounter >= SpawnCounterMax )
{
Instantiate(this.SpawnObject, this.SpawnPoint.transform.position, this.SpawnPoint.transform.rotation );
this.SpawnCounter = 0;
SpawnCounterMax = Random.Range(float_min_bother_I_hate_you_js, float_max_bother_I_hate_you_js);
}
}
如果您希望能够指定一个 min/max 随机时间范围,这样的事情应该可行:
#pragma strict
var SpawnObject : GameObject;
var SpawnPoint : GameObject;
var NextSpawnTime : float = 0;
var MinSpawnTime : float =0;
var MaxSpawnTime : float =0;
function SetTimer()
{
this.NextSpawnTime = Random.Range(this.MinSpawnTime, this.MaxSpawnTime);
}
function Start ()
{
//initialise the spawn counter at startup
this.SetTimer();
}
function Update ()
{
this.NextSpawnTime -= Time.deltaTime;
if(this.NextSpawnTime <= 0)
{
Instantiate(this.SpawnObject, this.SpawnPoint.transform.position, this.SpawnPoint.transform.rotation );
this.SetTimer();
}
}
使用 Time.deltaTime 递减一个以秒为单位存储一些值的计时器,确保无论帧速率如何,您的生成都发生在给定范围内。
进一步阐明为什么您可能会在代码中看到不需要的行为。您在每次更新时重新随机化 SpawnCounter 的最大值,而不是在每次生成对象时设置一次。
你可以使用协程来实现这个,像这样就可以了。
int numberOfObjectsToCreate = 5; // number of objects you want to spawn.
float minTimeDiff = 1.0f; // minimum time difference between 2 objects spawned.
float maxTimeDiff = 5.0f; // Maximam time difference between 2 spawns.
public GameObject ObjectToSpawn; // object that is to be spawned;
void Start() {
StartCoroutine(CreateObjectsAtRandom());
}
IEnumerator CreateObjectsAtRandom() {
for(int i = 0; i < numberOfObjectsToCreate; i++) {
GameObject obj = Instantiate(ObjectToSpawn, Vector3.zero, Quarternion.identity) as GameObject;
yield return new WaitForSeconds(Random.Range(minTimeDiff, maxTimeDiff)); // wait for a random time before spawning the next object.
}
}
我正在尝试创建一个随机生成对象的脚本,不幸的是我的脚本运行得不是很好。你能帮我随机化游戏对象生成之间的时间吗?谢谢!
#pragma strict
var SpawnObject : GameObject;
var SpawnPoint : GameObject;
var SpawnCounter : int = 0;
var SpawnCounterMinMax : int =0;
var SpawnCounterMaxMax : int =0;
function Update ()
{
var float_min_bother_I_hate_you_js : float = this.SpawnCounterMinMax;
var float_max_bother_I_hate_you_js : float = this.SpawnCounterMaxMax;
var SpawnCounterMax = Random.Range(float_min_bother_I_hate_you_js, float_max_bother_I_hate_you_js);
this.SpawnCounter++;
if (this.SpawnCounter >= SpawnCounterMax )
{
Instantiate(this.SpawnObject, this.SpawnPoint.transform.position, this.SpawnPoint.transform.rotation );
this.SpawnCounter = 0;
SpawnCounterMax = Random.Range(float_min_bother_I_hate_you_js, float_max_bother_I_hate_you_js);
}
}
如果您希望能够指定一个 min/max 随机时间范围,这样的事情应该可行:
#pragma strict
var SpawnObject : GameObject;
var SpawnPoint : GameObject;
var NextSpawnTime : float = 0;
var MinSpawnTime : float =0;
var MaxSpawnTime : float =0;
function SetTimer()
{
this.NextSpawnTime = Random.Range(this.MinSpawnTime, this.MaxSpawnTime);
}
function Start ()
{
//initialise the spawn counter at startup
this.SetTimer();
}
function Update ()
{
this.NextSpawnTime -= Time.deltaTime;
if(this.NextSpawnTime <= 0)
{
Instantiate(this.SpawnObject, this.SpawnPoint.transform.position, this.SpawnPoint.transform.rotation );
this.SetTimer();
}
}
使用 Time.deltaTime 递减一个以秒为单位存储一些值的计时器,确保无论帧速率如何,您的生成都发生在给定范围内。
进一步阐明为什么您可能会在代码中看到不需要的行为。您在每次更新时重新随机化 SpawnCounter 的最大值,而不是在每次生成对象时设置一次。
你可以使用协程来实现这个,像这样就可以了。
int numberOfObjectsToCreate = 5; // number of objects you want to spawn.
float minTimeDiff = 1.0f; // minimum time difference between 2 objects spawned.
float maxTimeDiff = 5.0f; // Maximam time difference between 2 spawns.
public GameObject ObjectToSpawn; // object that is to be spawned;
void Start() {
StartCoroutine(CreateObjectsAtRandom());
}
IEnumerator CreateObjectsAtRandom() {
for(int i = 0; i < numberOfObjectsToCreate; i++) {
GameObject obj = Instantiate(ObjectToSpawn, Vector3.zero, Quarternion.identity) as GameObject;
yield return new WaitForSeconds(Random.Range(minTimeDiff, maxTimeDiff)); // wait for a random time before spawning the next object.
}
}