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();
我正在尝试为我的 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();