调用以随机方法作为参数的随机方法



所以,我正在为我的Unity游戏使用SpawnController。我想在随机位置生成一个随机的敌人类型。

我目前有两种随机化生成位置的方法:

从屏幕顶部:

void SpawnTop(IEnumerator spawnMethod)
{
//There's 4 positions on plane X where the enemy can spawn
randomXSpawnSection[0] = Random.Range(-13f, -6.5f);
randomXSpawnSection[1] = Random.Range(-6.5f, 0f);
randomXSpawnSection[2] = Random.Range(0f, 6.5f);
randomXSpawnSection[3] = Random.Range(6.5f, 13.1f);
StartCoroutine(spawnMethod);
}

从屏幕侧面:

void SpawnSide(IEnumerator spawnMethod)
{
//There's 4 positions on plane Z where the enemy can spawn
randomZSpawnSection[0] = Random.Range(-7f, 1.5f);
randomZSpawnSection[1] = Random.Range(1.5f, 10f);
randomZSpawnSection[2] = Random.Range(10f, 18.5f);
randomZSpawnSection[3] = Random.Range(18.5f, 27.1f);
StartCoroutine(spawnMethod);
}

这两种方法都使用另一种方法作为参数,该方法实例化某种类型的敌人,如下所示:

IEnumerator SpawnEnemyGunner(float randXSpawn, float randTimeSpawn)
{
yield return new WaitForSeconds(randTimeSpawn);
randZSpawn = Random.Range(24, 30);
Instantiate(enemyGunner, new Vector3(randXSpawn, 1.5f, randZSpawn), enemyGunner.transform.rotation);
spawning = false;
}

我在游戏中有几个敌人,因此有几种方法。

调用嵌套方法而不随机化它们的示例如下:

SpawnTop(SpawnEnemyGunner(Random.Range(0, randomXSpawnSection.Length), Random.Range(3, 6)));

我想随机化方法和他的方法参数。

特定的通用方法可能如下所示:

IEnumerator Foo1(float someParam)
{ 
yield return new WaitForSeconds(1);
Debug.Log($"Foo1: {someParam}");
}
IEnumerator Foo2(float someParam2)
{
yield return new WaitForSeconds(1);
Debug.Log($"Foo2: {someParam}");
}
void CallRandomFoo()
{
Func<float, IEnumerator>[] foos = { Foo1, Foo2 };
var randomParam = Random.value;
StartCoroutine(foos[Random.Range(0, foos.Length)](randomParam));
}

应该像

var x = randomXSpawnSection[Random.Range(0, randomXSpawnSection.Length)];
var y = randomZSpawnSection[Random.Range(0, randomZSpawnSection.Length)];
var enemy = Prefabs[Random.Range(0, Prefabs.Length)];
Instantiate(enemy, new Vector3(x, 1.5f, y), enemyGunner.transform.rotation);

最新更新