如何从随机位置一次生成一个对象



我正在制作一款android游戏,我需要从顶部生成项目。我希望产卵的地方在我的场景顶部是水平随机的。我使用了这些代码,它不会给我任何随机的东西,而且多个游戏对象同时从同一个生成者中生成。我想一次生成一个游戏对象,而oher应该只在第一个从游戏场景中销毁后生成。Plz帮助我对unity以及c#和Stackoverflow都是新手。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject[] spawnableItems;
// Update is called once per frame
void Update()
{
bool isTimeToSpawn (GameObject itemGameObject)
{
spawnableSprites item = itemGameObject.GetComponent<spawnableSprites>();
float spawnDelay = item.seenEverySeconds;
float spawnsPerSecond = 1 / spawnDelay;
if(Time.deltaTime > spawnDelay)
{
Debug.LogWarning("SpawnRate Capped By FrameRate");
}
float threshold = spawnsPerSecond * Time.deltaTime;
if(Random.value < threshold)
{
return true;
}
else
{
return false;
}
}

foreach (GameObject item in spawnableItems)
{
if(isTimeToSpawn(item))
{
Spawn(item);
}
}
}
void Spawn (GameObject myGameObject)
{
GameObject myItem = Instantiate(myGameObject) as GameObject;
myItem.transform.parent = transform;
myItem.transform.position = transform.position;
}
}

您想在顶部随机生成一个对象,然后只在第一个对象被破坏后再生成另一个对象吗?正确的看起来您不需要生成/删除多个对象。你知道,在游戏开发中,我们尽量提高效率,有时你只需要把一个旧对象当作一个新对象来使用,然后欺骗玩家认为它是新的。所以我的建议是,与其删除你的对象,不如把它的位置重新设置在顶部,类似这样:

float spawnXmin = 0;
float spawnXmax = 100;
float spawnY = 0;
float spawnZ = 0; // * numbers are just for demonstration
myItem.transform.position = new Vector3(Random.Range(spawnXmin, spawnXmax), spawnY, spawnZ);

此外,不要在Update((中使用这些代码,您在Update中放入的任何内容都会花费大量成本,因为它将在每一帧中运行,所以尽可能避免在Update(((中放入内容。

void Start()
{
// will wait 2 seconds then call the function Spawn() every 0.3 seconds
InvokeRepeating("Spawn", 2.0f, 0.3f);
}
void Spawn()
{
GameObject myItem = Instantiate(myGameObject) as GameObject;
myItem.transform.parent = transform;
myItem.transform.position = new Vector2(Random.Range(0, width) , height);
}

相关内容

  • 没有找到相关文章

最新更新