news 2026/8/15 20:06:56

Unity一个动画控制器为何直接依赖另一个动画控制器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Unity一个动画控制器为何直接依赖另一个动画控制器

直接去被依赖项的meta文件拷贝guid,然后去依赖项的YAML里搜索,结果是:

这个guid多次出现在AnimatorStateTransition模块。

看不懂YAML,于是把依赖别人的控制器复制一个,把状态删一个,打印一次依赖。然后删成默认状态机,啥都不依赖了,只依赖那个动画控制器。

然后把控制器的层、参数、状态全删掉,再建一个全新控制器,对比它们的YAML。新建的控制器很干净:

%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!91 &9100000 AnimatorController: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: New Animator Controller serializedVersion: 5 m_AnimatorParameters: [] m_AnimatorLayers: []

被删空的控制器YAML则是:

%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!1101 &-8043723507950298118 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 1 m_ConditionEvent: running m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: 5868839050235648224, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.9464286 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1101 &-7986762334218738143 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 6 m_ConditionEvent: bodyStatus m_EventTreshold: 1 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -4066937683750499412, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.89892185 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1101 &-5474338561685204398 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 1 m_ConditionEvent: Jump m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -9165411807507458709, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.068148136 m_TransitionOffset: 0 m_ExitTime: 0.89687735 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1101 &-789983268425872304 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 1 m_ConditionEvent: TakeDrop m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: 3227172602469648728, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.89892185 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1101 &-186031674231208760 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 6 m_ConditionEvent: bodyStatus m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -1130861594894586152, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.89892185 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!91 &9100000 AnimatorController: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: NPC 1 serializedVersion: 5 m_AnimatorParameters: [] m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer m_StateMachine: {fileID: 50358232126170600} m_Mask: {fileID: 0} m_Motions: [] m_Behaviours: [] m_BlendingMode: 0 m_SyncedLayerIndex: -1 m_DefaultWeight: 0 m_IKPass: 0 m_SyncedLayerAffectsTiming: 0 m_Controller: {fileID: 9100000} --- !u!1107 &50358232126170600 AnimatorStateMachine: serializedVersion: 6 m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Base Layer m_ChildStates: [] m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] m_StateMachineTransitions: {} m_StateMachineBehaviours: [] m_AnyStatePosition: {x: 0, y: 30, z: 0} m_EntryPosition: {x: 120, y: 120, z: 0} m_ExitPosition: {x: 270, y: 50, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} m_DefaultState: {fileID: 0} --- !u!1101 &1116902853594775685 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 3 m_ConditionEvent: gunStatus m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -2272526421185388783, guid: 06bf078c7d5187148b17f1e7918a9e99, type: 2} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.90909094 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1

我能想到的解释就是这个控制器的一些状态和转换当初是从被依赖的直接复制出来的,在序列化文件里它就是直接复制了这部分文本,但是这样无效,所以保存时序列化另外创建了转换对象,这部分文本也没有删。

这里m_ObjectHideFlags意思应该是这个对象已失效,隐藏,但是不删除。

我看了被依赖控制器YAML的一个转换对象,m_DstState字段根本没有guid,所以可能是拷贝状态时转换对象进了新控制器,添加了对原来目标状态的引用。

AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 6 m_ConditionEvent: bodyStatus m_EventTreshold: 2 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -5291231011926439337} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.25 m_TransitionOffset: 0 m_ExitTime: 0.9493243 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!114 &-9205196945450993477
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 20:03:33

30分钟上手:Unitree Go2机器人ROS2控制的完整指南

30分钟上手:Unitree Go2机器人ROS2控制的完整指南 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk 凌晨两点,调试间里只有风扇声。你刚把 Go…

作者头像 李华
网站建设 2026/8/15 20:00:55

JSON 翻译实战:jsontt 让多语言文件转换从一小时变成三分钟

JSON 翻译实战:jsontt 让多语言文件转换从一小时变成三分钟 【免费下载链接】json-translator jsontt 💡 - AI JSON Translator with GPT / Gemma / Mixtral / llama other FREE translation modules to translate your json/yaml files into other lan…

作者头像 李华
网站建设 2026/8/15 19:58:36

终极指南:如何用AltStore让非越狱iPhone告别App Store限制

终极指南:如何用AltStore让非越狱iPhone告别App Store限制 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 你是否曾经因为某个应用没上架App Stor…

作者头像 李华
网站建设 2026/8/15 19:53:11

性能优化指南:如何让lm-watermarking在GPU上提速300%?

性能优化指南:如何让lm-watermarking在GPU上提速300%? 【免费下载链接】lm-watermarking 项目地址: https://gitcode.com/gh_mirrors/lm/lm-watermarking lm-watermarking是一款强大的文本水印工具,能够为AI生成的文本添加不可见标识…

作者头像 李华