private void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { HumanBoneController humanBoneController; foreach (var bodyPart in eventArgs.added) { if (!skeletonTracker.TryGetValue(bodyPart.trackableId, out humanBoneController)) { var newSkeletonGameObject = Instantiate(skeletonPrefab, bodyPart.transform); humanBoneController = newSkeletonGameObject.GetComponent <HumanBoneController>(); skeletonTracker.Add(bodyPart.trackableId, humanBoneController); } humanBoneController.InitializeSkeletonJoints(); humanBoneController.ApplyBodyPose(bodyPart, Vector3.zero); } foreach (var bodyPart in eventArgs.updated) { if (skeletonTracker.TryGetValue(bodyPart.trackableId, out humanBoneController)) { humanBoneController.ApplyBodyPose(bodyPart, Vector3.zero); } } foreach (var bodyPart in eventArgs.removed) { if (skeletonTracker.TryGetValue(bodyPart.trackableId, out humanBoneController)) { Destroy(humanBoneController.gameObject); skeletonTracker.Remove(bodyPart.trackableId); } } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { StringBuilder sb = new StringBuilder(); sb.Append("OnHumanBodiesChanged\n"); sb.AppendFormat(" added[{0}]:\n", eventArgs.added.Count); foreach (var humanBody in eventArgs.added) { sb.AppendFormat(" human body: {0}\n", humanBody.ToString()); CreateOrUpdateHead(humanBody); } sb.AppendFormat(" updated[{0}]:\n", eventArgs.updated.Count); foreach (var humanBody in eventArgs.updated) { sb.AppendFormat(" human body: {0}\n", humanBody.ToString()); CreateOrUpdateHead(humanBody); } sb.AppendFormat(" removed[{0}]:\n", eventArgs.removed.Count); foreach (var humanBody in eventArgs.removed) { sb.AppendFormat(" human body: {0}\n", humanBody.ToString()); } Debug.Log(sb.ToString()); }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { this.joints.Clear(); foreach (var humanBody in eventArgs.updated) { AddHumanBody(humanBody); } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { HumanBoneController humanBoneController; loggingText.text = string.Empty; foreach (var humanBody in eventArgs.added) { if (!skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); var newSkeletonGO = Instantiate(skeletonPrefab, humanBody.transform); humanBoneController = newSkeletonGO.GetComponent <HumanBoneController>(); skeletonTracker.Add(humanBody.trackableId, humanBoneController); } humanBoneController.InitializeSkeletonJoints(); humanBoneController.ApplyBodyPose(humanBody, Vector3.zero); if (boneTrackers == null) { boneTrackers = humanBoneController.skeletonRoot.GetComponentsInChildren <BoneTracker>(); foreach (BoneTracker boneTracker in boneTrackers) { loggingText.text += $"Bone: {boneTracker.transform.parent.name} Position: {boneTracker.transform.position}\n"; } } } foreach (var humanBody in eventArgs.updated) { if (skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { humanBoneController.ApplyBodyPose(humanBody, Vector3.zero); } if (boneTrackers != null) { foreach (BoneTracker boneTracker in boneTrackers) { loggingText.text += $"Bone: {boneTracker.transform.parent.name} Position: {boneTracker.transform.position}\n"; } } // detecting if we are beyond the limits before we can spawn a particle (super powers) ApplyPowers(boneTrackers); } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { Destroy(humanBoneController.gameObject); skeletonTracker.Remove(humanBody.trackableId); } } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { HumanBoneController humanBoneController; foreach (var humanBody in eventArgs.added) { if (!skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); var newSkeletonGO = Instantiate(skeletonPrefab, humanBody.transform); humanBoneController = newSkeletonGO.GetComponent <HumanBoneController>(); // add an offset just when the human body is added humanBoneController.transform.position = humanBoneController.transform.position + new Vector3(skeletonOffsetX, skeletonOffsetY, skeletonOffsetZ); skeletonTracker.Add(humanBody.trackableId, humanBoneController); } humanBoneController.InitializeSkeletonJoints(); humanBoneController.ApplyBodyPose(humanBody, Vector3.zero); HumanBodyTrackerUI.Instance.humanBodyText.text = $"{this.gameObject.name} {humanBody.name} Position: {humanBody.transform.position}\n" + $"LocalPosition: {humanBody.transform.localPosition}"; HumanBodyTrackerUI.Instance.humanBoneControllerText.text = $"{this.gameObject.name} {humanBoneController.name} Position: {humanBoneController.transform.position}\n" + $"LocalPosition: {humanBoneController.transform.localPosition}"; } foreach (var humanBody in eventArgs.updated) { if (skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { humanBoneController.ApplyBodyPose(humanBody, Vector3.zero); } HumanBodyTrackerUI.Instance.humanBodyText.text = $"{this.gameObject.name} {humanBody.name} Position: {humanBody.transform.position}\n" + $"LocalPosition: {humanBody.transform.localPosition}"; HumanBodyTrackerUI.Instance.humanBoneControllerText.text = $"{this.gameObject.name} {humanBoneController.name} Position: {humanBoneController.transform.position}\n" + $"LocalPosition: {humanBoneController.transform.localPosition}"; } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (skeletonTracker.TryGetValue(humanBody.trackableId, out humanBoneController)) { Destroy(humanBoneController.gameObject); skeletonTracker.Remove(humanBody.trackableId); } } HumanBodyTrackerUI.Instance.humanBodyTrackerText.text = $"{this.gameObject.name} Position: {this.gameObject.transform.position}\n" + $"LocalPosition: {this.gameObject.transform.localPosition}"; }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { // Currently, the ARKit provider only ever produces one body anchor, so just reference the first float scale = ((eventArgs.added.Count > 0) ? eventArgs.added[0].estimatedHeightScaleFactor : ((eventArgs.updated.Count > 0) ? eventArgs.updated[0].estimatedHeightScaleFactor : Single.NaN)); Debug.Assert(m_ImageInfo != null, "text field is required"); m_ImageInfo.text = scale.ToString("F10"); }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { BoneController boneController; loggingText.text = "Body Tracking Positions: "; foreach (var humanBody in eventArgs.added) { if (!m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); var newSkeletonGO = Instantiate(m_SkeletonPrefab, humanBody.transform); boneController = newSkeletonGO.GetComponent <BoneController>(); m_SkeletonTracker.Add(humanBody.trackableId, boneController); } boneController.InitializeSkeletonJoints(); boneController.ApplyBodyPose(humanBody); if (boneTrackers == null) { boneTrackers = boneController.skeletonRoot.GetComponentsInChildren <BoneTracker>(); foreach (BoneTracker boneTracker in boneTrackers) { loggingText.text += $" Bone: {boneTracker.gameObject.transform.name} LocalRotation : {boneTracker.transform.rotation} \n"; } } } foreach (var humanBody in eventArgs.updated) { if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { boneController.ApplyBodyPose(humanBody); } if (boneTrackers != null) { foreach (BoneTracker boneTracker in boneTrackers) { loggingText.text += $" Bone: {boneTracker.gameObject.transform.name} LocalRotation : {boneTracker.transform.rotation} \n"; } } } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Destroy(boneController.gameObject); m_SkeletonTracker.Remove(humanBody.trackableId); } } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { foreach (ARHumanBody humanBody in eventArgs.added) { UpdateBody(humanBody); } foreach (ARHumanBody humanBody in eventArgs.updated) { UpdateBody(humanBody); } //Debug.Log($"Created {eventArgs.added.Count}, updated {eventArgs.updated.Count}, removed {eventArgs.removed.Count}"); }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { foreach (ARHumanBody humanBody in eventArgs.added) { UpdateBody(humanBody); } foreach (ARHumanBody humanBody in eventArgs.updated) { UpdateBody(humanBody); } //Debug.Log("Bodies: " + (eventArgs.added.Count + eventArgs.updated.Count).ToString()); }
public static byte[] GenerateHumanBodyUpdateData(ARHumanBodiesChangedEventArgs e) { var streamSize = sizeof(byte); // streamType streamSize += CalculateSizeForBodyUpdates(e.added); streamSize += CalculateSizeForBodyUpdates(e.removed); streamSize += CalculateSizeForBodyUpdates(e.updated); var data = new byte[streamSize]; var dstOffSet = 0; SerializationHelper.WriteStreamType(SerializationHelper.StreamType.HumanBody, ref data, ref dstOffSet); WriteHumanBodyUpdates(e.added, ref data, ref dstOffSet); WriteHumanBodyUpdates(e.removed, ref data, ref dstOffSet); WriteHumanBodyUpdates(e.updated, ref data, ref dstOffSet); return(data); }
void ARBodyManagerOnBodiesChanged(ARHumanBodiesChangedEventArgs changedEvent) { foreach (var arHumanBody in changedEvent.removed) { var trackableId = arHumanBody.trackableId; m_TrackedBodies.TryGetValue(trackableId, out var arfBody); m_TrackedBodies.Remove(trackableId); RemoveBodyData(arfBody); } foreach (var arHumanBody in changedEvent.updated) { UpdateBodyData(GetOrAddBody(arHumanBody)); } foreach (var arHumanBody in changedEvent.added) { AddBodyData(GetOrAddBody(arHumanBody)); } }
private void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs args) { info = new ARKitRemotePacket.HumanBodyInfo(); info.added = args.added.Select(humanBody => ToHumanBody(humanBody)).ToArray(); info.updated = args.updated.Select(humanBody => ToHumanBody(humanBody)).ToArray(); info.removed = args.removed.Select(humanBody => (ARKitStream.Internal.TrackableId)humanBody.trackableId).ToArray(); var joints = new Dictionary <TrackableId, byte[]>(); foreach (var humanBody in args.added) { joints.Add(humanBody.trackableId, humanBody.joints.ToRawBytes()); } foreach (var humanBody in args.updated) { joints.Add(humanBody.trackableId, humanBody.joints.ToRawBytes()); } info.joints = joints; }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { Debug.Log("======> 11"); BoneController boneController; foreach (var humanBody in eventArgs.added) { if (!m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); var newSkeletonGO = Instantiate(m_SkeletonPrefab, humanBody.transform); boneController = newSkeletonGO.GetComponent <BoneController>(); m_SkeletonTracker.Add(humanBody.trackableId, boneController); } boneController.InitializeSkeletonJoints(); boneController.ApplyBodyPose(humanBody); } foreach (var humanBody in eventArgs.updated) { if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { boneController.ApplyBodyPose(humanBody); } } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Destroy(boneController.gameObject); m_SkeletonTracker.Remove(humanBody.trackableId); } } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { BoneController boneController; foreach (var humanBody in eventArgs.added) { if (!m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); m_SkeletonObject.SetActive(true); m_SkeletonObject.transform.SetParent(humanBody.transform, false); boneController = m_SkeletonObject.GetComponent <BoneController>(); m_SkeletonTracker.Add(humanBody.trackableId, boneController); } boneController.InitializeSkeletonJoints(); boneController.ApplyBodyPose(humanBody); } foreach (var humanBody in eventArgs.updated) { if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { boneController.ApplyBodyPose(humanBody); } } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Destroy(boneController.gameObject); m_SkeletonTracker.Remove(humanBody.trackableId); } } }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { HumanBoneController[] humanBoneController; //declaring an array of `HumanBoneController` class objects humanBoneController = new HumanBoneController[dress.Length]; //Added events is triggered when the User is detected inside the frame of sight foreach (var humanBody in eventArgs.added) // Iterating through The list of ARHumanBodys added since the last event { for (int i = 0; i < dress.Length; i++) { //Caching the Human Body trackables if (!skeletonTracker[i].TryGetValue(humanBody.trackableId, out humanBoneController[i]))//Adds a new key to the skeleton tracker //if there is a new trackable found { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); //Creates a clone of the apparel var newSkeletonGO = Instantiate(dress[i].apparel, humanBody.transform); clone_temp_var[i].apparel = newSkeletonGO; //Gets the HumanBoneController script humanBoneController[i] = newSkeletonGO.GetComponent <HumanBoneController>(); // The offset is set to (0,0,0), this ensures that the Apparel gets superimposed onto the user humanBoneController[i].transform.position = humanBoneController[i].transform.position + new Vector3(skeletonOffsetX, skeletonOffsetY, skeletonOffsetZ); //adds the newly tracked joint to the dictionary skeletonTracker[i].Add(humanBody.trackableId, humanBoneController[i]); } humanBoneController[i].InitializeSkeletonJoints(); // initalizes the newly added skeleton joints humanBoneController[i].ApplyBodyPose(humanBody, Vector3.zero); //Positioning the apparel w.r.t to the user } } //Update event is triggered if the User moves or rotates foreach (var humanBody in eventArgs.updated) { for (int i = 0; i < dress.Length; i++) { if (skeletonTracker[i].TryGetValue(humanBody.trackableId, out humanBoneController[i])) //if the trackables are present in dictionary { //then it updates the positions of the apparel humanBoneController[i].ApplyBodyPose(humanBody, Vector3.zero); //Positioning the apparel w.r.t to the user } } } //Removed events is triggered if the user leaves the frame of sight foreach (var humanBody in eventArgs.removed) { for (int i = 0; i < dress.Length; i++) { //Deallocating the dictionary and destroying all the apparels when the user leaves the frame if (skeletonTracker[i].TryGetValue(humanBody.trackableId, out humanBoneController[i])) { Destroy(humanBoneController[i].gameObject); skeletonTracker[i].Remove(humanBody.trackableId); } } } }
private void HumanBodyChangedHandler(ARHumanBodiesChangedEventArgs e) { var data = HumanBodySerializer.GenerateHumanBodyUpdateData(e); _udpConnection.Send(data); }
void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs) { BoneController boneController; foreach (var humanBody in eventArgs.added) { if (!m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Debug.Log($"Adding a new skeleton [{humanBody.trackableId}]."); var newSkeletonGO = Instantiate(m_SkeletonPrefab, humanBody.transform); boneController = newSkeletonGO.GetComponent <BoneController>(); m_SkeletonTracker.Add(humanBody.trackableId, boneController); } boneController.InitializeSkeletonJoints(); boneController.ApplyBodyPose(humanBody); } if (leftHand == null) { leftHand = GameObject.Find("RightHandRingStart"); } if (rightHand == null) { rightHand = GameObject.Find("LeftHandRingStart"); } if (leftFoot == null) { leftFoot = GameObject.Find("LeftFoot"); } if (rightFoot == null) { rightFoot = GameObject.Find("RightFoot"); } if (head == null) { head = GameObject.Find("Head"); } UpdateBall(rightHand); UpdateBall(leftHand); UpdateBall(leftFoot); UpdateBall(rightFoot); UpdateBall(head); //syokika //var joints = humanbody //XRHumanBodyJoint joint = joints[i]; foreach (var humanBody in eventArgs.updated) { if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { boneController.ApplyBodyPose(humanBody); } } foreach (var humanBody in eventArgs.removed) { Debug.Log($"Removing a skeleton [{humanBody.trackableId}]."); if (m_SkeletonTracker.TryGetValue(humanBody.trackableId, out boneController)) { Destroy(boneController.gameObject); m_SkeletonTracker.Remove(humanBody.trackableId); } } }