Unity动画数据的导出和导入

一、在Unity中使用JSON存储和读取动画数据流程


1.定义动画数据类
2. 将动画数据序列化为JSON字符串。可以使用JsonUtility.ToJson()方法实现。
3. 将JSON字符串保存到文件中,例如使用File.WriteAllText()写入。
4. 读取时,从文件中读取JSON字符串,使用JsonUtility.FromJson()反序列化回动画数据类。
5. 根据反序列化后的动画数据类,获取相应的AnimationClip进行播放等操作

二、动画数据存储 读取方法


API------AnimationUnitily
1、通过AnimationUtility.GetCurveBindings方式得到float曲线绑定数据,返回EditorCurveBinding[]这样一个数组,存储运动数据
2、通过AnimationUtility.GetEditorCurve方法获取AnimationCurve对象,存储关键帧的集合
 

通过AnimationUtility.GetCurveBindings接口获取与动画剪辑相关的所有动画事件,然后再通过AnimationUtility.GetEditorCurve接口得到绑定所指向的float曲线

binding.path是模型中所操作的对象节点路径;binding.propertyName是所操作的对象节点属性(例如Position、Rotation、Scale、BlendShape等);curve为关键帧曲线;curve.length和curve.keys.Length都是关键帧个数;最后循环中的curve[i].value是关键帧中数值,curve[i].time是关键帧中时间。

代码中使用的是LitJson

JsonMapper.ToJson(data)JsonMapper.ToObject来序列化和反序列化

//AnimationUtility.//JsonUtility.ToJson   将动画数据序列化为JSON字符串//File.WriteAllText()    将JSON字符串保存到文件中int length;/// <summary>/// 动画数据类/// </summary>public class AnimationData{//动画名public string name;//动画时长public float time;//3个位置信息public Dictionary<string, List<float>> dicPos = new Dictionary<string, List<float>>();//事件信息public AnimationEvent animEvent;}private void Start(){AnimationClip clip = GetComponent<Animation>().clip;//实例化AnimationData data = new AnimationData();//读取信息data.name = clip.name;data.time = clip.length;foreach (var binding in AnimationUtility.GetCurveBindings(clip)){AnimationCurve curve = AnimationUtility.GetEditorCurve(clip, binding);//Debug.Log("/" + binding.propertyName + "\tKeys: " + curve.keys.Length);List<float> keyframeValues = new List<float>();data.dicPos.Add(binding.propertyName, keyframeValues);length = curve.length;for (int i = 0; i < curve.length; i++){//Debug.Log("Keys" + i + ":" + curve[i].value);//添加元素keyframeValues.Add(curve[i].value);}}string filePath = Path.Combine(Application.persistentDataPath, "AnimationData");//序列化为JSON字符串//string json = JsonUtility.ToJson(data);string json = JsonMapper.ToJson(data);Debug.Log(json);//保存文件File.WriteAllText(filePath, json);//反序列化string json1 = File.ReadAllText(filePath);AnimationData data1 = JsonMapper.ToObject<AnimationData>(json1);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是Redis?

什么是Redis 什么是Redis一、特性1. 支持多种数据结构2. 读/写速度快&#xff0c;性能高。3. 支持持久化。4. 实现高可用主从复制&#xff0c;主节点做数据副本。5. 实现分布式集群和高可用。 二、基本数据类型string&#xff08;字符串&#xff09;list(双向链表)set(集合)zse…

基于Java+SpringBoot+Vue前后端分离旅游网站详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

UE5 AI移动无动作问题

文章目录 问题背景解决方法问题背景 在使用行为树让角色移动时,出现角色行走不播放动作的情况: 解决方法 其实有2个问题导致出现这种情况 1、角色动画蓝图的问题 角色动画蓝图可能存在4个问题: ① 无播放行走动画 ② 速度的值未正常传递 ③ 播放移动动作逻辑的值判断错…

【shell脚本】shell脚本之正则表达式、sed基本用法、sed文本块处理(shell脚本基础学习四)

恭喜你&#xff0c;找到宝藏博主了&#xff0c;这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一&#xff0c;它可以提高很多运维重复工作&#xff0c;提高效率。 shell的专栏&#xff0c;我会详细地讲解shell的基础和使用&#xff0c;以及一些比较常用的she…

Windows Docker部署springboot微服务

Windows Docker部署springboot微服务 前言 偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署 过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作 遇到的问题 springboot镜像打包微服务启动后nacos连不上使用的基础…

[SSM]手写Spring框架

目录 十一、手写Spring框架 第一步&#xff1a;创建模块myspring 第二步&#xff1a;准备好要管理的Bean 第三步&#xff1a;准备myspring.xml配置文件 第四步&#xff1a;核心接口实现 第五步&#xff1a;实例化Bean 第六步&#xff1a;给Bean属性赋值 第七步&#xff…

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释 RTSP &#xff08;Real-Time Streaming Protocol&#xff09; 是一种网络协议&#xff0c;用于控制实时流媒体的传输。它是一种应用层协议&#xff0c;通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求&#xff0c;如…

Redis,MongoDB基本操作练习题

文章目录 NoSQL练习&#xff1a;RedisString类型基本操作&#xff1a;List类型基本操作&#xff1a;hash类型基本操作&#xff1a; MongoDB:创建一个数据库 名字grade&#xff1a;创建class集合&#xff1a;集合中插入若干数据&#xff1a;查看班级所有人信息&#xff1a;查看班…

Oracle绑定变量

一、绑定变量简介 首先理解一下OLTP系统为什么需要绑定变量&#xff1f; 变量绑定会使 OLTP系统 数据库中的SQL执行速度飞快&#xff0c;内存效率极高&#xff0c;减少资源消耗&#xff1b;不使用绑定变量可能会使 OLTP 数据库不堪重负&#xff0c;资源被SQL解析严重耗尽&…

【Java基础教程】(四十二)多线程篇 · 上:多进程与多线程、并发与并行的关系,多线程的实现方式、线程流转状态、常用操作方法解析~

Java基础教程之多线程 上 &#x1f539;本节学习目标1️⃣ 线程与进程&#x1f50d;关于多进程、多线程、并发与并行之间的概念关系&#xff1f; 2️⃣ 多线程实现2.1 继承 Thread 类2.2 实现 Runnable 接口2.3 多线程两种实现方式的区别2.4 利用 Callable 接口实现多线程2.5 …

00_ubuntu_开发环境的搭建

ubuntu 的版本22.04 2023-07-21 1.卸载firefox dpkg --get-selections |grep firefox // 查看安装包的信息 sudo apt-get purge firefox firefox-locale-en firefox-locale-zh-hans // 卸载相应的包 2.下载google安装包并安装 wget https://dl.google.com/linux/direct/goo…

深度学习——过拟合和Dropout

基本概念 什么是过拟合&#xff1f; 过拟合&#xff08;Overfitting&#xff09;是机器学习和深度学习中常见的问题之一&#xff0c;它指的是模型在训练数据上表现得很好&#xff0c;但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

【多模态】17、CORA | 将 CLIP 使用到开集目标检测

文章目录 一、背景二、方法2.1 总体结构2.2 region prompting2.3 anchor pre-matching 三、效果 论文&#xff1a;CORA: Adapting CLIP for Open-Vocabulary Detection with Region Prompting and Anchor Pre-Matching 代码&#xff1a;https://github.com/tgxs002/CORA 出处…

Qt/C++音视频开发48-推流到rtsp服务器

一、前言 之前已经打通了rtmp的推流&#xff0c;理论上按照同样的代码&#xff0c;只要将rtmp推流地址换成rtsp推流地址&#xff0c;然后格式将flv换成rtsp就行&#xff0c;无奈直接遇到协议不支持的错误提示&#xff0c;网上说要换成rtp&#xff0c;换了也没用&#xff0c;而…

Linux 学习记录54(ARM篇)

Linux 学习记录54(ARM篇) 本文目录 Linux 学习记录54(ARM篇)一、框图分析1. 芯片手册内部框图2. 操作GPIO过程 二、通过汇编完成GPIO操作1. 常用的汇编指令2. GPIO初始化流程3. 查找相关寄存器(1. RCC寄存器(2. GPIO寄存器>1. 模式配置寄存器>2. 输出模式配置寄存器>3…

Jenkins常用管理功能配置 - 插件管理

Jenkins插件介绍 Jenkins是一个流行的开源持续集成/持续交付(CI/CD)工具&#xff0c;它有大量的插件来扩展其功能。这些插件可以用于构建、测试、部署和监控软件项目。下面是一些常用的Jenkins插件及其简单介绍和使用方法&#xff1a; 1. Git插件&#xff1a;允许Jenkins从Gi…

vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

1.引入两个依赖 npm i html2canvas npm i jspdf 2.在utils文件夹下新建html2pdf.js文件 import html2canvas from html2canvas; import jsPDF from jspdf export const htmlToPDF async (htmlId, title "报表", bgColor "#fff") > { let pdfDom do…

【LeetCode每日一题合集】2023.7.17-2023.7.23(离线算法 环形子数组的最大和 接雨水)

文章目录 415. 字符串相加&#xff08;高精度计算、大数运算&#xff09;1851. 包含每个查询的最小区间⭐⭐⭐⭐⭐解法1——按区间长度排序 离线询问 并查集解法2——离线算法 优先队列 874. 模拟行走机器人&#xff08;哈希表 方向数组&#xff09;918. 环形子数组的最大和…

P5095 [USACO12OPEN] Bookshelf S

P5095 [USACO12OPEN] Bookshelf S 文章目录 P5095 [USACO12OPEN] Bookshelf S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路赛时 code别人code 题目描述 Farmer John 闲来无事的时候总喜欢坐下来看书。这些年来&#xff0c;他一共收集了 N N N 本书&#…

sentinel深入讲解流量控制/熔断降级

文章目录 sentinelsentinel介绍重要的核心概念引入依赖限流的规则熔断规则yaml 项目配置使用注解 SentinelResource讲解类的静态方法 sentinel sentinel介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构…