通过编辑器脚本更改同步图层的mecanim运动参考?

时间:2017-03-11 22:48:47

标签: unity3d

层1:     4状态机,在每个状态机X状态。这些机器中的每一台都具有设置运动参考的状态;有些是混合树。

Layer2(与layer1同步):     在Unity的编辑器中,我可以导航Layer1中提到的相同导航树。我可以很好地改变对动画片段的引用。

问题是,如何在脚本中执行等效操作?似乎无法访问这些引用;在这种情况下,Unity编辑器如何存储这个?

我所指的屏幕截图: https://s3.amazonaws.com/uploads.hipchat.com/20686/98498/cEhYZ4owenI8ebJ/Test.png

1 个答案:

答案 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

希望这能回答你的问题。