private static void LoadFile(string animationFile) { SetupPoseRecorder(); fileName = Selection.objects[animFileIndex].name; PoseRecorder.Instance.loadPositions = new List <SignKeyframe>(); string animationString = animationFile; string[] splitAnimation = animationString.Split(new string[] { ";" }, StringSplitOptions.None); KeyframeInformation keyframeInfo = JsonUtility.FromJson <KeyframeInformation>(splitAnimation[0]); bool shouldLoad = true; fileVersion = keyframeInfo.version; if (keyframeInfo != null && fileVersion < 1) { shouldLoad = false; Debug.LogError("File not readable"); } if (shouldLoad) { for (int i = 1; i < splitAnimation.Length; i++) { PoseRecorder.Instance.loadPositions.Add(JsonUtility.FromJson <SignKeyframe>(splitAnimation[i])); } } }
private void SaveRecordPositions() { CreateDirectory(); string json = ""; KeyframeInformation keyframeInformation = new KeyframeInformation { version = 2 }; json += JsonUtility.ToJson(keyframeInformation); json += ";"; for (int i = 0; i < recordingFrames.Count; i++) { json += JsonUtility.ToJson(recordingFrames[i]); if (i < recordingFrames.Count - 1) //Don't add a ; if it's the last record point { json += ";"; } } File.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/My Games/VRChat/MoCap Recordings/SignAnimation" + DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss") + ".txt", json); }
public static void LoadAndRecord(string animationFile) { SetupPoseRecorder(); fileName = Selection.objects[animFileIndex].name; PoseRecorder.Instance.loadPositions = new List <SignKeyframe>(); string animationString = animationFile; Debug.Log("Recording " + Selection.objects[animFileIndex].name); string[] splitAnimation = animationString.Split(new string[] { ";" }, StringSplitOptions.None); KeyframeInformation keyframeInfo = JsonUtility.FromJson <KeyframeInformation>(splitAnimation[0]); bool shouldRecord = true; fileVersion = keyframeInfo.version; if (keyframeInfo != null && fileVersion < 1) { shouldRecord = false; Debug.LogError("File not readable"); } if (shouldRecord) { for (int i = 1; i < splitAnimation.Length; i++) { PoseRecorder.Instance.loadPositions.Add(JsonUtility.FromJson <SignKeyframe>(splitAnimation[i])); } for (int i = 0; i < PoseRecorder.Instance.loadPositions.Count - PoseRecorder.Instance.frameDiscardAmount; i++) { for (int j = 0; j < PoseRecorder.Instance.avatarBones.Length; j++) { if (fileVersion == 1) { if (j == 0) { PoseRecorder.Instance.avatarBones[j].transform.position = new Vector3(PoseRecorder.Instance.loadPositions[i].positionX[j], PoseRecorder.Instance.loadPositions[i].positionY[j], PoseRecorder.Instance.loadPositions[i].positionZ[j]); } PoseRecorder.Instance.avatarBones[j].transform.rotation = new Quaternion(PoseRecorder.Instance.loadPositions[i].rotationX[j], PoseRecorder.Instance.loadPositions[i].rotationY[j], PoseRecorder.Instance.loadPositions[i].rotationZ[j], PoseRecorder.Instance.loadPositions[i].rotationW[j]); Vector3 pos = Vector3.zero; if (j == 0) { pos = PoseRecorder.Instance.avatarBones[j].localPosition; } Quaternion rot = PoseRecorder.Instance.avatarBones[j].localRotation; objRecorders[j].AddFrame(i / PoseRecorder.Instance.framesPerSecond, pos, rot); } else { Vector3 pos = Vector3.zero; if (j == 0) { pos = new Vector3(PoseRecorder.Instance.loadPositions[i].hipPositionX, PoseRecorder.Instance.loadPositions[i].hipPositionY, PoseRecorder.Instance.loadPositions[i].hipPositionZ); } Quaternion rot = new Quaternion(PoseRecorder.Instance.loadPositions[i].rotationX[j], PoseRecorder.Instance.loadPositions[i].rotationY[j], PoseRecorder.Instance.loadPositions[i].rotationZ[j], PoseRecorder.Instance.loadPositions[i].rotationW[j]); objRecorders[j].AddFrame(i / PoseRecorder.Instance.framesPerSecond, pos, rot); } } } if (fileVersion == 1) { for (int i = 0; i < PoseRecorder.Instance.avatarBones.Length; i++) { PoseRecorder.Instance.avatarBones[i].position = originPos[i]; PoseRecorder.Instance.avatarBones[i].rotation = originRot[i]; } ExportAnimationClip(); } } animFileIndex++; }