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

NullReferenceException: Object reference not set to an instance of an object

Vrouz vruv Ученик (97), на голосовании 7 месяцев назад
как исправить ошибку NullReferenceException: Object reference not set to an instance of an object
Enemy.Update () (at Assets/Scripts/Slime.cs:37)
Вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Enemy : MonoBehaviour
{

public float speed = 0.5f;
public Transform Player;
private bool facingRight = true;
private Animator anim;
private Rigidbody2D rb;

// Use this for initialization
void Start()
{
rb = GetComponent<Rigidbody2D>();
}

// Update is called once per frame
void Update()
{
Vector3 displacement = Player.position - transform.position;
displacement = displacement.normalized;
if (Vector2.Distance(Player.position, transform.position) > 1.0f)
{
transform.position += (displacement * speed * Time.deltaTime);

}
if (Vector2.Distance(Player.position, transform.position) == 0)
{
anim.SetBool("isMoving", false);
}
else
{
anim.SetBool("isMoving", true);
}

}
public void Flip()
{
facingRight = !facingRight;
Vector2 Scaler = rb.transform.localScale;
Scaler *= -1;
transform.localScale = Scaler;
}

}
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (249370) 8 месяцев назад
Судя по вашему коду, проблемная строчка 37 вот эта:
 anim.SetBool("isMoving", true); 
Похоже, что поле anim не заполнено.
Поле приватное и несериализованное, то есть через редактор Unity его не задать.
В коде этого класса ему тоже ничего не присвоили, вот оно и null по умолчанию.
Vrouz vruvУченик (97) 8 месяцев назад
и как исправить эту ошибку?
Андрей Панарин Искусственный Интеллект (249370) Придумать такой способ, чтобы значение поля anim где-то задавалось. А то аниматор вам нужен, а в поле anim его нет. Вижу два варианта: а) сделать поле anim публичным (public), а не приватным (private), а потом в редакторе Unity задать ему значение; б) в методе Start() задать значение anim, поместив туда какой-нибудь известный вам компонент Animator. Возможно, взять его у того же объекта, у которого вы берете Rigidbody2D. Если он там есть, разумеется.
Vrouz vruvУченик (97) 8 месяцев назад
я вроде переменной anim задал функцию Animator для анимации
Андрей Панарин Искусственный Интеллект (249370) Вы объявили поле anim типа Animator, но в него еще нужно записать ссылку на тот аниматор, с которым вы хотите работать.
Похожие вопросы