Не могу получить мой За l oop или Foreach l oop мимо первого элемента в списке - PullRequest
2 голосов
/ 08 марта 2020

Я здесь новичок и безуспешно пытался искать решения. Я пытаюсь найти ближайший объект по тегу и с приоритетными целевыми тегами. По какой-то причине l oop не будет go после первого элемента в списке. Вот что у меня есть:

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;
            }
        }
    }
}

Отладчик показывает:

  • array.length 3
  • i 0
  • только строка первого элемента

В сцене нет объектов с тегом PriorityTargets [0], поэтому он должен продолжать работать и прерываться на PriorityTargets [1].

Кроме того, консоль никогда не показывает «О Break ".

вот код FindClosestTarget:

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;

}

После отладки в VisualStudio я получаю следующие исключения:

UnityEngine.UnassignedReferenceException : Переменная projectileTarget для gadgetProjectile не была назначена. Вероятно, вам нужно назначить переменную projectileTarget скрипта gadgetProjectile в инспекторе.

UnityEngine.UnassignedReferenceException: переменная projectileTarget для gadgetProjectile не была назначена. Вам, вероятно, нужно назначить переменную projectileTarget скрипта gadgetProjectile в инспекторе.

Существуют и другие исключения, но я не уверен, что они актуальны. Скрипт работает нормально, если есть цель с первым тегом.

1 Ответ

0 голосов
/ 08 марта 2020

Спасибо, что проявили терпение ко мне и подтолкнули меня к поиску решения.

после попытки репликации в пустой проект я обнаружил проблему.

При обращении к тегам убедитесь, что теги, которые вы используете в PriorityTargets [], действительно определены в Unity.

То есть, если вы установите PriorityTarget [0] на произвольное имя, например "dfsdsfsd", и это имя не является существующим тегом в вашем проекте, скрипт не будет работать.

ура

...