Пример #1
0
        private void UpdatePose(HumanoidControl humanoid, Bone boneId)
        {
            BonePose poseTargetBone = CheckBone(boneId);

            poseTargetBone.UpdateTranslation(humanoid);
            poseTargetBone.UpdateRotation(humanoid);
        }
Пример #2
0
        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();
        }