Inheritance: MonoBehaviour
示例#1
0
    /// <summary>
    /// Draws marker visualizations in the editor viewport for any selected OptitrackRigidBody component.
    /// </summary>
    void OnSceneGUI()
    {
        OptitrackRigidBody rb = target as OptitrackRigidBody;

        if (!rb || rb.StreamingClient == null)
        {
            return;
        }

        rb.StreamingClient._EnterFrameDataUpdateLock();

        try
        {
            OptitrackRigidBodyDefinition rbDef   = rb.StreamingClient.GetRigidBodyDefinitionById(rb.RigidBodyId);
            OptitrackRigidBodyState      rbState = rb.StreamingClient.GetLatestRigidBodyState(rb.RigidBodyId);

            if (rbDef != null && rbState != null)
            {
                for (int iMarker = 0; iMarker < rbDef.Markers.Count; ++iMarker)
                {
                    OptitrackRigidBodyDefinition.MarkerDefinition marker = rbDef.Markers[iMarker];

                    // Effectively treat the RB GameObject transform as a rigid transform by negating its local scale.
                    Vector3 markerPos = marker.Position;
                    markerPos.Scale(new Vector3(1.0f / rb.transform.localScale.x, 1.0f / rb.transform.localScale.y, 1.0f / rb.transform.localScale.z));
                    markerPos = rb.transform.TransformPoint(markerPos);

                    float     kMarkerSize     = 0.02f;
                    Matrix4x4 markerTransform = Matrix4x4.TRS(markerPos, Quaternion.identity, new Vector3(kMarkerSize, kMarkerSize, kMarkerSize));

                    for (int iPass = 0; iPass < m_markerMaterial.passCount; ++iPass)
                    {
                        if (m_markerMaterial.SetPass(iPass))
                        {
                            Graphics.DrawMeshNow(m_markerMesh, markerTransform);
                        }
                    }
                }
            }
        }
        finally
        {
            rb.StreamingClient._ExitFrameDataUpdateLock();
        }
    }
示例#2
0
    private void updateTrackedObjectState(bool active)
    {
        foreach (GameObject g in trackedObjects)
        {
            //Enable or disable physics on tracked object depending on active OptiTrack
            Rigidbody r = g.GetComponent <Rigidbody>();
            if (r != null)
            {
                r.isKinematic = active;
            }
            //Enable or disable tracking script on tracked object depending on active OptiTrack

            OptitrackRigidBody o = g.GetComponent <OptitrackRigidBody>();
            if (o != null)
            {
                o.enabled = active;
            }
        }
    }
    /// <summary>
    /// Draws marker visualizations in the editor viewport for any selected OptitrackRigidBody component.
    /// </summary>
    void OnSceneGUI()
    {
        OptitrackRigidBody rb = target as OptitrackRigidBody;

        if (!rb || rb.StreamingClient == null)
        {
            return;
        }

        rb.StreamingClient._EnterFrameDataUpdateLock();

        try
        {
            OptitrackRigidBodyState rbState = rb.StreamingClient.GetLatestRigidBodyState(rb.RigidBodyId);

            if (rbState != null && rbState.Markers != null)
            {
                for (int iMarker = 0; iMarker < rbState.Markers.Count; ++iMarker)
                {
                    OptitrackMarkerState marker = rbState.Markers[iMarker];
                    Vector3 markerPos           = marker.Position;

                    if (rb.transform.parent)
                    {
                        markerPos = rb.transform.parent.TransformPoint(markerPos);
                    }

                    Matrix4x4 markerTransform = Matrix4x4.TRS(markerPos, Quaternion.identity, new Vector3(marker.Size, marker.Size, marker.Size));
                    Graphics.DrawMesh(m_markerMesh, markerTransform, m_markerMaterial, 0, camera: null, submeshIndex: 0, properties: null, castShadows: false, receiveShadows: false);
                }
            }
        }
        finally
        {
            rb.StreamingClient._ExitFrameDataUpdateLock();
        }
    }
示例#4
0
 // Start is called before the first frame update
 void Start()
 {
     rigidBody = gameObject.GetComponent <OptitrackRigidBody>();
     thread    = new Thread(new ThreadStart(RecvData));
     thread.Start();
 }