public MaidTransforms(TBody body) { Body = body.GetBone("Bip01"); FootL = body.GetBone("Bip01 L Foot"); FootR = body.GetBone("Bip01 R Foot"); ToesL = new[] { CMT.SearchObjName(FootL, "Bip01 L Toe0"), CMT.SearchObjName(FootL, "Bip01 L Toe1"), CMT.SearchObjName(FootL, "Bip01 L Toe2"), }; ToesR = new[] { CMT.SearchObjName(FootR, "Bip01 R Toe0"), CMT.SearchObjName(FootR, "Bip01 R Toe1"), CMT.SearchObjName(FootR, "Bip01 R Toe2"), }; }
void InitKinectObject(TBody maidBody, Vector3 startingPosition) { kinectPosition = new GameObject(); kinectPosition.transform.position = startingPosition; var kinectCube = GameObject.CreatePrimitive(PrimitiveType.Cube); kinectCube.transform.SetParent(kinectPosition.transform); kinectCube.transform.localPosition = Vector3.zero; kinectCube.transform.localScale = 0.1f * Vector3.one; foreach (var value in Enum.GetValues(typeof(BodyJointType))) { var o = new GameObject(); /*GameObject.CreatePrimitive(PrimitiveType.Sphere);*//*new GameObject($"KinectJoint_{value}");*/ o.transform.SetParent(kinectPosition.transform); //o.transform.localScale = 0.01f * Vector3.one; o.transform.localPosition = 2f * Vector3.forward; var boneDraw = CreateBoneNode($"kinect_{value}"); boneDraw.transform.SetParent(kinectPosition.transform); //boneDraw.transform.localPosition += Vector3.forward * 2f; bodyJoints[(BodyJointType)value] = o.transform; bodyJointGizmos[(BodyJointType)value] = boneDraw.transform; } var gizmo = kinectPosition.AddComponent <GizmoRender>(); gizmo.eAxis = true; gizmo.eRotate = true; gizmo.offsetScale = 0.5f; gizmo.Visible = true; foreach (var jointType in maidBodyToKinectJointsDict) { maidJoints.Add(jointType.Value, maidBody.GetBone(jointType.Key)); } bipJoint = maidBody.GetBone("Bip01"); foreach (var keyValuePair in maidJoints) { Log($"{keyValuePair.Value.name}: Local pos: {keyValuePair.Value.localPosition}; Local rot: {keyValuePair.Value.localRotation}"); } }
void DrawBones() { boneObjects.Clear(); maidTransforms.Clear(); var maid = FindObjectOfType <Maid>(); if (maid == null) { return; } maidBody = maid.body0; foreach (var boneName in boneNames) { var bone = maidBody.GetBone(boneName); if (bone == null) { Error($"Bone {boneName} does not exist!"); continue; } var c = Random.ColorHSV(); Log($"Creating node {boneName}"); var go = CreateBoneNode(boneName); go.SetActive(true); /*GameObject.CreatePrimitive(PrimitiveType.Cube);*/ //go.GetComponent<Renderer>().material = new Material(Shader.Find("Transparent/Diffuse")) {color = c}; //go.transform.position = bone.position - 2.0f * Vector3.left; //go.transform.localRotation = Quaternion.identity; //go.transform.localScale = 0.05f * Vector3.one; //go.SetActive(true); maidTransforms.Add(bone.gameObject); boneObjects.Add(new KeyValuePair <string, GameObject>(boneName, go)); } }