我计算了一个单元和一个建筑物之间的距离,把距离放在一个struct[]中,并将最小的距离排序为最大。人工智能每次都要去最近的建筑,这是它的工作原理。现在我的问题是,我想添加一个检查并删除硬编码到索引0的最后一行代码。我希望AI去下一个索引,每次当前的索引耗尽资源。我该怎么做呢?每次AI选择最接近的建筑物来获取资源时,结构都会填充排序的距离。
它会是for循环中的if语句吗?还是另一个带if语句的for循环?或者,如果建筑物资源耗尽,是否更改结构中的索引?
Destination2 = GameObject.FindGameObjectsWithTag("Storehouses"); // storehouse distance should be based off production
Vector3 position = transform.position;
for (int i = 0; i < Destination2.Length; i++) // put in 10 storehouses, find the closest distance to the colonist
{
Debug.Log("1");
buildingInformation[i].buildingID2 = Destination2[i]; // stores game objects 0,1
Vector3 direction = (Destination2[i].transform.position - position);
float distance = direction.sqrMagnitude;
buildingInformation[i].buildingDistance2 = distance;
Array.Sort<BuildingInformation>(buildingInformation, (x, y) => x.buildingDistance2.CompareTo(y.buildingDistance2));// smallest to largest
}
Supplier = buildingInformation[0].buildingID2;发布于 2020-11-05 02:35:25
关于我如何处理它的一些Linqy伪代码:
destination = storehouses
.OrderBy( storehouse.distance )
.FirstOrDefault( storehouse.contains(item) )尽管您可能最好只执行一次迭代:
SomeType destination
foreach storehouse in storehouses
if ( storehouse.contains(item) )
if ( destination is null || storehouse.distance < destination.distance )
destination = storehousehttps://stackoverflow.com/questions/64689887
复制相似问题