2using System.Collections;
3using System.Collections.Generic;
5using System.Runtime.Serialization;
6using System.Runtime.Serialization.Formatters.Binary;
19 var m_objs = go.GetComponentsInChildren<Transform>();
20 var m_positions =
new List<SerializableVector3>();
21 var m_rotations =
new List<SerializableQuaternion>();
23 for (
int i = 0; i < m_objs.Length; i++)
25 if (limitToMixamoRig && i != 0 && !m_objs[i].name.StartsWith(
"mixamorig"))
continue;
27 m_positions.Add(m_objs[i].localPosition);
28 m_rotations.Add(m_objs[i].localRotation);
30 var pose =
new Pose() { pos = m_positions.ToArray(), rot = m_rotations.ToArray() };
33 IFormatter formatter =
new BinaryFormatter();
34 using (MemoryStream stream =
new MemoryStream())
36 formatter.Serialize(stream, pose);
37 bytes = stream.ToArray();
44 var t = go.GetComponent<Transform>();
48 m_position[0] = (local ? t.localPosition : t.position);
49 m_rotation[0] = (local ? t.localRotation : t.rotation);
50 var pose =
new Pose() { pos = m_position, rot = m_rotation };
53 IFormatter formatter =
new BinaryFormatter();
54 using (MemoryStream stream =
new MemoryStream())
56 formatter.Serialize(stream, pose);
57 bytes = stream.ToArray();
63 public void ByteArrayToPose(
byte[] data, GameObject go,
bool limitToMixamoRig =
true)
65 IFormatter formatter =
new BinaryFormatter();
66 using (MemoryStream stream =
new MemoryStream(data))
68 var pose = (
Pose)formatter.Deserialize(stream);
69 var m_objs = go.GetComponentsInChildren<Transform>();
70 int minLength = Mathf.Min(pose.pos.Length, m_objs.Length);
72 for (
int i = 0; i < minLength; i += 0)
74 if (limitToMixamoRig && i != 0 && !m_objs[i].name.StartsWith(
"mixamorig"))
80 m_objs[i].localPosition = pose.pos[j];
81 m_objs[i].localRotation = pose.rot[j];
void ByteArrayToPose(byte[] data, GameObject go, bool limitToMixamoRig=true)
byte[] PoseToByteArray(GameObject go, bool limitToMixamoRig=true)
byte[] TransformToByteArray(GameObject go, bool local=true)
Since unity doesn't flag the Vector3 as serializable, we need to create our own version....
SerializableVector3[] pos
SerializableQuaternion[] rot