/// <summary>
        /// Initialize our objects and setup Dictionaries to hold the conneciton between the EditorCurveBinding and the corresponding float values
        /// </summary>
        void Start()
        {
            xsensAnimator     = GetComponent <XsLiveAnimator>();
            animatorComponent = GetComponent <Animator>();
            humanPoseHandler  = new HumanPoseHandler(animatorComponent.avatar, root);
            bindableCurves    = AnimationUtility.GetAnimatableBindings(gameObject, gameObject);

            fileName = "Actor_" + xsensAnimator.actorID + "_" + fileName;

            SetupBodyCurves();
            SetupFingerCurves();
            SetupRootCurves();

            curves = new AnimationCurve[recordedCurvesCount];

            for (int i = 0; i < curves.Length; i++)
            {
                curves[i] = new AnimationCurve();
            }

            //Allows a user to start recording as soon as unity starts playing
            if (recordFromUnityPlay)
            {
                recording = true;
                StartCoroutine(Record());
            }
        }
Beispiel #2
0
    // Use this for initialization
    void Start()
    {
        mirai         = GameObject.Find("mirai2019_dance");
        miraiAnimator = mirai.GetComponent <Animator>();
        handler       = new HumanPoseHandler(miraiAnimator.avatar, miraiAnimator.transform);
        handler.GetHumanPose(ref miraiPose);
        initZeroPose();
        initUpRightPose();
        musclesStatus();

        angleSlider        = GameObject.Find("Slider");
        angleControlScript = angleSlider.GetComponent <AngleControl>();

        anim = GetComponent <Animator>();
        //Get them_Animator, which you attach to the GameObject you intend to animate.
        m_Animator = gameObject.GetComponent <Animator>();
        //Fetch the current Animation clip information for the base layer
        m_CurrentClipInfo = this.m_Animator.GetCurrentAnimatorClipInfo(0);
        //Access the current length of the clip
        m_CurrentClipLength = m_CurrentClipInfo[0].clip.length;
        //Access the Animation clip name
        m_ClipName = m_CurrentClipInfo[0].clip.name;
        print(m_CurrentClipLength);
        timer = (1 / m_CurrentClipLength) / 60;
    }
        public override void Initialize(GameObject root)
        {
            this.animator = root.GetComponent <Animator>();
            if (this.animator == null)
            {
                this.isInitialized = false;
                return;
            }

            var avatar = this.animator.avatar;

            this.isInitialized = avatar.isHuman && avatar.isValid;

            if (!this.isInitialized)
            {
                return;
            }

            this.humanPoseHandler = new HumanPoseHandler(avatar, this.animator.transform);
            this.humanPoseHandler.GetHumanPose(ref this.humanPose);

            var state  = new TreeViewState();
            var header = new MuscleTableHeader(null);

            this.muscleTreeView = new MuscleTreeView(state, header, this.humanPose, this.humanPoseHandler)
            {
                searchString = SessionState.GetString(searchStringStateKey, "")
            };
            this.searchField = new SearchField();
            this.searchField.downOrUpArrowKeyPressed += this.muscleTreeView.SetFocusAndEnsureSelectedItem;
        }
Beispiel #4
0
    //   !!! Human Pose approach !!!
    void Start()
    {
        // https://forum.unity.com/threads/humanposehandler.430354/

        // get attached Animator controller
        anim = GetComponent <Animator>();

        // run this if you want the indexes to muscles on your character
        LookUpMuscleIndex();

        // TODO keeping body above plane
        //Vector3 current_position = transform.position;

        // get human pose handler
        humanPoseHandler = new HumanPoseHandler(anim.avatar, transform);
        // get human pose
        humanPose = new HumanPose();

        // TODO keeping body above plane
        //humanPose.bodyPosition = current_position;

        // reference pose to pose handler
        humanPoseHandler.GetHumanPose(ref humanPose);

        // set a specific musle; 9: Neck Nod Down-Up
        humanPose.muscles[9] = -20f;
        Debug.Log(humanPose.muscles[9]);

        // use pose information to actually set the pose; doesn't work so far
        humanPoseHandler.SetHumanPose(ref humanPose);
    }
    private void Start()
    {
        m_PoseHandler = new HumanPoseHandler(avatar, target);

        // DEBUG load first clip.
        var clip = m_AnimClipDatabase.GetAnimClipAt(0);

        foreach (var frame in clip.frames)
        {
            var t = frame.time;
            var p = frame.pose;
            poses.Add(new HumanPose
            {
                bodyPosition = new Vector3(p.px, p.py, p.pz),
                bodyRotation = new Quaternion(p.rx, p.ry, p.rz, p.rw),
                muscles      = (float[])p.muscles.Clone()
            });

            timestamps.Add(t);
        }

        linepos = new Vector3[poses.Count];
        linetex = new Texture2D(poses.Count, 1, TextureFormat.RGB24, false);

        for (int i = 0; i < poses.Count; i++)
        {
            linepos[i] = poses[i].bodyPosition;
            linetex.SetPixel(i, 0, Color.green);
        }
        linetex.Apply();
        lineRenderer.positionCount = poses.Count;
        lineRenderer.SetPositions(linepos);
        lineRenderer.material             = new Material(Shader.Find("Self-Illumin/Diffuse"));
        lineRenderer.material.mainTexture = linetex;
    }
Beispiel #6
0
        void Initialize()
        {
            var skeletonBuilder = new SkeletonBuilder(this.transform);

            skeletonBuilder.AddBasicSkeleton(new SkeletonBuilderParams());

            var leftHandRotation = Quaternion.Euler(0, 180, 180);

            skeletonBuilder.UpdateRotation(HumanBodyBones.LeftHand, leftHandRotation);

            var rightHandRotation = Quaternion.Euler(0, 0, 0);

            skeletonBuilder.UpdateRotation(HumanBodyBones.RightHand, rightHandRotation);

            AddHandSkeletonBones(skeletonBuilder, true);  // Left

            AddHandSkeletonBones(skeletonBuilder, false); // Right

            _Skeleton = skeletonBuilder.Skeleton;

            var avatar = AvatarBuilder.BuildHumanAvatar(this.gameObject, skeletonBuilder.GetHumanDescription());

            _SrcPoseHandler = new HumanPoseHandler(avatar, this.transform);

            if (_VisualizeBones && _XYZAxisPrefab != null)
            {
                foreach (var bone in skeletonBuilder.Skeleton.Values)
                {
                    GameObject axis = GameObject.Instantiate(_XYZAxisPrefab, Vector3.zero, Quaternion.identity, bone);
                    axis.transform.localScale    = new Vector3(_AxisObjectScale, _AxisObjectScale, _AxisObjectScale);
                    axis.transform.localPosition = Vector3.zero;
                    axis.transform.localRotation = Quaternion.identity;
                }
            }
        }
    // Update is called once per frame
    void Update()
    {
        if (!isShowEditHandPose)
        {
            return;
        }
        if (animator == null)
        {
            return;
        }

        HumanPose pose    = new HumanPose();
        var       handler = new HumanPoseHandler(animator.avatar, animator.transform);

        handler.GetHumanPose(ref pose); //ポーズ取得

        //ハンドポーズを流し込む
        for (int i = 0; i < pose.muscles.Length; i++)
        {
            var muscle = HumanTrait.MuscleName[i];
            if (TraitLeftHandPropMap.ContainsKey(muscle)) //左手ポーズプロパティ
            {
                pose.muscles[i] = leftHandPoseValueMap[muscle];
            }
            else if (TraitRightHandPropMap.ContainsKey(muscle)) //右手ポーズプロパティ
            {
                pose.muscles[i] = rightHandPoseValueMap[muscle];
            }
        }

        handler.SetHumanPose(ref pose); //ポーズセット
    }
    /****************************************
    ****************************************/

    void Start()
    {
        /********************
        ********************/
        SourcePoseHandler = new HumanPoseHandler(SourceAvatar, this.transform);
        SourcePoseHandler.GetHumanPose(ref HumanPose);
    }
Beispiel #9
0
 private void Start()
 {
     if (target != null && root != null)
     {
         m_SourcePoseHandler = new HumanPoseHandler(target.avatar, root);
     }
 }
        void Start()
        {
            var animator = GetComponent <Animator>();

            if (animator != null && animator.avatar != null)
            {
                m_Avatar      = animator.avatar;
                m_PoseHandler = new HumanPoseHandler(m_Avatar, transform);
                m_PoseHandler.GetHumanPose(ref m_NextPose);
                m_PoseHandler.GetHumanPose(ref m_PreviousPose);
                m_PoseHandler.GetHumanPose(ref m_CurrentPose);

                m_InitialBodyPosition = m_CurrentPose.bodyPosition;
                m_InitialBodyRotation = m_CurrentPose.bodyRotation;

                m_SynchronizeMusclesCount = m_NextPose.muscles.Length;
                if (isServer)
                {
                    for (int i = 0; i < m_SynchronizeMusclesCount; i++)
                    {
                        muscles.Add(0.0f);
                        muscles_half.Add(0);
                    }
                }
            }
        }
Beispiel #11
0
 void SetTargetPoseHandler()
 {
     if (_TargetHumanoidAvatar != null)
     {
         _TargetAnimator    = _TargetHumanoidAvatar.GetComponent <Animator>();
         _TargetPoseHandler = new HumanPoseHandler(_TargetAnimator.avatar, _TargetHumanoidAvatar.transform);
     }
 }
 // Use this for initialization
 void Start()
 {
     hph         = new HumanPoseHandler(GetComponent <Animator>().avatar, root);
     currentPose = new HumanPose();
     hph.GetHumanPose(ref currentPose);
     poseModified = false;
     poseStep     = 0;
 }
Beispiel #13
0
        public HumanPose CreatePose()
        {
            var handler = new HumanPoseHandler(Avatar, transform);
            var pose    = default(HumanPose);

            handler.GetHumanPose(ref pose);
            return(pose);
        }
Beispiel #14
0
 public void Setup()
 {
     if (Avatar == null)
     {
         return;
     }
     m_handler = new HumanPoseHandler(Avatar, transform);
 }
Beispiel #15
0
 void OnDisable()
 {
     if (m_handler != null)
     {
         m_handler.Dispose();
         m_handler = null;
     }
 }
Beispiel #16
0
        private void BuildMecanimAvatarFromQtmTPose()
        {
            var humanBones = new List <HumanBone>(mQtmSkeletonCache.Segments.Count);

            for (int index = 0; index < HumanTrait.BoneName.Length; index++)
            {
                var humanBoneName = HumanTrait.BoneName[index];
                if (mMecanimToQtmSegmentNames.ContainsKey(humanBoneName))
                {
                    var bone = new HumanBone()
                    {
                        humanName = humanBoneName,
                        boneName  = mMecanimToQtmSegmentNames[humanBoneName],
                    };
                    bone.limit.useDefaultValues = true;
                    humanBones.Add(bone);
                }
            }

            var skeletonBones = new List <SkeletonBone>(mQtmSkeletonCache.Segments.Count + 1);

            skeletonBones.Add(new SkeletonBone()
            {
                name     = this.SkeletonName,
                position = Vector3.zero,
                // In QTM default poses are facing +Y which becomes -Z in Unity.
                // We rotate 180 degrees to match unity forward.
                rotation = Quaternion.AngleAxis(180, Vector3.up),
                scale    = Vector3.one,
            });

            foreach (var segment in mQtmSkeletonCache.Segments)
            {
                skeletonBones.Add(new SkeletonBone()
                {
                    name     = this.SkeletonName + "_" + segment.Value.Name,
                    position = segment.Value.TPosition,
                    rotation = segment.Value.TRotation,
                    scale    = Vector3.one,
                });
            }

            mSourceAvatar = AvatarBuilder.BuildHumanAvatar(mStreamedRootObject,
                                                           new HumanDescription()
            {
                human    = humanBones.ToArray(),
                skeleton = skeletonBones.ToArray(),
            }
                                                           );
            if (mSourceAvatar.isValid == false || mSourceAvatar.isHuman == false)
            {
                this.enabled = false;
                return;
            }

            mSourcePoseHandler     = new HumanPoseHandler(mSourceAvatar, mStreamedRootObject.transform);
            mDestiationPoseHandler = new HumanPoseHandler(DestinationAvatar, this.transform);
        }
Beispiel #17
0
        private void BuildMecanimAvatarFromQtmTPose()
        {
            var humanBones = new List <HumanBone>(mQtmSkeletonCache.Segments.Count);

            for (int index = 0; index < HumanTrait.BoneName.Length; index++)
            {
                var humanBoneName = HumanTrait.BoneName[index];
                if (mMecanimToQtmSegmentNames.ContainsKey(humanBoneName))
                {
                    var bone = new HumanBone()
                    {
                        humanName = humanBoneName,
                        boneName  = mMecanimToQtmSegmentNames[humanBoneName],
                    };
                    bone.limit.useDefaultValues = true;
                    humanBones.Add(bone);
                }
            }

            // Set up the T-pose and game object name mappings.
            var skeletonBones = new List <SkeletonBone>(mQtmSkeletonCache.Segments.Count + 1);

            skeletonBones.Add(new SkeletonBone()
            {
                name     = this.SkeletonName,
                position = Vector3.zero,
                rotation = Quaternion.identity,
                scale    = Vector3.one,
            });

            // Create remaining T-Pose bone definitions from Qtm segments
            foreach (var segment in mQtmSkeletonCache.Segments.ToList())
            {
                skeletonBones.Add(new SkeletonBone()
                {
                    name     = this.SkeletonName + "_" + segment.Value.Name,
                    position = segment.Value.TPosition,
                    rotation = Quaternion.identity,
                    scale    = Vector3.one,
                });
            }

            mSourceAvatar = AvatarBuilder.BuildHumanAvatar(mStreamedRootObject,
                                                           new HumanDescription()
            {
                human    = humanBones.ToArray(),
                skeleton = skeletonBones.ToArray(),
            }
                                                           );
            if (mSourceAvatar.isValid == false || mSourceAvatar.isHuman == false)
            {
                this.enabled = false;
                return;
            }

            mSourcePoseHandler     = new HumanPoseHandler(mSourceAvatar, mStreamedRootObject.transform);
            mDestiationPoseHandler = new HumanPoseHandler(DestinationAvatar, this.transform);
        }
        /// <summary>
        /// Creates and returns a PosePreset based on humanoid muscle values
        /// </summary>
        public static PumkinsPosePreset CreatePreset(string poseName, Animator anim)
        {
            HumanPose        hp  = new HumanPose();
            HumanPoseHandler hph = new HumanPoseHandler(anim.avatar, anim.transform);

            hph.GetHumanPose(ref hp);

            return(CreatePreset(poseName, hp));
        }
 public override void OnDestroy()
 {
     if (this.humanPoseHandler == null)
     {
         return;
     }
     this.humanPoseHandler.Dispose();
     this.humanPoseHandler = null;
 }
        protected Quaternion[] RGi; // = Quaternion.Inverse(zeroTestPosesGlobal[t][b]);


        void Start()
        {
            animator = GetComponent <Animator>();
            if (animator != null)
            {
                poseHandler = new HumanPoseHandler(animator.avatar, transform);
            }
            Initialize();
        }
 void Awake()
 {
     animator = GetComponent <Animator>();
     if (animator == null)
     {
         animator = GetComponentInParent <Animator>();
     }
     poseHandler = new HumanPoseHandler(animator.avatar, transform.parent);
 }
Beispiel #22
0
        public static HumanPoseHandler GetHumanPoseHandler(Animator animator)
        {
            if (!_poseHandlers.ContainsKey(animator))
            {
                _poseHandlers[animator] = new HumanPoseHandler(animator.avatar, animator.transform);
            }

            return(_poseHandlers[animator]);
        }
        public bool SetupPreset(string poseName, GameObject avatar, PosePresetMode mode)
        {
            if (!avatar)
            {
                return(false);
            }

            if (mode == PosePresetMode.TransformRotations)
            {
                Transform[] trans = avatar.GetComponentsInChildren <Transform>();

                transformPaths     = new List <string>(trans.Length);
                transformRotations = new List <Vector3>(trans.Length);

                for (int i = 0; i < trans.Length; i++)
                {
                    var    t    = trans[i];
                    string path = Helpers.GetTransformPath(t, avatar.transform, true);

                    if (t && !string.IsNullOrEmpty(path))
                    {
                        transformPaths.Add(path);
                        transformRotations.Add(t.localEulerAngles);
                    }
                }
                return(true);
            }
            else
            {
                Animator anim = avatar.GetComponent <Animator>();

                if (!anim)
                {
                    return(false);
                }

                SerialTransform tr = avatar.transform;
                avatar.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
                HumanPose hp = new HumanPose();
                try
                {
                    HumanPoseHandler hph = new HumanPoseHandler(anim.avatar, anim.transform);
                    hph.GetHumanPose(ref hp);
                }
                catch
                {
                    avatar.transform.SetPositionAndRotation(tr.position, tr.rotation);
                    return(false);
                }
                finally
                {
                    avatar.transform.SetPositionAndRotation(tr.position, tr.rotation);
                    SetupPreset(poseName, hp);
                }
                return(true);
            }
        }
 void Start()
 {
     animator = GetComponent <Animator>();
     if (skeletonRoot == null)
     {
         skeletonRoot = transform;
     }
     poseHandler = new HumanPoseHandler(animator.avatar, skeletonRoot);
 }
Beispiel #25
0
        private static void ReloadPoseVariables(GameObject newAvatar)
        {
            if (newAvatar)
            {
                _avatarAnimator = newAvatar.GetComponent <Animator>();
            }
            else
            {
                _avatarAnimator = null;
            }

            if (bones == null)
            {
                bones = new List <PoseEditorBone>();
            }
            bones.Clear();

            if (newAvatar && AvatarAnimator && AvatarAnimator.isHuman)
            {
                avatarPose = new HumanPose();

                SerialTransform st = newAvatar.transform;
                Vector3         avatarPos;

                avatarPoseHandler = new HumanPoseHandler(AvatarAnimator.avatar, AvatarAnimator.transform);
                avatarPoseHandler.GetHumanPose(ref avatarPose);

                avatarPos = st.position;
                newAvatar.transform.position = avatarPos;

                //Human bone transforms to compare against
                HashSet <Transform> humanBoneTransforms = new HashSet <Transform>();
                for (int i = 0; i < HumanTrait.BoneCount; i++)
                {
                    humanBoneTransforms.Add(AvatarAnimator.GetBoneTransform((HumanBodyBones)i));
                }

                //Get bone human bone root and tip positions
                for (int i = 0; i < HumanTrait.BoneCount; i++)
                {
                    Transform bone = AvatarAnimator.GetBoneTransform((HumanBodyBones)i);
                    if (!bone || bone.childCount == 0)
                    {
                        continue;
                    }
                    for (int j = 0; j < bone.childCount; j++)
                    {
                        Transform child = bone.GetChild(j);
                        if (humanBoneTransforms.Contains(child))
                        {
                            bones.Add(new PoseEditorBone(bone, child));
                        }
                    }
                }
            }
        }
Beispiel #26
0
    private void SetAnim()
    {
        _pose.bodyPosition = _save.pos;
        _pose.bodyRotation = Quaternion.Euler(_save.rot);;
        var target = new HumanPoseHandler(_animator.avatar, _animator.transform);

        target.SetHumanPose(ref _pose);
        //target.GetHumanPose(ref _pose);
        //vec = _pose.bodyPosition;
    }
Beispiel #27
0
 private void Awake()
 {
     m_handler = GetHandler(m_animator);
     if (m_handler == null)
     {
         enabled = false;
         return;
     }
     m_updater = new HandPoseModifier();
 }
Beispiel #28
0
 private void OnEnable()
 {
     avatar = gameObject.GetComponent <Animator>().avatar;
     if (avatar == null)
     {
         Debug.LogError("No Avatar Found!");
         return;
     }
     poseHandler = new HumanPoseHandler(avatar, transform);
 }
Beispiel #29
0
 public HumanPose Record()
 {
     if (targetAvatar != null)
     {
         humanPoseHandler = new HumanPoseHandler(targetAvatar, _gameObject.transform);
         humanPoseHandler.GetHumanPose(ref humanPose);
         Debug.Log(humanPose.muscles);
     }
     return(humanPose);
 }
        // Use this for initialization
        void Awake()
        {
            if (_animator == null)
            {
                Debug.LogError("MotionDataRecorderにanimatorがセットされていません。MotionDataRecorderを削除します。");
                Destroy(this);
            }

            _poseHandler = new HumanPoseHandler(_animator.avatar, _animator.transform);
        }