unity排序列表根据2个不同的速度值类

Unity sorting list based on speed value of 2 different classes

我正在尝试为我的 2d rpg 游戏制作我的回合系统,根据他们的速度值排序谁先走。

我有 class 其中包含 我的 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();

按预期工作 但是现在我需要从不同的 class 收集值,这不是英雄经理,它最终会出现错误。

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

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

但是 order by 不接受 operators 所以我有点迷茫,因为我可以做些什么来让它按预期工作. 我尝试更改不同的元素,但它一直给我 缺少引用错误 ,这意味着我使用 orderby 的方式不正确。 (虽然不确定)

我无法更改结构,因为敌人管理器处理 AI,而英雄管理器处理玩家输入和操作。

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

What is the problem?

问题是您试图将对象转换为与实际不同的类型。

How to solve it?

简单!你需要制作一个界面来保存角色之间的共同点。

示例:

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();