Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使我的For循环或Foreach循环超过列表中的第一项_C#_For Loop_Unity3d_Foreach - Fatal编程技术网

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;

}