当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/1400292/

相关文章:

  • MEAnalyzer参数实战指南:一文吃透Intel固件分析命令
  • 2026年泉州工程专供花箱定做服务介绍 - 滚动商讯
  • 一分钟搞定NCM格式转换:ncmdump免费解锁网易云音乐加密文件的快速上手宝典
  • 自动化脚本上手记:蔚蓝档案的日常,从两小时到二十分钟
  • 如何用 Arnis 把现实世界搬进 Minecraft?一份真实地图生成实战指南
  • BT下载卡在99%不动?3个技巧用trackerslist让下载彻底起飞
  • 【JVM原理详解】55-内存泄漏排查实战
  • 深度揭秘GNU Emacs notebook-mode工作原理:从org-mode到SVG标签的实现细节
  • 微信聊天记录导出终极指南:用WeChatMsg把十年对话永久保存成数字遗产
  • RAT-retrieval-augmented-thinking Claude专用版:Anthropic消息预填充技术实战
  • 微信聊天记录导出与永久保存完整指南:开源神器WeChatMsg让你把每一段对话都留住
  • 杭州黄金周大福金条回收,成色判定标准简单科普 - 日常前沿快讯
  • social-auto-upload 实战教程:一条视频如何一键发布到 6 个平台
  • 不交会员费也能听无损:开源音源搭配洛雪音乐的免费无损音乐终极手册
  • 想知道长沙好用的全屋定制安装哪家强?这份对比别错过! - 滚动商讯
  • 2026年周边渗碳处理生产厂家 工艺不稳交付滞后 靠谱选型参考 - 滚动商讯
  • LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
  • 如何让一台老Mac免费跑上最新macOS?OpenCore Legacy Patcher升级全指南
  • 一个下午从零装好黑苹果:OpCore-Simplify快速实战手记
  • CQRS 架构在 shriek-fx 中的完美落地:命令与查询分离的终极实践教程
  • JX3Toy全功能减负工具上手指南:用Lua智能脚本接管剑网3的技能循环
  • 114个Tracker服务器,如何让BT下载从“龟速“变“光速“?
  • 2026年周边精密模具热处理服务商 适配多场景选购参考 - 滚动商讯
  • 2026年8月北京家族股权传承律师事务所怎么选?3家律所股权代持风险解析 - 品牌深度评测
  • Godot Mod Loader 完整上手指南:三步让你的游戏支持自定义模组
  • 从三个音乐会员到零成本无损:洛雪音乐开源音源配置完整手记
  • ios.cfw.guide进阶技巧:如何隐藏越狱状态避开应用检测
  • 重磅上新:推荐一下全国沥青路面贴缝带厂 - 品牌推广大师
  • PDF补丁丁:免费PDF工具箱5分钟上手,书签、页面、图片一次搞定
  • 完整教程:在CPU和GPU上部署TwIL-LM3的最佳实践