Unity Animation ---Unity中录制某个物体的运动到AnimationClip(一)

2023-10-27

在某些情况下,我们需要把物体的运动状态,材质变化等信息录制下来存储到Clip中。比如说,用到ITween、DoTween等插件控制物体运动,然后想把运动的过程记录下来。就需要在Editor Runtime下进行一些操作来达到我们的目的。
所幸Unity提供了一套还比较完善的API供我们使用。接下来就介绍一下步骤。
首先我们需要知道Unity支持的API,叫做GameObjectRecorder(类库是:UnityEditor.Animations,Unity 2018测试)。接下来只需要三步就可以完成。

  1. 创建GameObjectRecorder类型的实例。

  2. 调用GameObjectRecorder实例的方法 BindComponentOfType(GameObject , )绑定需要录制的组件,然后调用TakeSnapshot(Time.deltaTime),进行录制。这里要注意GameObject参数是录制Clip的根节点,如果要录制的动画层级很多,一定要把这个参数设为根节点。不然录制的Clip层级不对。

  3. 调用GameObjectRecorder实例的方法SaveToClip(AnimationClip),把绑定的帧存储在Clip中。
    代码如下:

using UnityEngine;
using UnityEditor.Animations;

public class RecordTransformHierarchy : MonoBehaviour
{
    public AnimationClip clip;

    private GameObjectRecorder m_Recorder;

    void Start()
    {
        // Create recorder and record the script GameObject.
        m_Recorder = new GameObjectRecorder(gameObject);

        // Bind all the Transforms on the GameObject and all its children.
        //这里的Bind操作,可以绑定各种UnityEngine的类型,比如MeshRender之类,
        //绑定之后就可以记录这个类型的值了。这里参数还需要注意,gameObject是Root节点,
        //如果要录制的物体有很多层级的话,最好参数设置为根节点。不然层级信息不对在Clip中无法播放。
        m_Recorder.BindComponentsOfType<Transform>(gameObject, true);
    }

    void LateUpdate()
    {
        if (clip == null)
            return;

        // Take a snapshot and record all the bindings values for this frame.
        m_Recorder.TakeSnapshot(Time.deltaTime);
    }

    void OnDisable()
    {
        if (clip == null)
            return;

        if (m_Recorder.isRecording)
        {
            // Save the recorded session to the clip.
            m_Recorder.SaveToClip(clip);
        }
    }
}

准备好代码之后,可以把代码直接绑定到要录制的物体上,然后Play。之后就可以录制物体的动画文件了。下边是录制了Meshrenderer的BlendShape信息:
在这里插入图片描述
OK,到这里就完成了录制某个物体的运动、材质变化、等等一切可以被录制成动画的信息。有问题请留言哦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Animation ---Unity中录制某个物体的运动到AnimationClip(一) 的相关文章

  • Android-S模拟器

    0 前言 参考资料 1 基于Android P对Emulator的使用进行了说明 Android S情况有变 因此撰写本文进行记录 1 编译 根据参考资料 1 的方法编译 aosp x86 64 eng 完成后执行emulator无法正常进

随机推荐

  • 南京美食,为吃遍天下做准备~~

    标点美食地址 1 羊肉泡馍 长白街348号有家 老陕家 面馆 郑和公园北面 肉加馍 2 蓝空饭店 三条巷那边 稻香鸭 红烧老鹅 韭香脆皮鸡 是很好的还有一个叫什么牛肉粒的也好吃昏的了 3 山西炸酱面馆 顺着流行青年广场旁的天桥走到马路对面
  • 【阅读笔记】联邦学习实战——构建公平的大数据交易市场

    联邦学习实战 构建公平的大数据交易市场 前言 1 大数据交易 1 1 数据交易定义 1 2 数据确权 1 3 数据定价 2 基于联邦学习构建新一代大数据交易市场 3 联邦学习激励机制助力数据交易 4 FedCoin支付系统设计 4 1 Po
  • stm32 SystemInit函数详解

    官方固件库中的对应函数为 void SystemInit void Reset the RCC clock configuration to the default reset state for debug purpose Set HSI
  • 终于明白协方差的意义了

    转自 https blog csdn net GoodShot article details 79940438 协方差其意义 度量各个维度偏离其均值的程度 协方差的值如果为正值 则说明两者是正相关的 从协方差可以引出 相关系数 的定义 结
  • 程序员必读书目推荐

    1 Effective Java Joschua 稍许过时 但没有替代java方面的书 2 Effectvie C Scott Meyer 3 More Effective C Scott Meyer的书是非常非常好书 每次读都感到汗颜 自
  • Vue 动态锚点

    这是封装的组件 判断容器的滚动 接收父组件传来的Tab参数
  • Qt Quick里的图形效果——混合(Blend)

    Blend 元素用指定的模式混合两个 Item 在我们使用 QPainter 绘图时 支持 Composition Modes Blend 干的事儿与此类似 使用 Blend 需要 import QtGraphicalEffects 1 0
  • IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”

    目录 一 一般的解决思路 1 JDBC下载链接 2 选择下载内容 并进行下载 3 将驱动导入java项目 二 依然导入驱动失败怎么办 当我们在idea中使用java操作mysql数据库时会出现 Exception in thread mai
  • 自动驾驶多边形iou计算Shapely库笔记

    参考 https cloud tencent com developer ask 42755 https blog csdn net u014421797 article details 89501572 https www itransl
  • MMDetection= Cuda10.0.130 + Pytorch1.4.0 + torchvision0.5.0 + mmcv-full1.1.6 + mmdet2.5.0

    1 版本选取 MMDetection的版本选择 安装的时候 需要选择合适的版本 下载不同版本的MMDetection 从 Github 的历史版本中选择合适的版本 https github com open mmlab mmdetectio
  • Python之线程编程(Thread)

    线程基本概念 1 什么是线程 1 线程被称为轻量级的进程 2 线程也可以使用计算机多核资源 是多任务编程方式 3 线程是系统分配内核的最小单元 4 线程可以理解为进程的分支任务 2 线程特征 1 一个进程中可以包含多个线程 2 线程也是一个
  • Untiy UDP局域网 异步发送图片

    同步画面有问题 传图片吧 using System Text using System Net Sockets using System Collections using System Collections Generic using
  • WSL2 Ubuntu中apt update命令报错,无法解析域名解决方法

    参考链接 参考链接 1 sudo apt get update失败 在ubuntu16中 当我们输入sudo apt get update会失败 这里有很多原因 1 网络原因 先检查网络好不好用 2 ubuntu16 自带的源不好用 或者有
  • 大数据技术学习代码记录——Scala

    文章目录 一 Scala 二 Day01代码记录 2 1 HelloWord scala 2 1 1 TestHelloWorld scala 2 2 ifelse scala 2 3 PrintStudentInfo scala 三 Da
  • LayUI中的内置模块之 常用元素操作 - layui.element

    前言 最近在准备找工作的事项 但是作为一个后台也是需要了解一些前端框架的 就目前的来说有大火的VUE 但是VUE还是存在一定的学习成本 所以决定先从对后台友好的LayUI开始入手先做一些小项目练练手 后面会考虑使用VUE ElementUI
  • 字符串压缩(小知识点)

    当对字符串进行修改的时候 需要使用 StringBuffer 和 StringBuilder 类 和 String 类不同的是 StringBuffer 和 StringBuilder 类 的对象能够被多次的修改 并且不产生新的未使用对象
  • Maven 项目的配置与程序的运行

    Maven 是一个 Java 包管理工具 需要下载和安装 通过配置 Maven 以后建立项目时就不需要再创建 lib 目录并导入相关的包 只需要在它的配置文件 pom xml 文件中进行包的配置 这样的配置方法提供了便利 大大节约了资源 在
  • Zookeeper入门

    Zookeeper概念 Zookeeper是一个开源的 分布式的项目 是apache的一个项目 从设计模式的角度理解 Zookeeper是基于观察者模式的 它负责存储大家都关心的数据 然后接受观察者的注册 一旦这些数据发生变化 则会通知已注
  • 华为OD机试 - 区块链文件转储系统(Java)

    题目描述 区块链底层存储是一个链式文件系统 由顺序的N个文件组成 每个文件的大小不一 依次为F1 F2 Fn 随着时间的推移 所占存储会越来越大 云平台考虑将区块链按文件转储到廉价的SATA盘 只有连续的区块链文件才能转储到SATA盘上 且
  • Unity Animation ---Unity中录制某个物体的运动到AnimationClip(一)

    在某些情况下 我们需要把物体的运动状态 材质变化等信息录制下来存储到Clip中 比如说 用到ITween DoTween等插件控制物体运动 然后想把运动的过程记录下来 就需要在Editor Runtime下进行一些操作来达到我们的目的 所幸