Beispiel #1
0
    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]));
            }
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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++;
    }