1

Помогите, пожалуйста, со скриптом для врага. Ошибка в 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;
}
}

Vikot
  • 25
  • Вряд ли ошибка именно на той строке, которую вы указали (вы в вопросе указали на if (other.gameObject = "Enemy").). Потому что при входе объекта в триггер - Юнити 100% гарантированно на вход подаёт именно тот самый объект – Алексей Шиманский Apr 25 '21 at 07:14
  • а вот тут agent.enabled = true объект agent не определён. Он null. Отсюда и ошибка. Нужно в него добавить инициализацию....т.е. в поле NavMeshAgent agent; надо чтобы что-то было – Алексей Шиманский Apr 25 '21 at 07:15
  • Спасибо! Постараюсь исправить! – Vikot Apr 25 '21 at 07:16
  • А в чём именно загвоздка? что вы делаете и что не получается? – Алексей Шиманский Apr 25 '21 at 07:56

1 Answers1

5

Проблема
Как вы и указали, в строке agent.enabled = true; В данном случае вы предполагаете, что в переменной agent находится какое-то значение типа NavMeshAgent, однако на самом деле она оказывается пустой, а точнее равной null

Решение
Вам следует инициализировать переменную agent изначальным значением. Например, если компонент NavMeshAgent висит на том же объекте, что и скрипт Enemy (скорее всего, так и есть), то переменную agent вы можете инициализировать в методе Start вместе с anim через GetComponent:

void Start()
{
    anim = GetComponent<Animator>();
    agent = GetComponent<NavMeshAgent>();
}

!> P.S. Из комментариев: Жаль что я глупый, проблему все еще не могу решить( - подобные комментарии на ruSO не приветствуются. Вам следует пытаться разобраться в проблеме, а не прятаться за щитом неумения, чтобы проблему решили за вас.