NullReferenceException: Object reference not set to an instance of an object Enemy.Update ()(at Assets/Scripts/Enemy.cs:30) как решить ошибку в unity?
Помогите, пожалуйста, со скриптом для врага. Ошибка в 30 строке:
NullReferenceException: Object reference not set to an instance of an object Enemy.Update ()(at Assets/Scripts/Enemy.cs:30)
Скрипт Enemy:
using UnityEngine;
using UnityEngine.AI;
public class Enemy : MonoBehaviour
{
public GameObject player;
NavMeshAgent agent;
Animator anim;
public float dist;
public float Radius = 15;
public int health = 3;
void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
dist = Vector3.Distance(player.transform.position, player.transform.position);
if(dist > Radius)
{
anim.SetBool("Run Forward", false);
agent.enabled = false;
}
if(dist < Radius)
{
agent.enabled = true; // 30 строка
agent.SetDestination(player.transform.position);
anim.SetBool("RunForward", true);
}
if(health <= 0)
{
Destroy(gameObject);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
Debug.Log("pamagite");
}
}
public void TakeDamage(int damage)
{
health -= damage;
}
}
Ответы (1 шт):
Проблема
Как вы и указали, в строке agent.enabled = true;
В данном случае вы предполагаете, что в переменной agent находится какое-то значение типа NavMeshAgent, однако на самом деле она оказывается пустой, а точнее равной null
Решение
Вам следует инициализировать переменную agent изначальным значением. Например, если компонент NavMeshAgent висит на том же объекте, что и скрипт Enemy (скорее всего, так и есть), то переменную agent вы можете инициализировать в методе Start вместе с anim через GetComponent:
void Start()
{
anim = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
}
!> P.S. Из комментариев: Жаль что я глупый, проблему все еще не могу решить( - подобные комментарии на ruSO не приветствуются. Вам следует пытаться разобраться в проблеме, а не прятаться за щитом неумения, чтобы проблему решили за вас.