赞
踩
最近使用JSON文件保存模型表情数据,简单记录一下。
首先自定义数据类,需要记录表情每帧的所有BlendShape及时间戳:
- [System.Serializable]
- public class RecBlendShape
- {
- public List<float> Fram;
- public long timeStamp;
-
- }
使用Unity自带的JSON读写方法:
- /// <summary>
- /// 记录BlendShape数据为JSON
- /// </summary>
- private void RecBlendShapeToJSON()
- {
- //获取表情BlendShape值
- List<float> getBS = new List<float>();
- RecBlendShape testRecBS = new RecBlendShape();
- for (int i = 0; i < targetFace.sharedMesh.blendShapeCount; i++)
- {
- getBS.Add(targetFace.GetBlendShapeWeight(i));
-
- }
- testRecBS.Fram = getBS;
-
- //当前时间戳转毫秒时间
- long curTimeStamp = (System.DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
- //计算与开始记录的时间间隔
- testRecBS.timeStamp = curTimeStamp - startTimeStamp;
-
- //序列化为JSON格式保存为StringBuilder类型
- string json = JsonUtility.ToJson(testRecBS) + "\n";
- myJSON.Append(json);
-
- }
-
- /// <summary>
- /// 读取JSON每帧赋值一个表情数据
- /// </summary>
- private void UpdateData()
- {
- //反序列化JSON数据
- rbs = JsonUtility.FromJson<RecBlendShape>(getJSON[frame]);
- for (int j = 0; j < defaultFace.sharedMesh.blendShapeCount; j++)
- {
- defaultFace.SetBlendShapeWeight(j, rbs.Fram[j]);
-
- }
- frame++;
-
- }
保存与读取JSON文件:
- /// <summary>
- /// 保存JSON文件
- /// </summary>
- private void SaveJSON()
- {
- FileStream file = File.Create(targetFbxFile + "_FaceJson.json");
- byte[] byteArray = System.Text.Encoding.Default.GetBytes(myJSON.ToString());
- file.Write(byteArray, 0, byteArray.Length);
- file.Close();
-
- }
-
- /// <summary>
- /// 读取JSON文件
- /// </summary>
- private void SaveJSON()
- {
- path = targetFbxFile + "_FaceJson.json";
- if (!File.Exists(path))
- {
- Debug.Log("文件不存在");
- return;
- }
- getJSON = File.ReadAllLines(path);
-
- }
简单记录,部分变量与方法未展示,仅供参考。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。