Ejemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        PlayerHeightOffset myScript = (PlayerHeightOffset)target;

        if (GUILayout.Button("Offset Player Height"))
        {
            myScript.OffsetPlayerHeight();
        }
        if (GUILayout.Button("Save Player Infomation"))
        {
            myScript.SavePlayerInformation();
        }
    }
    private void RecordAnimationClip2CSV(AnimationClip clip, StringBuilder line, TextWriter sw, bool isKinect)
    {
        string playerID  = clip.name.Split('_')[1];
        string objCat    = clip.name.Split('_')[2];
        int    objLocIdx = int.Parse(clip.name.Split('_')[3]);
        // get the receptacle location according to the clip name
        Transform locReceptable = GameObject.Find($"PosReceptacles/{objCat.ToString()}").transform.GetChild(objLocIdx);

        PlayerHeightOffset playerHeights = GameObject.Find("Human Interaction Modules").GetComponent <PlayerHeightOffset>();

        // Input for the model
        line.Append($"{locReceptable.position.x},{locReceptable.position.y},{locReceptable.position.z},"); // Location of the target
        line.Append("0,0,1.25,");                                                                          // Initial location of the human emulator
        line.Append("0,0.5,0,");                                                                           // Initial rotation of the human emulator
        line.Append(playerHeights.GetPlayerHeight(playerID) + ",");

        // Bindings for current animation clip
        var bindings    = AnimationUtility.GetCurveBindings(clip);
        int numBindings = bindings.Length;

        int i = 0;

        while (i < numBindings)
        {
            // line.Append(binding.propertyName);
            if (isKinect)
            {
                switch (bindings[i].propertyName.Split('.')[0])
                {
                case "m_LocalPosition":
                    // if(Mathf.Abs(curve.keys[0].value)>maxPos) maxPos = curve.keys[0].value;
                    if (bindings[i].path == "Reference/Hips")    // Only add position and location for center and hip
                    {
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value); line.Append(",");
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i + 1]).keys[0].value); line.Append(",");
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i + 2]).keys[0].value); line.Append(",");
                    }
                    i += 3;
                    break;

                case "m_LocalRotation":     // All rotations are scaled by 360 to fit in the range of (-1,1)
                    // if(Mathf.Abs(curve.keys[0].value)>maxRot) maxRot = curve.keys[0].value;
                    if (trackedKinectJoints.Contains(bindings[i].path.Split('/').Last()))
                    {
                        Quaternion currQ = new Quaternion(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 1]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 2]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 3]).keys[0].value);
                        // Vector3 currAngle = currQ.eulerAngles;
                        line.Append(currQ.x); line.Append(",");
                        line.Append(currQ.y); line.Append(",");
                        line.Append(currQ.z); line.Append(",");
                        line.Append(currQ.w); line.Append(",");
                    }
                    i += 4;
                    break;

                case "m_LocalScale":
                    // if(Mathf.Abs(curve.keys[0].value)<minScale) minScale = curve.keys[0].value;
                    // if(bindings[i].path == "") // Add the scale (i.e. Avatar height)
                    // {
                    //     line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value);
                    // }
                    i += 3;
                    break;
                }
            }
            else
            {
                switch (bindings[i].propertyName.Split('.')[0])
                {
                case "m_LocalPosition":
                    if (!ignoredLeapJoints.Contains(bindings[i].path.Split('/').Last()))    // Those joints don't change with time
                    {
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value); line.Append(",");
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i + 1]).keys[0].value); line.Append(",");
                        line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i + 2]).keys[0].value); line.Append(",");
                    }
                    i += 3;
                    break;

                case "m_LocalRotation":     // All rotations are scaled by 360 to fit in the range of (-1,1)
                    if (!ignoredLeapJoints.Contains(bindings[i].path.Split('/').Last()) && !ignoredLeapRotations.Contains(bindings[i].path.Split('/').Last()))
                    {
                        Quaternion currQ = new Quaternion(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 1]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 2]).keys[0].value, AnimationUtility.GetEditorCurve(clip, bindings[i + 3]).keys[0].value);
                        // Vector3 currAngle = currQ.eulerAngles;
                        line.Append(currQ.x); line.Append(",");
                        line.Append(currQ.y); line.Append(",");
                        line.Append(currQ.z); line.Append(",");
                        line.Append(currQ.w); line.Append(",");
                    }
                    i += 4;
                    break;

                case "m_LocalScale":
                    // if(Mathf.Abs(curve.keys[0].value)<minScale) minScale = curve.keys[0].value;
                    // if(bindings[i].path == "") // Add the scale (i.e. Avatar height)
                    // {
                    //     line.Append(AnimationUtility.GetEditorCurve(clip, bindings[i]).keys[0].value);
                    // }
                    i += 3;
                    break;
                }
            }
        }

        sw.WriteLine(line.ToString());
    }