将两个不同对象列表合并为一个。 C#Unity2D

时间:2017-06-11 00:08:11

标签: c# list unity3d

首先,我想提供一些背景信息。我有两个不同的类(类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#和编码方面都是新手,所以如果问题太简单或没有意义,请原谅。

提前致谢:)

2 个答案:

答案 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)

您可以使用继承。拥有EnemyPlayer的基础。

public class AliveEntity
{ 
    public string Name {get;set;}
    public double HP {get;set;}
}
public class Player : AliveEntity
{ /*...*/ }
public class Enemy : AliveEntity
{ /*...*/ }

然后列表可能是List<AliveEntity>