我的代码现在:
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
列表FoodList
是一个GameObject
列表,在附加到每个多维数据集的脚本中,该列表包含多维数据集中的每个食物。
我想要达到的目标:
玩家需要决定哪个立方体充满他想去的食物
但他需要考虑到立方体和食物量的距离
因此,玩家需要以最接近的农场和农场的方式订购列表。食物最多的农场是名单的第一个元素。
现在列表确实按距离正确排序,因此最接近的立方体是第一个元素,但它会跳过.ThenBy
行(或者我做错了)。
答案 0 :(得分:0)
正如@Johan在评论中提到的,ThenBy
仅在OrderBy
子句中的两个对象之间存在联系时才有效。在您的情况下,您要考虑两个参数, 距离 和 食品数量 。你需要在这里做一些数学。根据每个参数的优先级,您可以使用以下内容:
OrderBy(x => (distanceForX * priorityOfDistance) + (foodCountForX * priorityOfFoodCount))
而不是
transform.parent.gameObject.GetComponent<FoodSpawn>();
你可以使用
GetComponentInParent<FoodSpawn>();
答案 1 :(得分:0)
所以我决定先把距离农场列表排序
我还给农场一个布尔,检查农场是否包含食物
然后玩家决定去最近的HasFood
布尔为真的农场。
Farms = GameObject.FindGameObjectsWithTag("Farm").OrderBy(x => (Vector2.Distance(this.transform.position, x.transform.position)))
.ToArray();
ClosestFarm = Farms.First(x => x.GetComponentInParent<FoodSpawn>().HasFood == true);