You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
            }
        }
    }
}

关键修改说明

  1. 拆分输入参数处理:将AnimateMovement的参数改为单独的水平、垂直输入值,便于精准控制动画参数
  2. 水平优先逻辑:当检测到水平输入时,强制将Animator的vertical参数设为0,确保仅触发左右方向的动画
  3. 速度归一化:添加方向向量归一化,避免斜向移动时因向量模长大于1导致移动速度异常
  4. 无水平输入时的垂直动画:仅当没有水平输入时,才传递垂直参数,保证上下方向动画正常触发

Animator状态机配套检查

确保你的Animator状态机过渡条件符合以下逻辑:

  • 向右动画过渡条件:horizontal > 0.1
  • 向左动画过渡条件:horizontal < -0.1
  • 向上动画过渡条件:vertical > 0.1 且 horizontal == 0
  • 向下动画过渡条件:vertical < -0.1 且 horizontal == 0

内容的提问来源于stack exchange,提问作者Jim Lahey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:42:40