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

