如何将Unity动画控制为?

摘要:实现玩家角色根据不同状态播放不同动画,主要涉及动画有静置动画和移动动画,判断条件为不移动时播放静置动画,移动时播放移动动画。 增加动画控制器 设置静置动画、移动动画切换 增加参数isWalking 静置切换为移动 移动切换为静置 编辑代码P
实现玩家角色根据不同状态播放不同动画,主要涉及动画有静置动画和移动动画,判断条件为不移动时播放静置动画,移动时播放移动动画。 增加动画控制器 设置静置动画、移动动画切换 增加参数isWalking 静置切换为移动 移动切换为静置 编辑代码PlayerMovement.cs 使用控制器改变isWalking参数值进而控制动画切换 using UnityEngine; /// <summary> /// 控制玩家角色的移动 /// </summary> public class PlayerMovement : MonoBehaviour { /// <summary> /// 玩家移动速度 /// </summary> public float speed = 6f; /// <summary> /// 玩家刚体组件的引用 /// </summary> private Rigidbody rb; /// <summary> /// 玩家动画组件的引用 /// </summary> private Animator anim; /// <summary> /// 在对象激活时获取刚体和动画组件 /// </summary> private void Awake() { rb = GetComponent<Rigidbody>(); anim = GetComponent<Animator>(); } /// <summary> /// 在固定时间间隔内处理物理移动、旋转和动画 /// </summary> private void FixedUpdate() { // 获取水平和垂直方向的输入 float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); // 移动角色 Move(h, v); // 角色朝向鼠标指向位置 Turing(); // 播放行走动画 Animating(h, v); } /// <summary> /// 根据输入移动角色 /// </summary> /// <param name="h">水平输入</param> /// <param name="v">垂直输入</param> void Move(float h, float v) { // 计算移动向量 Vector3 movement = new Vector3(h, 0.0f, v); // 移动玩家到新的位置 rb.MovePosition(transform.position + movement * speed * Time.fixedDeltaTime); } /// <summary> /// 让角色朝向鼠标指向的地面位置 /// </summary> void Turing() { // 创建一条从主摄像机到鼠标位置的射线 Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition); // 获取地面层的LayerMask int floorLayer = LayerMask.GetMask("Ground"); RaycastHit floorHit; // 射线检测是否击中地面 bool isTouchFloor = Physics.Raycast(cameraRay, out floorHit, 100, floorLayer); if (isTouchFloor) { // 计算角色到鼠标点击点的方向向量 Vector3 v3 = floorHit.point - transform.position; v3.y = 0; // 保持水平方向 // 计算朝向该方向的旋转 Quaternion q = Quaternion.LookRotation(v3); // 旋转角色 rb.MoveRotation(q); } } /// <summary> /// 根据输入设置动画参数,控制行走动画 /// </summary> /// <param name="h">水平输入</param> /// <param name="v">垂直输入</param> void Animating(float h, float v) { // 判断是否有输入 bool isWalking = h != 0 || v != 0; // 设置动画参数 anim.SetBool("isWalking", isWalking); } }