![](/img/trans.png)
[英]How can I search a list of objects that contains a list of objects for the first entry that contains an element matching my search criteria?
[英]How can I specify the contents of a multidimensional array and select objects matching the criteria from a list?
我們正在創建一款塔防類型的游戲。 所以我們想建立一個 Wave 系統,並且能夠根據他們各自的類型來設置每個敵人將 spring 起來的 Wave 次數。
EnemyFactor
生成的敵人類型EnemyAmount
生成的敵人數量 public class WaveListFactor : MonoBehaviour
{
public List<EnemyEnum> enemyFactor = new List<EnemyEnum>();
public List<int> enemyAmount = new List<int>();
}
public class WaveList : MonoBehaviour
{
public List<GameObject> enemyList = new List<GameObject>();
public List<WaveListFactor> waveEnemies = new List<WaveListFactor>();
}
public class WaveManager : MonoBehaviour
{
public void EnemySpawn()
{
int enemyFactor = waveList.waveEnemies.waveEnemyFactor;
GameObject enemy = waveList.enemyList[enemyFactor];
waveSpawner.Spawn(enemy);
}
}
int enemyFactor = waveList.waveEnemies.waveEnemyFactor;
現在我無法將EnemyEnum
中的EnemyFactor
更改為int
並且無法指定enemyList
的內容。
我建議你寧願使用SerializedDictionary<EnemyEnum, GameObject[]>
並簡單地預先配置哪個枚舉值導致哪個GameObject
預制選項(這樣你仍然可以隨機化一點)
public SerializedDictionary<EnemyEnum, GameObject[]> enemyList = new SerializedDictionary<EnemyEnum, GameObject[]>();
然后 select 一個在做
var options = enemyList[enemyFactor];
然后是 select 一個隨機的,例如
var selectedPrefab = options[Random.Range(0, options.Length)];
否則,您將需要一些專門用於敵人的組件,以提供有關它響應哪個EnemyEnum
的信息,例如
public class Enemy : MonoBehaviour
{
public EnymeEnum Type;
}
而有
public List<Enemy> enemyList = new List<Enemy>();
然后您可以使用Linq
過濾可用選項
using System.Linq;
...
var options = enemyList.Where(enemy => enemy.Type == enemyFactor).ToArray();
並從現有的比賽中隨機挑選一個,比如
var selectedPrefab = options[Random.Range(0, options.Length)];
如果結果為null
,則意味着沒有匹配的預制件。
缺點:每個預制件只能屬於一個單一的枚舉類別。 其他兩種解決方案並非如此。
甚至更簡單:為什么要將信息存儲在單獨的 collections 中?
只是有一個
[Seriaizable]
public class EnemyInfo
{
public GameObject Prefab;
public int Amount;
}
[Seriaizable]
public class WaveInfo
{
public EnemyInfo[] EnemyInfos;
}
這樣您就不必關心任何枚舉,而只需定義將產生多少個預制件的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.