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

Unity中如何用AnimatorStateInfo(0).IsName判断动画名是否以指定字符结尾

问题解答

你无法直接使用AnimatorStateInfo.IsName()函数判断动画名是否以指定字符结尾,该方法仅支持完整状态名的精确匹配,不支持前缀、后缀等模糊匹配逻辑。

推荐实现方案

直接读取当前播放的动画名称,提取后缀字符判断朝向即可,实现逻辑非常简单:

  • 第一步:获取当前动画剪辑的名称
  • 第二步:截取名称最后一位字符,匹配对应朝向即可

示例代码

using UnityEngine;

public class DirectionDetector : MonoBehaviour
{
    // 挂在角色身上的Animator组件,在Inspector面板赋值即可
    public Animator roleAnimator;

    void Update()
    {
        // 仅在动画播放状态正常时执行判断
        if (roleAnimator.isActiveAndEnabled && roleAnimator.GetCurrentAnimatorClipInfo(0).Length > 0)
        {
            // 获取当前播放的动画剪辑名称
            string currentAnimName = roleAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name;
            // 提取最后一位后缀字符
            char directionTag = currentAnimName[currentAnimName.Length - 1];

            switch (directionTag)
            {
                case 'L':
                    // 朝左业务逻辑
                    break;
                case 'R':
                    // 朝右业务逻辑
                    break;
                case 'U':
                    // 朝上业务逻辑
                    break;
                case 'D':
                    // 朝下业务逻辑
                    break;
            }
        }
    }
}

注意事项

如果你的Animator中状态名和动画剪辑名不一致,且是给状态名添加的L/R/U/D后缀,可以提前遍历AnimatorController的状态列表,将状态哈希值和对应朝向存入字典,运行时直接读取AnimatorStateInfo.shortNameHash匹配字典即可,不需要每次做字符串截取操作,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:45:03