示例#1
0
    //set up the body game object in Unity
    private GameObject CreateBodyObject(ulong id)
    {
        GameObject body = new GameObject("Body:" + id);

        body.transform.parent        = kinectSpaceObject.transform;
        body.transform.localPosition = Vector3.zero;
        body.transform.localRotation = Quaternion.identity;

        Dictionary <Kinect.JointType, Transform> jointTrans = new Dictionary <Kinect.JointType, Transform>();

        Dictionary <string, bool> newJoints = new Dictionary <string, bool>();

        for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++)
        {
            newJoints.Add(jt.ToString(), false);

            GameObject jointObject = new GameObject();

            jointObject.name                    = jt.ToString();
            jointObject.transform.parent        = body.transform;
            jointObject.transform.localRotation = Quaternion.identity;

            if (debugJoints)
            {
                //GameObject jointDisplay = GameObject.CreatePrimitive(PrimitiveType.Cube);
                GameObject jointDisplay = GameObject.Instantiate(jointOrienterObject);
                jointDisplay.transform.localScale    = new Vector3(0.1f, 0.1f, 0.1f);
                jointDisplay.transform.parent        = jointObject.transform;
                jointDisplay.transform.localPosition = Vector3.zero;
                jointDisplay.transform.localRotation = Quaternion.identity;

                LineRenderer lr = jointObject.AddComponent <LineRenderer>();
                lr.useWorldSpace = false;
                lr.positionCount = 2;
                lr.material      = BoneMaterial;
                lr.startWidth    = 0.05f;
                lr.endWidth      = 0.05f;
            }

            jointTrans.Add(jt, jointObject.transform);
        }

        jointTransforms.Add(id, jointTrans);
        JointTracked.Add(id, newJoints);


        return(body);
    }
示例#2
0
    void Update()
    {
        if (BodySourceManager == null)
        {
            return;
        }

        _BodyManager = BodySourceManager.GetComponent <BodySourceManager>();
        if (_BodyManager == null)
        {
            return;
        }

        Kinect.Body[] data = _BodyManager.GetData();
        if (data == null)
        {
            return;
        }

        trackedIds.Clear();
        foreach (var body in data)
        {
            if (body == null)
            {
                continue;
            }

            if (body.IsTracked)
            {
                trackedIds.Add(body.TrackingId);
            }
        }



        knownIds = new List <ulong>(_Bodies.Keys);

        // First delete untracked bodies
        foreach (ulong trackingId in knownIds)
        {
            if (!trackedIds.Contains(trackingId))
            {
                Destroy(_Bodies[trackingId]);
                _Bodies.Remove(trackingId);
                _bodyFilters.Remove(trackingId);
                JointTracked.Remove(trackingId);
            }
        }



        foreach (var body in data)
        {
            if (body == null)
            {
                continue;
            }

            if (body.IsTracked)
            {
                if (!_Bodies.ContainsKey(body.TrackingId))
                {
                    _Bodies[body.TrackingId]      = CreateBodyObject(body.TrackingId);
                    _bodyFilters[body.TrackingId] = new KinectJointFilter();                                                                               //initialize filter
                    _bodyFilters[body.TrackingId].Init(filterSmoothing, filterCorrection, filterPrediction, filterJitterRadius, filterMaxDeviationRadius); //set filter values here
                }


                RefreshBodyObject(body, _bodyFilters[body.TrackingId], _Bodies[body.TrackingId], body.TrackingId);
            }
        }

        floor = _BodyManager.GetFloor();
        if (floor != null)
        {
            if (positionFloorBool)
            {
                kinectSpaceObject.transform.localPosition = new Vector3(kinectSpaceObject.transform.localPosition.x, floor.W + floorOffset, kinectSpaceObject.transform.localPosition.z);
            }

            if (!float.IsNaN(floor.Tilt))
            {
                kinectSpaceObject.transform.localEulerAngles = new Vector3(-floor.Tilt, kinectSpaceObject.transform.localEulerAngles.y, kinectSpaceObject.transform.localEulerAngles.z);
            }
        }

        DelegateBodies();
    }