анимация.Ошибка setBool («IsWalking», хождение) в unity animator

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

В разделе обучения Unity — survival shooter я получаю сообщение об ошибке, показывающее следующую ошибку

Введите «UnityEngine.Анимация» не содержит определения для «setBool» и метода расширения «setBool» типа «UnityEngine.Не удалось найти анимацию». Вам не хватает ссылки на сборку?

Я проверил имена файлов и компонентов.

Код

 using UnityEngine;

public class PlayerMovement: MonoBehaviour
{
    public float speed = 6f;

    Vector3 movement;
    Animation anim;
    Rigidbody playerRigidbody;
    int floorMask;
    float camRayLength = 100f;

    void Awake()
    {
        floorMask = LayerMask.GetMask("Floor");
        anim = GetComponent<Animation>();
        playerRigidbody = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Verticle");

        Move(h, v);
        Turning();
        Animating(h, v);
    }

    void Move(float h, float v)
    {
        movement.Set(h, 0f, v);
        movement = movement.normalized * speed * Time.deltaTime;
        playerRigidbody.MovePosition(transform.position   movement);
    }

    void Turning()
    {
        Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit floorHit;

        if(Physics.Raycast (camRay ,out floorHit, camRayLength, floorMask))
        {
            Vector3 playerToMouse = floorHit.point - transform.position;
            playerToMouse.y = 0f;

            Quaternion newRotation = Quaternion.LookRotation(playerToMouse);
            playerRigidbody.MoveRotation (newRotation);
        
        }
    }

    void Animating(float h, float v)
    {
        bool walking = h!= 0f || v!= 0f;
        anim.SetBool("IsWalking", walking);
    }
}
  

Комментарии:

1. Прочитайте сообщение об ошибке. Сообщение об ошибке заставляет меня спросить вас: Почему вы думаете, что у Animation объекта (ваш аниматор является объектом типа Animation) есть SetBool метод? Проверьте документацию на Animation тип: docs.unity3d.com/ScriptReference/Animation.html . Вы видите, что для этого используется метод setBool?

Ответ №1:

Контроллер анимации персонажа имеет тип Animator , а не Animation . Используйте SetBool на Animator .

 Animator anim;

void Awake()
{
    // ...
    anim = GetComponent<Animator>();
    // ...
}