Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В юнити ошибка

Вячеслав Метцлер Ученик (192), на голосовании 9 месяцев назад
Index was outside the bounds of the array.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;

public class enemy : MonoBehaviour
{
private NavMeshAgent AI_Agent;
private GameObject Player;


public Transform[] WayPoints;
public int Current_Patch;

public enum AI_State { Patrol, Stay, Chase};
public AI_State AI_Enemy;

void Start()
{
AI_Agent = gameObject.GetComponent<NavMeshAgent>();
Player = GameObject.FindGameObjectWithTag("Player");
}

void FixedUpdate()
{
if (AI_Enemy == AI_State.Patrol)
{
AI_Agent.Resume();
gameObject.GetComponent<Animator>().SetBool("Move", true);
AI_Agent.SetDestination(WayPoints[Current_Patch].transform.position);
float Patch_Dist = Vector3.Distance(WayPoints[Current_Patch].transform.position, gameObject.transform.position);
if (Patch_Dist < 2)
{
Current_Patch++;
Current_Patch = Current_Patch % WayPoints.Length;
}
}
if (AI_Enemy == AI_State.Stay)
{
gameObject.GetComponent<Animator>().SetBool("Move", false);
AI_Agent.Stop();
}
if (AI_Enemy == AI_State.Chase)
{
gameObject.GetComponent<Animator>().SetBool("Move", true);
AI_Agent.SetDestination(Player.transform.position);
}


float Dist_Player = Vector3.Distance(Player.transform.position, gameObject.transform.position);
if (Dist_Player < 2)
{
SceneManager.LoadScene(0);
}
}
}
Голосование за лучший ответ
Ярослав Родыгин Гуру (2574) 10 месяцев назад
Пользоваться юнити - ошибка.
Вячеслав МетцлерУченик (192) 10 месяцев назад
Разбераешься?
Wqwqw Wqefhgiff Мастер (1247) 10 месяцев назад
Ошибка "Index was outside the bounds of the array" обычно возникает, когда вы пытаетесь получить доступ к элементу массива по индексу, который выходит за его границы. В данном случае, это, вероятно, происходит в строке, где вы обращаетесь к массиву WayPoints:

AI_Agent.SetDestination(WayPoints[Current_Patch].transform.position);
Возможная причина ошибки - Current_Patch получает значение, которое превышает длину массива WayPoints. Это может произойти, если количество элементов в массиве WayPoints меньше значения Current_Patch в момент обращения к массиву.

Чтобы исправить эту проблему, вы можете добавить проверку на то, что Current_Patch не превышает длину массива WayPoints:
 if (Patch_Dist < 2)  
{
Current_Patch++;
if (Current_Patch >= WayPoints.Length)
{
Current_Patch = 0;
}
}
В этом случае, если Current_Patch достигает длины массива WayPoints, он сбрасывается до нуля, предотвращая обращение к несуществующему индексу массива.

Также убедитесь, что вы правильно инициализировали массив WayPoints и он содержит достаточное количество элементов.
Вячеслав МетцлерУченик (192) 10 месяцев назад
Не помогло говорит в 55 ошибка
float Dist_Player = Vector3.Distance(Player.transform.position, gameObject.transform.position);
Похожие вопросы