/// <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()); } }
// 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; }
// !!! 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; }
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); }
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); } } } }
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; }
public HumanPose CreatePose() { var handler = new HumanPoseHandler(Avatar, transform); var pose = default(HumanPose); handler.GetHumanPose(ref pose); return(pose); }
public void Setup() { if (Avatar == null) { return; } m_handler = new HumanPoseHandler(Avatar, transform); }
void OnDisable() { if (m_handler != null) { m_handler.Dispose(); m_handler = null; } }
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); }
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); }
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); }
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)); } } } } }
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; }
private void Awake() { m_handler = GetHandler(m_animator); if (m_handler == null) { enabled = false; return; } m_updater = new HandPoseModifier(); }
private void OnEnable() { avatar = gameObject.GetComponent <Animator>().avatar; if (avatar == null) { Debug.LogError("No Avatar Found!"); return; } poseHandler = new HumanPoseHandler(avatar, transform); }
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); }