Unity中通过父对象获取子对象已禁用Animator组件失败如何解决
问题排查与修复
存在的两个核心问题
- 类型声明错误
Unity 不存在名为Anim的内置组件类,你要使用的动画组件类型为Animator,错误的类型会直接触发编译报错,代码无法运行。 GetComponentInChildren默认不检索禁用组件GetComponentInChildren<T>默认参数下includeInactive = false,只会返回处于激活状态的组件,同时检索逻辑会优先检查父对象自身挂载的组件:- 你父对象本身挂载了激活状态的Animator,方法会直接返回父对象的Animator,不会检索子对象
- 即便父对象没有该组件,子对象的Animator处于禁用状态,默认参数下也无法被检索到
修正后的代码
如果需要同时检索禁用状态的组件,需要主动传入true作为参数,同时可以增加判断避免误拿父对象的组件:
Animator childAnim = parent.GetComponentInChildren<Animator>(true); // 排除获取到父对象自身Animator的情况 if (childAnim != null && childAnim.transform != parent.transform) { childAnim.enabled = true; }
如果已知子对象名称,更稳妥的写法是直接定位子对象后获取组件,避免检索到其他无关组件:
// 把括号内的内容替换为你的子对象实际名称 Transform child = parent.transform.Find("你的子对象名称"); if(child != null) { Animator childAnim = child.GetComponent<Animator>(); if(childAnim != null) { childAnim.enabled = true; } }
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

