#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>();
// ...
}