Unity中Sprite八方向移动动画问题:需优先水平轴动画
Unity八方向移动动画:斜向优先水平方向的修复方案
问题根源
当前代码同时将水平和垂直输入参数传递给Animator,导致斜向移动时,Animator可能优先响应垂直轴的动画触发条件,无法满足"斜向优先水平动画"的需求。
修改后的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movement : MonoBehaviour { public float speed; public Animator animator; private void Update() { float horizontal = Input.GetAxisRaw("Horizontal"); float vertical = Input.GetAxisRaw("Vertical"); Vector3 direction = new Vector3(horizontal, vertical); AnimateMovement(horizontal, vertical); // 归一化方向向量,避免斜向移动速度过快 if (direction.magnitude > 1) { direction.Normalize(); } transform.position += direction * speed * Time.deltaTime; } void AnimateMovement(float horizontal, float vertical) { if (animator != null) { if (horizontal != 0 || vertical != 0) { animator.SetBool("isMoving", true); // 优先水平方向:有水平输入时,强制垂直动画参数为0 if (horizontal != 0) { animator.SetFloat("horizontal", horizontal); animator.SetFloat("vertical", 0); } else { // 无水平输入时,使用垂直方向动画 animator.SetFloat("vertical", vertical); animator.SetFloat("horizontal", 0); } } else { animator.SetBool("isMoving", false); } } } }
关键修改说明
- 拆分输入参数处理:将
AnimateMovement的参数改为单独的水平、垂直输入值,便于精准控制动画参数 - 水平优先逻辑:当检测到水平输入时,强制将Animator的
vertical参数设为0,确保仅触发左右方向的动画 - 速度归一化:添加方向向量归一化,避免斜向移动时因向量模长大于1导致移动速度异常
- 无水平输入时的垂直动画:仅当没有水平输入时,才传递垂直参数,保证上下方向动画正常触发
Animator状态机配套检查
确保你的Animator状态机过渡条件符合以下逻辑:
- 向右动画过渡条件:
horizontal > 0.1 - 向左动画过渡条件:
horizontal < -0.1 - 向上动画过渡条件:
vertical > 0.1且horizontal == 0 - 向下动画过渡条件:
vertical < -0.1且horizontal == 0
内容的提问来源于stack exchange,提问作者Jim Lahey
相关产品推荐
相关产品推荐

