Пример #1
0
    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);
            }
        }
    }
Пример #2
0
    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());
    }
Пример #3
0
 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);
            }
        }
    }
Пример #5
0
    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}";
    }
Пример #6
0
    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");
    }
Пример #7
0
    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}");
    }
Пример #9
0
    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());
    }
Пример #10
0
        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));
            }
        }
Пример #12
0
        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;
        }
Пример #13
0
    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);
            }
        }
    }
Пример #14
0
        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);
                }
            }
        }
    }
Пример #16
0
        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);
            }
        }
    }