C# Can';t使我的For循环或Foreach循环超过列表中的第一项
我是这里的初学者,试图寻找解决方案,但运气不佳。我试图通过标记和优先级目标标记找到最近的对象。由于某种原因,循环不会经过列表上的第一项。以下是我所拥有的:C# Can';t使我的For循环或Foreach循环超过列表中的第一项,c#,for-loop,unity3d,foreach,C#,For Loop,Unity3d,Foreach,我是这里的初学者,试图寻找解决方案,但运气不佳。我试图通过标记和优先级目标标记找到最近的对象。由于某种原因,循环不会经过列表上的第一项。以下是我所拥有的: public string[] PriorityTargets; public float Range; public GameObject projectileTarget; void LateUpdate() { float distanceToTarget; Debug.Log(PriorityTargets.Len
public string[] PriorityTargets;
public float Range;
public GameObject projectileTarget;
void LateUpdate()
{
float distanceToTarget;
Debug.Log(PriorityTargets.Length);
for (int i = 0; i <= PriorityTargets.Length; i++)
{
Debug.Log(PriorityTargets[i]);
Debug.Log(i);
GameObject Target = FindClosestTarget(PriorityTargets[i]);
if (Target)
{
distanceToTarget = Vector3.Distance(transform.position, Target.transform.position);
if (distanceToTarget <= Range)
{
projectileTarget = Target;
Debug.Log("About to Break");
break;
}
}
}
}
公共字符串[]优先级目标;
公众浮动范围;
公共游戏对象投射目标;
void LateUpdate()
{
浮动距离目标;
Log(PriorityTargets.Length);
对于(int i=0;i感谢您耐心地对待我,并敦促我找到解决方案
在尝试在一个空项目中复制之后,我发现了问题
在引用标记时,请确保在PriorityTargets[]中使用的标记实际上是在Unity中定义的
意思是,如果你
PriorityTarget[0]是一个随机名称,如“dfsdsfsd”,而该名称不是项目中现有的标记,脚本将无法工作
干杯您的FindClosestTarget
代码中可能有错误。在您的问题中也包含该函数作为编辑。我不知道这是否是实际问题,但应该是if(Target!=null)
@Scott刚刚添加了它,谢谢。@pero我相信最好使用if(Target)在Unity中,如果您确实没有看到第2/3个数组成员上的迭代,则可能会出现未捕获的异常。否则,我希望会出现中断消息。您是否尝试使用IDE调试它?
GameObject FindClosestTarget(string TargetTag)
{
GameObject[] gos = GameObject.FindGameObjectsWithTag(TargetTag);
GameObject closest = null;
float distance = Mathf.Infinity;
Vector3 position = transform.position;
foreach (GameObject go in gos)
{
Vector3 diff = go.transform.position - position;
float curDistance = diff.sqrMagnitude;
if (curDistance < distance)
{
closest = go;
distance = curDistance;
}
}
return closest;
}