Unity3d 在Unity编辑器中使用脚本更改运动

Unity3d 在Unity编辑器中使用脚本更改运动,unity3d,animation,Unity3d,Animation,您好,我们如何使用Unity Editor中的脚本更改AnimatorController中的运动 红色突出显示是我想更改的,但使用脚本 我的用例是从一个对象复制动画,处理动画,例如添加偏移旋转,然后添加到另一个对象。因为我的对象有很多子对象,所以我需要创建一个脚本来自动执行 通过编辑器脚本更改动画控制器总是相当棘手的 首先,您需要从某处获得AnimationClip //从某处获取AnimationClip var clip=新的AnimationClip(); 然后,您将不得不强制

您好,我们如何使用Unity Editor中的脚本更改AnimatorController中的运动

红色突出显示是我想更改的,但使用脚本

  • 我的用例是从一个对象复制动画,处理动画,例如添加偏移旋转,然后添加到另一个对象。因为我的对象有很多子对象,所以我需要创建一个脚本来自动执行
通过编辑器脚本更改
动画控制器总是相当棘手的

  • 首先,您需要从某处获得
    AnimationClip

    //从某处获取AnimationClip
    var clip=新的AnimationClip();
    
  • 然后,您将不得不强制转换为仅在编辑器中可用的!(使用UnityEdit;
放在脚本顶部!)

var controller=(AnimatorController)animator.runtimeAnimatorController;
  • 现在你可以得到它的所有信息了。在您的情况下,您可能可以使用默认层(
    layers[0]
    )及其属性,并根据图像检索
    defaultState

    var state=controller.layers[0].stateMachine.defaultState;
    
    或者使用(将
    using System.Linq;
    放在脚本顶部)查找它,例如

    var state=controller.layers[0].stateMachine.states.FirstOrDefault(s=>s.state.name.Equals(“SwimmingAnim”)).state;
    if(state==null)
    {
    LogError(“无法获取状态!”);
    返回;
    }
    
  • 最后,使用将
    AnimationClip
    指定到此状态

    控制器。设置状态有效运动(状态,剪辑);
    

  • 但是请注意,尽管您可以使用为动画片段编写单独的动画曲线,但不幸的是,无法正确地读取这些曲线,因此很难执行您想要的操作

    从一个对象复制动画,处理动画,例如添加偏移旋转,然后添加到另一个对象

    你将不得不经历一个相当复杂的过程;)


    祝你好运

    通过编辑器脚本更改
    AnimatorController
    总是相当棘手的

    • 首先,您需要从某处获得
      AnimationClip

      //从某处获取AnimationClip
      var clip=新的AnimationClip();
      
    • 然后,您将不得不强制转换为仅在编辑器中可用的!(使用UnityEdit;
    放在脚本顶部!)

    var controller=(AnimatorController)animator.runtimeAnimatorController;
    
  • 现在你可以得到它的所有信息了。在您的情况下,您可能可以使用默认层(
    layers[0]
    )及其属性,并根据图像检索
    defaultState

    var state=controller.layers[0].stateMachine.defaultState;
    
    或者使用(将
    using System.Linq;
    放在脚本顶部)查找它,例如

    var state=controller.layers[0].stateMachine.states.FirstOrDefault(s=>s.state.name.Equals(“SwimmingAnim”)).state;
    if(state==null)
    {
    LogError(“无法获取状态!”);
    返回;
    }
    
  • 最后,使用将
    AnimationClip
    指定到此状态

    控制器。设置状态有效运动(状态,剪辑);
    

  • 但是请注意,尽管您可以使用为动画片段编写单独的动画曲线,但不幸的是,无法正确地读取这些曲线,因此很难执行您想要的操作

    从一个对象复制动画,处理动画,例如添加偏移旋转,然后添加到另一个对象

    你将不得不经历一个相当复杂的过程;)


    祝你好运

    是的,这正是我要找的水!谢谢@derHugo。我得承认这真的很痛苦。我还通过
    AnimationUtility
    从头开始创建
    AnimationClip
    ,并一个接一个地更改关键帧。是的,这正是我要寻找的内容!谢谢@derHugo。我得承认这真的很痛苦。我还通过
    AnimationUtility
    从头开始创建
    AnimationClip
    ,并逐个更改关键帧。