Unity: NullReferenceException: Object reference not set to an instance of an object. Ошибка с анимацией. Помогите

339
15 августа 2017, 12:22

Хочу сделать анимацию для игры. Возникла ошибка: NullReferenceException: Object reference not set to an instance of an object Upravlenie.set_State (CharState value) (at Assets/Upravlenie.cs:20). Вот код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Upravlenie : MonoBehaviour {
    public float horizontalSpeed;
    float speedX;
    public float verticalImpulse;
    Rigidbody2D rb;
    bool isGrounded;
    bool Running = false;
    private Animator animator;
    private CharState State
    {
        get { return (CharState)animator.GetInteger("State"); }
        set { animator.SetInteger("State", (int)value); }
    }
    void Start () {
        rb = GetComponent<Rigidbody2D>();
    }
    private void Flip()
    {
        isFacingRight = !isFacingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
    public void LeftButtonDown()
    {
        speedX = -horizontalSpeed;
        if (isGrounded) State = CharState.Run;
    }
    public void RightButtonDown()
    {   speedX = horizontalSpeed;
        if (isGrounded) State = CharState.Run;
    }
    public void Stop()
    {
        speedX = 0;
    }
    public void OnClickJump()
    {
        if (isGrounded)
            rb.AddForce(new Vector2(0, verticalImpulse), ForceMode2D.Impulse);
        if (!isGrounded) State = CharState.Jump;
    }
    void FixedUpdate()
    {
        transform.Translate(speedX, 0, 0);
        if (isGrounded) State = CharState.Idle;
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground")
            isGrounded = true;
    }
    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground")
            isGrounded = false;
     }
}
public enum CharState
{
    Idle,
    Run,
    Jump
}

Скриншот из аниматора:

Сому анимацию ТОЧНО сделал правильно

Мне нужна помощь взаимодействия анимации с кодом. Прошу помочь. P.S. Управление сделал через кнопки Button и добавил компонент event triger

Answer 1

У тебя не хватает как раз той самой переменной State, на которую и будет реагировать анимация. Посмотри пример ниже.

Тут можно видеть 4 переменных (параметра): два float, bool и trigger.

Всё, что передается из скрипта — устанавливается во вкладке Parameters (ну и наоборот, может доставаться).

А вот Conditions (которое справа) уже реагирует на ту самую внутреннюю переменную меканима.

Также ты забыл сделать при старте animator = GetComponent<Animator>();, чтобы инициализировать переменную. И проблема скорее всего даже именно в этом)

READ ALSO
Чтение запись в файл с блокировкой

Чтение запись в файл с блокировкой

Есть файл с которым работает программаОна считывает и записывает в него данные

348
Почему данный код вписывает в файл числа только до 359?

Почему данный код вписывает в файл числа только до 359?

Почему данный код вписывает в файл числа только до 359?

185
Загрузка значений из файла xml

Загрузка значений из файла xml

Имею такой xml файл

246
Initialize() в Monogame

Initialize() в Monogame

Я начинал изучатьFramework MonoGame/XNA языка C#,уже понимаю устройство программы,но не могу понять зачем нужен метод Initialize()

215