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

Unity中如何从Animator获取Blend Tree对象

获取Animator状态中的BlendTree对象实现方法

直接把你的Start方法替换成以下代码即可实现需求:

private BlendTree blendtree;
public Animator ani;

void Start()
{
    // 获取Animator绑定的控制器实例
    AnimatorController controller = ani.runtimeAnimatorController as AnimatorController;
    
    if (controller != null)
    {
        // 获取默认Base Layer的状态机(若目标状态在自定义层,需替换为对应层索引或通过层名查找)
        AnimatorStateMachine stateMachine = controller.layers[0].stateMachine;
        
        // 遍历状态机内所有状态,匹配目标状态名
        foreach (AnimatorState state in stateMachine.states)
        {
            if (state.state.name == "normal_state")
            {
                // 将状态绑定的Motion转换为BlendTree类型
                blendtree = state.state.motion as BlendTree;
                break;
            }
        }
    }
}

核心逻辑说明:

  • 先通过runtimeAnimatorController获取Animator绑定的控制器,强制转换为AnimatorController(前提是你使用的是普通AnimatorController而非OverrideController)
  • 默认取第一个层(layers[0])即Base Layer,若目标状态在自定义层,可通过层名精准定位(需引入System.Linq,用controller.layers.First(l => l.name == "你的层名"))
  • 遍历状态机内的所有状态,匹配到目标状态后,将其motion属性转为BlendTree——因为BlendTree是Motion的子类,所以可直接强制转换

注意事项:

  • 务必在Inspector面板给ani赋值,避免空引用报错
  • 确认"normal_state"状态的Motion确实是BlendTree,否则转换后blendtree会为null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:50:13