层1: 4状态机,在每个状态机X状态。这些机器中的每一台都具有设置运动参考的状态;有些是混合树。
Layer2(与layer1同步): 在Unity的编辑器中,我可以导航Layer1中提到的相同导航树。我可以很好地改变对动画片段的引用。
问题是,如何在脚本中执行等效操作?似乎无法访问这些引用;在这种情况下,Unity编辑器如何存储这个?
我所指的屏幕截图: https://s3.amazonaws.com/uploads.hipchat.com/20686/98498/cEhYZ4owenI8ebJ/Test.png
答案 0 :(得分:1)
后端表示。 这在Unity的大多数类中都很常见,除了一些值得注意的例外,例如Unity的UI,如果你很好奇,repo就是开源的。
如果你曾经见过任何Unity的反编译代码,那么你会注意到许多方法委托给后端的用C ++编写的实际方法。这与他们的许多变量的设置相同。
在动画控制器的情况下,您可以在运行时访问动画片段,因为Animator控制器继承自Runtime Animator控制器。但是,你无法交换新的。为此,您需要另一个控制器来交换。
您可以在编辑器中交换动画,但仅在编辑器中注明,而不是在构建和发布时。 UnityEditor.Animations命名空间使您能够从代码构建动画控制器。如果你看一下这些类的反编译版本,你会注意到很多这些属性都委托给C ++来进行实际的动画制作控制器构建。然后,您可以在代码中使用该构建版本。
有一种潜在的方法可以在运行时构建自己的动画控制器。请注意,这是您自己的版本,据我所知,Unity不允许您在运行时构建动画控制器。您将在UnityEngine.Experimental.Director名称空间之后。这使您可以访问自定义可播放器,可用于在运行时构建动画链,甚至是动画控制器。但是请记住,这是实验性的,并且可能会在未来的Unity版本中发生变化。
所以你的答案是后端表示。控制器运行时逻辑是用C ++编写的,可以在编辑器中访问构建器接口。当您点击保存按钮时后端数据被序列化,前端提供了一种从C#引用后端的方法。在运行时,您可以使用Animator来控制后端的某些方面。
一些链接:
动画:https://docs.unity3d.com/ScriptReference/Animations.AnimatorController.html
导演的东西: https://docs.unity3d.com/ScriptReference/Experimental.Director.AnimatorControllerPlayable.html
希望这能回答你的问题。