// Update is called once per frame
    void Update()
    {
        // get 1st player
        uint playerID = KinectManager.Instance != null?KinectManager.Instance.GetPlayer1ID() : 0;

        if (playerID <= 0)
        {
            return;
        }

        // set the position in space
        Vector3 posPointMan = KinectManager.Instance.GetUserPosition(playerID);

        posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z;

        // store the initial position
        if (!initialPosInitialized)
        {
            posInitialOffset      = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));
            initialPosInitialized = true;
        }

        transform.position = posInitialOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));

        // update the local positions of the bones
        int jointsCount = (int)KinectWrapper.NuiSkeletonPositionIndex.Count;

        for (int i = 0; i < jointsCount; i++)
        {
            if (_bones[i] != null)
            {
                if (KinectManager.Instance.IsJointTracked(playerID, i))
                {
                    _bones[i].gameObject.SetActive(true);

                    int     joint    = MirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(i): i;
                    Vector3 posJoint = KinectManager.Instance.GetJointPosition(playerID, joint);
                    posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z;
                    Quaternion rotJoint = KinectManager.Instance.GetJointOrientation(playerID, joint, !MirroredMovement);

                    posJoint  -= posPointMan;
                    posJoint.z = -posJoint.z;

                    if (MirroredMovement)
                    {
                        posJoint.x = -posJoint.x;
                    }

                    _bones[i].transform.localPosition = posJoint;
                    _bones[i].transform.localRotation = rotJoint;
                }
                else
                {
                    _bones[i].gameObject.SetActive(false);
                }
            }
        }
    }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        KinectManager manager = KinectManager.Instance;

        // get 1st player
        uint playerID = manager != null?manager.GetPlayer1ID() : 0;

        if (playerID <= 0)
        {
            // reset the pointman position and rotation
            if (transform.position != initialPosition)
            {
                transform.position = initialPosition;
            }

            if (transform.rotation != initialRotation)
            {
                transform.rotation = initialRotation;
            }

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i].gameObject.SetActive(true);

                bones[i].transform.localPosition = Vector3.zero;
                bones[i].transform.localRotation = Quaternion.identity;

                if (SkeletonLine)
                {
                    lines[i].gameObject.SetActive(false);
                }
            }

            return;
        }

        // set the user position in space
        Vector3 posPointMan = manager.GetUserPosition(playerID);

        posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z;

        // store the initial position
        if (initialPosUserID != playerID)
        {
            initialPosUserID = playerID;
            initialPosOffset = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));
        }

        transform.position = initialPosOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));

        // update the local positions of the bones
        for (int i = 0; i < bones.Length; i++)
        {
            if (bones[i] != null)
            {
                int joint = MirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(i): i;

                if (manager.IsJointTracked(playerID, joint))
                {
                    bones[i].gameObject.SetActive(true);

                    Vector3 posJoint = manager.GetJointPosition(playerID, joint);
                    posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z;

                    Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, !MirroredMovement);
                    rotJoint = initialRotation * rotJoint;

                    posJoint -= posPointMan;

                    if (MirroredMovement)
                    {
                        posJoint.x = -posJoint.x;
                        posJoint.z = -posJoint.z;
                    }

                    bones[i].transform.localPosition = posJoint;
                    bones[i].transform.rotation      = rotJoint;
                }
                else
                {
                    bones[i].gameObject.SetActive(false);
                }
            }
        }

        if (SkeletonLine)
        {
            for (int i = 0; i < bones.Length; i++)
            {
                bool bLineDrawn = false;

                if (bones[i] != null)
                {
                    if (bones[i].gameObject.activeSelf)
                    {
                        Vector3 posJoint = bones[i].transform.position;

                        int     parI      = parIdxs[i];
                        Vector3 posParent = bones[parI].transform.position;

                        if (bones[parI].gameObject.activeSelf)
                        {
                            lines[i].gameObject.SetActive(true);

                            //lines[i].SetVertexCount(2);
                            lines[i].SetPosition(0, posParent);
                            lines[i].SetPosition(1, posJoint);

                            bLineDrawn = true;
                        }
                    }
                }

                if (!bLineDrawn)
                {
                    lines[i].gameObject.SetActive(false);
                }
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        KinectManager manager = KinectManager.Instance;

        // get 1st player
        uint playerID = manager != null?manager.GetPlayer1ID() : 0;


        if (playerID <= 0)
        {
            Debug.Log(playerID);
            // reset the pointman position and rotation
            if (transform.position != initialPosition)
            {
                transform.position = initialPosition;
            }

            if (transform.rotation != initialRotation)
            {
                transform.rotation = initialRotation;
            }

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i].gameObject.SetActive(true);

                bones[i].transform.localPosition = Vector3.zero;
                bones[i].transform.localRotation = Quaternion.identity;

                if (SkeletonLine)
                {
                    lines[i].gameObject.SetActive(false);
                }
            }

            return;
        }


        // set the user position in space
        Vector3 posPointMan = manager.GetUserPosition(playerID);

        posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z;

        // store the initial position
        if (initialPosUserID != playerID)
        {
            initialPosUserID = playerID;
            initialPosOffset = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));
        }

        transform.position = initialPosOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));

        // update the local positions of the bones
        for (int i = 0; i < bones.Length; i++)
        {
            if (bones[i] != null)
            {
                int joint = MirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(i): i;

                if (manager.IsJointTracked(playerID, joint))
                {
                    //bones[i].gameObject.SetActive(true);

                    Vector3 posJoint = manager.GetJointPosition(playerID, joint);
                    posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z;

                    Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, !MirroredMovement);
                    rotJoint = initialRotation * rotJoint;

                    posJoint -= posPointMan;

                    if (MirroredMovement)
                    {
                        posJoint.x = -posJoint.x;
                        posJoint.z = -posJoint.z;
                    }

                    bones[i].transform.localPosition = posJoint;
                    bones[i].transform.rotation      = rotJoint;
                }
                else
                {
                    bones[i].gameObject.SetActive(false);
                }

                if (bones[11].transform.position.x != 0)
                {
                    //Debug.Log(bones[11].transform.position.x);
                    HandData = bones[11].transform.position.x;
                }


                dis = HandData - PreHandData;
                if (Mathf.Abs(dis) > 0.2f)
                {
                    Debug.Log(dis);
                }

                dis = 0.0f;
            }
        }
        playerID = 0;
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            returnpage.SetActive(true);
            SceneManager.LoadScene("welcome");
        }
        if (gameover)
        {
            Invoke("gamerestart", 3f);
            return;
        }

        KinectManager manager = KinectManager.Instance;

        // get 1st player
        uint playerID = manager != null?manager.GetPlayer1ID() : 0;

        if (playerID <= 0)
        {
            // reset the pointman position and rotation
            //if(transform.position != initialPosition)
            //{
            //	transform.position = initialPosition;
            //}

            //if(transform.rotation != initialRotation)
            //{
            //	transform.rotation = initialRotation;
            //}

            //for(int i = 0; i < bones.Length; i++)
            //{
            //	bones[i].gameObject.SetActive(true);

            //	bones[i].transform.localPosition = Vector3.zero;
            //	bones[i].transform.localRotation = Quaternion.identity;

            //	if(SkeletonLine)
            //	{
            //		lines[i].gameObject.SetActive(false);
            //	}
            //}

            return;
        }

        // set the user position in space
        Vector3 posPointMan = manager.GetUserPosition(playerID);

        posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z;

        // store the initial position
        if (initialPosUserID != playerID)
        {
            initialPosUserID = playerID;
            initialPosOffset = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, 0));
        }

        transform.position = initialPosOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x * moverate, 0, 0));

        // update the local positions of the bones
        for (int i = 0; i < bones.Length; i++)
        {
            if (bones[i] != null)
            {
                int joint = MirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(i): i;

                if (manager.IsJointTracked(playerID, joint))
                {
                    gamestart       = true;
                    rg.gravityScale = 1;
                    bones[i].gameObject.SetActive(true);

                    Vector3 posJoint = manager.GetJointPosition(playerID, joint);
                    posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z;

                    Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, !MirroredMovement);
                    rotJoint = initialRotation * rotJoint;

                    posJoint -= posPointMan;

                    if (MirroredMovement)
                    {
                        posJoint.x = -posJoint.x;
                        posJoint.z = -posJoint.z;
                    }
                    posJoint.z = 0;
                    rotJoint.x = 0;
                    rotJoint.y = 0;
                    //float degree = (bones[i + 1].transform.localPosition.y - bones[i].transform.localPosition.y) /
                    //    (bones[i + 1].transform.localPosition.x - bones[i].transform.localPosition.x);
                    //double zrotation = Math.Atan(degree)/Math.PI;
                    //rotJoint.z = (float)zrotation;
                    bones[i].transform.localPosition = posJoint;
                    bones[i].transform.rotation      = rotJoint;
                }
                else
                {
                    bones[i].gameObject.SetActive(false);
                }
            }
        }

        if (SkeletonLine)
        {
            for (int i = 0; i < bones.Length; i++)
            {
                bool bLineDrawn = false;

                if (bones[i] != null)
                {
                    if (bones[i].gameObject.activeSelf)
                    {
                        Vector3 posJoint = bones[i].transform.position;

                        int     parI      = parIdxs[i];
                        Vector3 posParent = bones[parI].transform.position;

                        if (bones[parI].gameObject.activeSelf)
                        {
                            lines[i].gameObject.SetActive(true);

                            //lines[i].SetVertexCount(2);
                            lines[i].SetPosition(0, posParent);
                            lines[i].SetPosition(1, posJoint);

                            bLineDrawn = true;
                        }
                    }
                }

                if (!bLineDrawn)
                {
                    lines[i].gameObject.SetActive(false);
                }
            }
        }
    }
    // `te the avatar each frame.
    public void UpdateUnit(uint UserID)
    {
        if (!isLocalPlayer)
        {
            return;
        }

        setLog("Update Unit");

        if (!transform.gameObject.activeInHierarchy)
        {
            return;
        }

        // Get the KinectManager instance
        if (kinectManager == null)
        {
            kinectManager = KinectManager.Instance;
        }

        // move the avatar to its Kinect position
        //MoveAvatar(UserID);


        KinectManager manager = KinectManager.Instance;

        // get 1st player
        uint playerID = manager != null?manager.GetPlayer1ID() : 0;

        if (playerID <= 0)
        {
            // reset the pointman position and rotation
            if (transform.position != initialPosition)
            {
                transform.position = initialPosition;
            }

            if (transform.rotation != initialRotation)
            {
                transform.rotation = initialRotation;
            }


            // 위치초기화
            // initialRotation = MoveObject.rotation;

//            for (int i = 0; i < bones.Length; i++)
//            {
//                bones[i].gameObject.SetActive(true);
//
//                bones[i].transform.localPosition = Vector3.zero;
//                bones[i].transform.localRotation = Quaternion.identity;
//
//                if (SkeletonLine)
//                {
//                    lines[i].gameObject.SetActive(false);
//                }
//            }

            return;
        }

        // set the user position in space
        Vector3 posPointMan = manager.GetUserPosition(playerID);

        // [원본] posPointMan.z = !mirroredMovement ? -posPointMan.z : posPointMan.z;
        posPointMan.z = mirroredMovement ? -posPointMan.z : posPointMan.z;
        // [원본] posPointMan.x = !mirroredMovement ? -posPointMan.x : posPointMan.x;
        posPointMan.x = mirroredMovement ? -posPointMan.x : posPointMan.x;

        // 움직임 반영
        //if (MoveObject != null)
        //{
        //    if (InitMovePosition != null)
        //    {
        //        InitMovePosition = MoveObject.position;
        //    }
        //    Vector3 moveResultPos = MoveObject.position;
        //    moveResultPos.x = InitMovePosition.x + posPointMan.x * MoveScale;
        //    // MoveObject.position = moveResultPos;
        //}

        // store the initial position
        if (initialPosUserID != playerID)
        {
            initialPosUserID = playerID;
            initialPosOffset = transform.position - (verticalMovement ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));
        }

        transform.position = initialPosOffset + (verticalMovement ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));

        // Debug.Log("update the local positions of the bones");
        // update the local positions of the bones

        transform.rotation = initialRotation;
        for (int i = 0; i < bones.Length; i++)
        {
            if (bones[i] != null || true)
            {
                //Debug.Log("bones[i] != null");

                int joint = mirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(i) : i;

                if (manager.IsJointTracked(playerID, joint))
                {
                    //bones[i].gameObject.SetActive(true);

                    Vector3 posJoint = manager.GetJointPosition(playerID, joint);
                    posJoint.z = !mirroredMovement ? -posJoint.z : posJoint.z;

                    // [원본] Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, !mirroredMovement);
                    // 몸통의 축이 반대로 논다...
                    Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, mirroredMovement);
                    rotJoint = initialRotation * rotJoint;


                    // 위치 인식과 관절인식을 달리하기 위해 구분
                    posJoint -= posPointMan;

                    if (mirroredMovement)
                    {
                        posJoint.x = -posJoint.x;
                        posJoint.z = -posJoint.z;
                    }


                    foreach (DictionaryEntry Item in ht_bones)
                    {
                        Transform trans = (Transform)Item.Value;
                        if (i == (int)Item.Key && trans != null)
                        {
                            float scaleFactor = 1;
                            if (scaleFactor >= 0.1)
                            {
                                scaleFactor = ModelScale;
                            }

                            Vector3 result;
                            Vector3 origin = (Vector3)ht_origin[i];
                            result.x = origin.x * 0.3f + posJoint.x * 0.7f;
                            result.y = posJoint.y * 0.7f;
                            result.z = posJoint.z * 0.7f;

                            result.x *= scaleFactor;
                            result.y *= scaleFactor;
                            result.z *= scaleFactor;

                            result.y += 1.0F * scaleFactor;


                            if (i == (int)KinectWrapper.NuiSkeletonPositionIndex.HandRight || i == (int)KinectWrapper.NuiSkeletonPositionIndex.HandLeft)
                            {
                            }
                            else if (i == (int)KinectWrapper.NuiSkeletonPositionIndex.KneeLeft || i == (int)KinectWrapper.NuiSkeletonPositionIndex.KneeRight)
                            {
                                result.y -= 0.3f * scaleFactor;
                            }
                            else
                            {
                                // trans.rotation = rotJoint;
                            }
                            if (MoveObject != null)
                            {
                                trans.position = result + MoveObject.position;
                            }
                            if (horizonalMovement)
                            {
                                var tempVector = trans.position;
                                tempVector.x  += posPointMan.x * MoveScale;
                                trans.position = tempVector;
                            }

                            if (i != (int)KinectWrapper.NuiSkeletonPositionIndex.HandRight && i != (int)KinectWrapper.NuiSkeletonPositionIndex.HandLeft && i != (int)KinectWrapper.NuiSkeletonPositionIndex.Spine)
                            {
                                // trans.rotation = rotJoint;
                            }

                            break;
                        }
                    }
                }
                else
                {
                    //bones[i].gameObject.SetActive(false);
                }
            }
            if (MoveObject != null)
            {
                transform.rotation = MoveObject.rotation;
            }
        }
        for (var boneIndex = 0; boneIndex < bones.Length; boneIndex++)
        {
            //string debugFormat = string.Format("boneIndex: {0}   value: {1}", boneIndex, bones[boneIndex]);
            //Debug.Log(debugFormat);

            if (!bones[boneIndex])
            {
                continue;
            }

            Debug.Log("진입");

            //if (boneIndex2JointMap.ContainsKey(boneIndex))
            //{
            //    KinectWrapper.NuiSkeletonPositionIndex joint = !mirroredMovement ? boneIndex2JointMap[boneIndex] : boneIndex2MirrorJointMap[boneIndex];
            //    TransformBone(UserID, joint, boneIndex, !mirroredMovement);
            //}
            //else if (specIndex2JointMap.ContainsKey(boneIndex))
            //{
            //    // special bones (clavicles)
            //    List<KinectWrapper.NuiSkeletonPositionIndex> alJoints = !mirroredMovement ? specIndex2JointMap[boneIndex] : specIndex2MirrorJointMap[boneIndex];

            //    if (alJoints.Count >= 2)
            //    {
            //        //Vector3 baseDir = alJoints[0].ToString().EndsWith("Left") ? Vector3.left : Vector3.right;
            //        //TransformSpecialBone(UserID, alJoints[0], alJoints[1], boneIndex, baseDir, !mirroredMovement);
            //    }
            //}



            // 디버깅이 가능해야 한다. 좌표 출력 부분
            //if (boneIndex == ((int)HumanBodyBones.Spine))
            //{
            //    Vector3 spinePos = bones[boneIndex].position;
            //    string str_debug = string.Format("Spine({0},{1},{2})", spinePos.x, spinePos.y, spinePos.z);

            //    Debug.Log(str_debug);
            //}
        }
        CmdsyncPlayer();
    }
    // Update is called once per frame
    void Update()
    {
        KinectManager manager = KinectManager.Instance;

        // get 1st player
        uint playerID = manager != null?manager.GetPlayer1ID() : 0;

        if (playerID <= 0)
        {
            // reset the pointman position and rotation
            if (transform.position != initialPosition)
            {
                transform.position = initialPosition;
            }

            if (transform.rotation != initialRotation)
            {
                transform.rotation = initialRotation;
            }

            /*
             * for (int i = 0; i < bones.Length; i++)
             * {
             *  bones[i].gameObject.SetActive(true);
             *
             *  bones[i].transform.localPosition = Vector3.zero;
             *  bones[i].transform.localRotation = Quaternion.identity;
             *
             *  if (SkeletonLine)
             *  {
             *      lines[i].gameObject.SetActive(false);
             *  }
             * }
             */

            return;
        }

        // set the user position in space
        Vector3 posPointMan = manager.GetUserPosition(playerID);

        posPointMan.z = !MirroredMovement ? -posPointMan.z : posPointMan.z;

        // store the initial position
        if (initialPosUserID != playerID)
        {
            initialPosUserID = playerID;
            initialPosOffset = transform.position - (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));
        }

        transform.position = initialPosOffset + (MoveVertically ? posPointMan : new Vector3(posPointMan.x, 0, posPointMan.z));

        // update the local positions of the bones

        int joint = MirroredMovement ? KinectWrapper.GetSkeletonMirroredJoint(3) : 3;

        if (manager.IsJointTracked(playerID, 3))
        {
            //bones[i].gameObject.SetActive(true);

            Vector3 posJoint = manager.GetJointPosition(playerID, joint);
            posJoint.z = !MirroredMovement ? -posJoint.z : posJoint.z;

            Quaternion rotJoint = manager.GetJointOrientation(playerID, joint, !MirroredMovement);
            rotJoint = initialRotation * rotJoint;

            posJoint -= posPointMan;

            if (MirroredMovement)
            {
                posJoint.x = -posJoint.x;
                posJoint.z = -posJoint.z;
            }

            //bones[i].transform.localPosition = posJoint;
            // bones[i].transform.rotation = rotJoint;

            UnityEngine.Debug.Log("head : " + posJoint + " " + rotJoint);


            //else
            //{
            //bones[i].gameObject.SetActive(false);
            //}
        }
    }