我现在的代码:
public GameObject[] Farms;
Farms = GameObject.FindGameObjectsWithTag("Farm").OrderBy(x => Vector2.Distance(this.transform.position, x.transform.position))
.ThenBy(x => x.transform.parent.gameObject.GetComponent<FoodSpawn>().FoodList.Count)
.ToArray();我所拥有的:
所以我的场景有一个长方形地板。左边是一个方块,右边是一个方块,中间是一个AI (玩家)。
每个立方体都填满了7块食物(主要立方体的孩子)。多维数据集有一个标记Farm。
list FoodList是一个GameObject列表,在附加到每个立方体的脚本中,该列表包含立方体中的每一块食物。
我想要实现的目标:
玩家需要决定他想去哪个装满食物的立方体。
但他需要考虑到立方体的距离和食物的数量。
因此,玩家需要以这样的方式对列表进行排序,即最近的农场&拥有最多食物的农场是列表的第一个元素。
现在这个列表确实按照距离进行了正确的排序,所以最近的立方体是第一个元素,但它跳过了.ThenBy行(或者我做错了什么)。
发布于 2016-09-19 21:52:41
正如@Johan在评论中提到的,只有当OrderBy子句中的两个对象之间存在联系时,ThenBy才能工作。在您的例子中,由于您想要考虑这两个参数,distance和number of food 。你需要在这里做一点数学运算。根据每个参数的优先级,您可以使用以下内容:
OrderBy(x => (distanceForX * priorityOfDistance) + (foodCountForX * priorityOfFoodCount))而不是
transform.parent.gameObject.GetComponent<FoodSpawn>();您可以使用
GetComponentInParent<FoodSpawn>();发布于 2016-09-20 16:02:24
因此,我决定首先让它对距离上的农场列表进行排序。
我还给了farm一个bool,用来检查农场是否有食物。
然后玩家决定去最近的HasFood bool为true的农场。
Farms = GameObject.FindGameObjectsWithTag("Farm").OrderBy(x => (Vector2.Distance(this.transform.position, x.transform.position)))
.ToArray();
ClosestFarm = Farms.First(x => x.GetComponentInParent<FoodSpawn>().HasFood == true);https://stackoverflow.com/questions/39574387
复制相似问题