首先,我想提供一些背景信息。我有两个不同的类(类Player和类Enemy),每个类包含不同的数据,但它们都保持值“int Initiative”。
public class Enemy : MonoBehaviour
{
public int initiative;
//More code
}
public class Player : MonoBehaviour
{
public int initiative;
//More code
}
在我的项目中,我有两个类的单位,它们存储在2个不同的对象列表中
private List<Player> players;
private List<Enemy> enemies;
void Awake()
{
players = new List<Player>();
enemies = new List<Enemy>();
}
代码中未显示,但每个单元都会根据其类别发送并存储在这些列表中。
现在我的问题:
有没有办法将两个列表合并到一个列表中,保留所有不同的对象? (我试图这样做,但没有走得太远)
如果由于它们包含不同类型的对象而无法组合两个列表,我是否可以创建一个仅存储int计划,对象类型以及上一个列表中位置的列表? (所以我可以在需要时参考这些名单(玩家和敌人)。请解释我如何实现这个目标(如果可能的话,还有一些代码)。
有了这个,我正在尝试创建某种系统,它将查看每个单元的主动性,并按顺序调用它们,以便从最高单元开始。
请注意我在C#和编码方面都是新手,所以如果问题太简单或没有意义,请原谅。
提前致谢:)
答案 0 :(得分:3)
您可以这样做:
public class MonoBehaviour
{
public int initiative;//Since you are using inheritance this can be set here
}
public class Enemy : MonoBehaviour
{
//More code
}
public class Player : MonoBehaviour
{
//More code
}
以下是将它们合并到一个列表中的代码:
List<MonoBehaviour> list = new List<MonoBehaviour>()
list.Add(new Enemy());
list.Add(new Player());
如果您想以某种方式处理它们,例如,您可以创建如下方法:
void ProcessList(List<MonoBehaviour> list)
{
foreach(var l in list)
{
if(l is Enemy)
{
var enemy = (Enemy) l;
//process the enemy
}
else
{
var player = (Player) l;
//process as a player
}
}
}
答案 1 :(得分:1)
您可以使用继承。拥有Enemy
和Player
的基础。
public class AliveEntity
{
public string Name {get;set;}
public double HP {get;set;}
}
public class Player : AliveEntity
{ /*...*/ }
public class Enemy : AliveEntity
{ /*...*/ }
然后列表可能是List<AliveEntity>
。