Unity排序列表基于2个不同类的速度值

时间:2018-01-01 13:42:56

标签: c# list sorting unity3d sql-order-by

我正试图让我的2d rpg游戏排序系统根据他们的速度值排在第一位。

我有,其中包含我的AI 的速度和p 图层控制的英雄的速度。 我将英雄和敌人添加到同一个列表中

public List<GameObject> CharactersToManage = new List<GameObject>();

然后无论谁在我名单的第0位都是第一个

CharactersToManage[0].transform.Find("Selector").gameObject.SetActive(true);

这使它随机,因为它将随机添加到列表然后以随机顺序

在我扩展此代码之前,我尝试使用 orderbyDescending

 CharactersToManage = CharactersToManage.OrderByDescending(x => x.GetComponent<HeroManager>().NewSpeed).ToList();

按预期工作 但是现在我需要收集来自不是英雄管理者的不同类的值,最终会出错。

我尝试通过双重测试来修复它

CharactersToManage = CharactersToManage.OrderByDescending(x => x.GetComponent<HeroManager>().NewSpeed && x => x.GetComponent<EnemyManager>().NewSpeed).ToList();

但是排序不会接受运算符,所以我有点迷失,因为我可以做的就是让它按预期工作。 我尝试更改不同的元素,但它只是让我缺少引用错误,这意味着我以错误的方式使用 orderby 。 (虽然不确定)

我不能改变结构,因为敌方经理处理AI而英雄经理处理玩家输入和行动。

关于不同工作的任何建议或 一种以不同方式对其进行排序的方法? 我对c#中的排序工作非常不熟悉。

1 个答案:

答案 0 :(得分:0)

  

有什么问题?

问题在于您正在尝试将对象转换为与实际不同的类型。

  

如何解决?

简单!你需要建立一个界面来保持角色之间的共同点。

示例:

public interface character
{
    int NewSpeed { get; set; }
    //maybe add some other properties like
    //int Health { get; set; }
}

对于英雄:

public class HeroManager : MonoBehaviour, character
{
    int NewSpeed { get; set; }
    public HeroManager()
    {
        NewSpeed = 0; //For example
    }
}

然后你可以这样做:

 CharactersToManage = CharactersToManage.OrderByDescending(x => ((character)x.GetComponent<GameObject>().NewSpeed)).ToList();