kkl*_*kkl 4 animation unity-game-engine
您好,我们如何使用 Unity 编辑器中的脚本更改 AnimatorController 中的运动?
红色突出显示的是我想更改的,但是使用脚本
更改AnimatorController
via编辑器脚本总是相当棘手!
首先你需要AnimationClip
从某个地方得到你的
// somewhere get the AnimationClip from
var clip = new AnimationClip();
Run Code Online (Sandbox Code Playgroud)然后您必须将 转换runtimeAnimatorController
为AnimatorController
仅在编辑器中可用的!(放在using UnityEditor;
脚本的顶部!)
var controller = (AnimatorController)animator.runtimeAnimatorController;
Run Code Online (Sandbox Code Playgroud)现在您可以获得其所有信息。在您的情况下,您可能可以使用默认图层(layers[0]
)及其并stateMachine
根据您的图像检索defaultState
:
var state = controller.layers[0].stateMachine.defaultState;
Run Code Online (Sandbox Code Playgroud)
或者使用LinqFirstOrdefault
找到它(放在using System.Linq;
脚本的顶部),例如
var state = controller.layers[0].stateMachine.states.FirstOrDefault(s => s.state.name.Equals("SwimmingAnim")).state;
if (state == null)
{
Debug.LogError("Couldn't get the state!");
return;
}
Run Code Online (Sandbox Code Playgroud)最后使用分配AnimationClip
给这个状态SetStateEffectiveMotion
controller.SetStateEffectiveMotion(state, clip);
Run Code Online (Sandbox Code Playgroud)但请注意,即使您可以使用 为动画剪辑编写单独的动画曲线,SetCurve
不幸的是,也无法正确读取它们,因此很难执行您想要的操作
从一个对象复制动画,处理动画,例如添加偏移旋转,然后添加到另一个对象。
你必须经历AnimationUtility.GetCurveBindings
这变得相当复杂的过程;)
祝你好运!
归档时间: |
|
查看次数: |
6075 次 |
最近记录: |