Beispiel #1
0
 void Awake()
 {
     if (Instance == null)
     {
         Instance = this;
         DontDestroyOnLoad(gameObject);
         StartClient();
     }
     else
     {
         Destroy(gameObject);
     }
 }
Beispiel #2
0
    void Update() //prev.fixed
    {
        if (tauTrackerInstance == null)
        {
            tauTrackerInstance = TauTrackerClient.Instance;
        }
        else
        {
            SensorData sensorData = tauTrackerInstance.GetSensorData(sensor);
            if (sensorData != null && sensorData.active)
            {
                Vector3    sens_pos         = sensorData.GetPosition();
                Quaternion sens_rot         = sensorData.GetRotation();
                float      pos_factor       = tauTrackerInstance.trackerPositionFactor;
                Transform  parent_transform = transform.parent.transform;

                transform.localPosition = (
                    parent_transform.rotation * sens_pos / pos_factor +
                    transform.forward * forwardShift / 10 +
                    transform.up * upShift / 10 +
                    transform.right * rightShift / 10
                    );

                transform.SetPositionAndRotation(
                    parent_transform.position +
                    (
                        parent_transform.rotation * sens_pos / pos_factor +
                        transform.forward * forwardShift / 10 +
                        transform.up * upShift / 10 +
                        transform.right * rightShift / 10
                    ),
                    parent_transform.rotation * sens_rot
                    );

                /*
                 * rb.MovePosition((
                 *  transform.parent.transform.position + transform.parent.transform.rotation * sensorData.GetPosition() / TauTrackerClient.Instance.trackerPositionFactor +
                 *  rb.transform.forward * forwardShift / 10 +
                 *  rb.transform.up * upShift / 10 +
                 *  rb.transform.right * rightShift / 10)
                 *  );
                 * rb.MoveRotation(transform.parent.transform.rotation * sensorData.GetRotation());
                 */
                Vector3 bone_base = Vector3.zero;

                switch (InverseKinematicsType)
                {
                case IKEnum.Disable:
                    break;

                case IKEnum.DebugLines:
                    foreach (Vector3 bone_tip in sensorData.ik_data)
                    {
                        if (bone_base == Vector3.zero)
                        {
                            bone_base = bone_tip;
                        }
                        else
                        {
                            var convertedBase = ConvertToUnityNotion(bone_base) / pos_factor;
                            var convertedTip  = ConvertToUnityNotion(bone_tip) / pos_factor;
                            Debug.DrawLine(convertedBase, convertedTip, Color.red);
                            bone_base = Vector3.zero;
                        }
                    }
                    break;

                case IKEnum.CapsulePrimitive:
                    if (sensorData.ik_data != null && sensorData.ik_data_counter > 0)
                    {
                        int counter = 0;
                        foreach (Vector3 bone_tip in sensorData.ik_data)
                        {
                            if (bone_base == Vector3.zero)
                            {
                                bone_base = bone_tip;
                            }
                            else
                            {
                                var convertedBase = ConvertToUnityNotion(bone_base) / pos_factor;
                                var convertedTip  = ConvertToUnityNotion(bone_tip) / pos_factor;

                                var IKCollection = parent_transform.Find("IKCollection");
                                if (IKCollection == null)
                                {
                                    GameObject container = new GameObject("IKCollection");
                                    container.transform.parent = parent_transform;
                                    IKCollection = container.transform;
                                }

                                var halfWayVector = (convertedBase + convertedTip) * 0.5f;
                                if (IKobjList.Count <= counter)
                                {
                                    GameObject container = new GameObject("IKBasicFragment");
                                    container.transform.parent = IKCollection;
                                    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                                    cube.transform.parent = container.transform;
                                    cube.transform.Rotate(new Vector3(-90, 0, 0));
                                    cube.transform.localScale = new Vector3(
                                        0.015f,
                                        (convertedTip - convertedBase).magnitude * 0.68f,
                                        0.015f);
                                    cube.transform.GetComponent <CapsuleCollider>().enabled = false;

                                    //Rigidbody gameObjectsRigidBody = cube.AddComponent<Rigidbody>(); // Add the rigidbody.
                                    //gameObjectsRigidBody.isKinematic = true;
                                    //gameObjectsRigidBody.useGravity = false;

                                    IKobjList.Add(container);
                                }

                                IKobjList[counter].transform.position = (parent_transform.position + parent_transform.rotation * halfWayVector);
                                IKobjList[counter].transform.LookAt((parent_transform.position + parent_transform.rotation * convertedTip));

                                bone_base = bone_tip;
                                counter++;
                            }
                        }
                    }
                    break;

                default:
                    break;
                }
            }
        }
    }