private void UpdatePose(HumanoidControl humanoid, Bone boneId) { BonePose poseTargetBone = CheckBone(boneId); poseTargetBone.UpdateTranslation(humanoid); poseTargetBone.UpdateRotation(humanoid); }
public static void UpdateScene(HumanoidControl humanoid, ITarget target, PoseMixer poseMixer, ref BonePose selectedBone, Side side = Side.AnySide) { //if (!Application.isPlaying) // poseMixer.ShowPose(humanoid); MixedPose currentPose = poseMixer.GetEditedPose(); if (currentPose == null || !currentPose.isEdited) { Tools.hidden = false; return; } Tools.hidden = true; HumanoidTarget.TargetedBone[] bones = target.GetBones(); int[] controlIds = new int[bones.Length]; Bone[] boneIds = new Bone[bones.Length]; for (int i = 0; i < bones.Length; i++) { if (bones[i] == null || bones[i].bone == null || bones[i].bone.transform == null) { continue; } Handles.FreeMoveHandle(bones[i].bone.transform.position, bones[i].bone.transform.rotation, 0.002F, Vector3.zero, DotHandleCapSaveID); controlIds[i] = lastControlID; boneIds[i] = bones[i].boneId; } FindSelectedHandle(controlIds, boneIds, ref boneIndex); if (boneIndex == -1) { return; } HumanoidTarget.TargetedBone targetedBone = FindTargetedBone(bones, boneIds[boneIndex]); if (targetedBone == null || targetedBone.bone.transform == null) { return; } GUIStyle style = new GUIStyle(); style.normal.textColor = Color.yellow; Handles.Label(targetedBone.bone.transform.position + Vector3.up * 0.01F, targetedBone.name, style); Handles.color = Color.white; switch (Tools.current) { case Tool.Move: selectedBone = currentPose.pose.CheckBone(boneIds[boneIndex], true); Vector3 handlePosition = Handles.PositionHandle(targetedBone.target.transform.position, targetedBone.bone.transform.rotation); targetedBone.target.transform.position = handlePosition; selectedBone.setTranslation = true; selectedBone.SetReferenceLocal(humanoid, side); selectedBone.UpdateTranslation(humanoid, side); break; case Tool.Rotate: selectedBone = currentPose.pose.CheckBone(boneIds[boneIndex], true); Quaternion handleRotation = Handles.RotationHandle(targetedBone.target.transform.rotation, targetedBone.bone.transform.position); targetedBone.target.transform.rotation = handleRotation; selectedBone.setRotation = true; selectedBone.SetReferenceLocal(humanoid, side); selectedBone.UpdateRotation(humanoid, side); break; case Tool.Scale: //Handles.ScaleHandle(selectedBone.transform.localScale, selectedBone.transform.position, selectedBone.transform.rotation, HandleUtility.GetHandleSize(selectedBone.transform.position)); // need to all morphScale first... break; } Handles.BeginGUI(); ResetBoneButton(selectedBone, humanoid); Handles.EndGUI(); }