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()); }