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
相关产品推荐
相关产品推荐

