【问题标题】:Merging two lists of different objects into one. C# Unity2D将两个不同对象的列表合并为一个。 C# Unity2D
【发布时间】:2017-06-11 00:08:10
【问题描述】:

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

提前致谢:)

【问题讨论】:

  • 将其存储在 List 集合中

标签: c# list unity3d


【解决方案1】:

你可以这样做:

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
        }
    }
}

【讨论】:

  • 很高兴它有帮助,如果您可以将其标记为正确答案:)
【解决方案2】:

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

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

然后列表可能是List&lt;AliveEntity&gt;

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 2018-04-21
    • 1970-01-01
    • 2021-10-29
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多