我正试图让我的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#中的排序工作非常不熟悉。
答案 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();