void UpdateBodyData(ARFoundationBody arHumanBody) { var id = this.AddOrUpdateData(arHumanBody); this.AddOrUpdateTrait(id, TraitNames.Pose, arHumanBody.pose); if (BodyUpdated != null) { BodyUpdated(arHumanBody); } }
void RemoveBodyData(ARFoundationBody arHumanBody) { var id = this.RemoveData(arHumanBody); this.RemoveTrait <bool>(id, TraitNames.Body); this.RemoveTrait <Pose>(id, TraitNames.Pose); if (BodyRemoved != null) { BodyRemoved(arHumanBody); } }
ARFoundationBody GetOrAddBody(ARHumanBody arHumanBody) { var trackableId = arHumanBody.trackableId; if (!m_TrackedBodies.TryGetValue(trackableId, out var arfBody)) { arfBody = new ARFoundationBody(trackableId.ToMarsId()); m_TrackedBodies[trackableId] = arfBody; arfBody.UpdateARFoundationBody(arHumanBody, m_BodyRigInstance.transform, m_BodyRigAnimator.humanScale, m_JointToTransform, m_BodyPoseExtractor); } else { arfBody.UpdateARFoundationBody(arHumanBody, m_BodyRigInstance.transform, m_BodyRigAnimator.humanScale, m_JointToTransform, m_BodyPoseExtractor); } return(arfBody); }
internal static void UpdateARFoundationBody(this ARFoundationBody targetBody, ARHumanBody sourceBody, Transform poseRig, float poseScale, Transform[] jointMapping, HumanPoseHandler poseExtractor) { // Pose and transform are the same poseRig.position = sourceBody.pose.position; poseRig.rotation = sourceBody.pose.rotation; // Load transforms into temporary mesh var joints = sourceBody.joints; if (joints.IsCreated) { for (var i = 0; i < ARKitJointIndices.Total; ++i) { var joint = joints[i]; var bone = jointMapping[i]; if (bone != null) { var boneTransform = bone.transform; boneTransform.localPosition = joint.localPose.position; boneTransform.localRotation = joint.localPose.rotation; } } } // Read out pose poseExtractor.GetHumanPose(ref targetBody.BodyPoseInternal); targetBody.pose = new Pose { position = (targetBody.BodyPoseInternal.bodyPosition * poseScale - poseRig.localPosition) * poseRig.lossyScale.y + poseRig.position, rotation = targetBody.BodyPoseInternal.bodyRotation }; targetBody.Height = k_ControlRigHeight * sourceBody.estimatedHeightScaleFactor; targetBody.DeviceData = sourceBody; }