コード例 #1
0
    public void SetFocus(GameObject focus)
    {
        m_FocusedObject    = focus;
        m_FirstTouchedTime = Time.time;
        m_LastMovedTime    = Time.time + kMinSelectionTime;
        //Add the new material, but set it as blank so it doesn't really show up.
        List <Material> materials   = new List <Material>(focus.renderer.materials);
        Material        newMaterial = new Material(m_HighlightMaterial);

        newMaterial.color = new Color(0, 0, 0, 0);
        materials.Add(newMaterial);
        focus.renderer.materials = materials.ToArray();

        LeapTouchable tcb = (LeapTouchable)focus.GetComponent(typeof(LeapTouchable));

        if (tcb != null)
        {
            tcb.PreventOverlappingCollision = true;
        }

        LeapInput.DraggingMode = true;

        LeapInput.DraggingFingers[0] = m_ObjectTouched[0].finger.transform.parent.gameObject;
        LeapInput.DraggingFingers[1] = m_ObjectTouched[1].finger.transform.parent.gameObject;
    }
コード例 #2
0
ファイル: LeapTouchable.cs プロジェクト: Avatarchik/VRAIDS
    void OnCollisionExit(Collision collisionInfo)
    {
        // Do something here
        //Debug.Log ("Touchable OnCollisionExit " + gameObject + " " + collisionInfo.gameObject);

        LeapTouchable tcb = (LeapTouchable)collisionInfo.gameObject.GetComponent(typeof(LeapTouchable));

        if (tcb != null)
        {
            collisionInfo.gameObject.rigidbody.constraints = tcb.OrgRigidBodyConstraints;
        }

        if (collisionInfo.gameObject.tag == "Touchable")
        {
            if (preventOverlappingCollision && !LeapInput.DraggingMode)
            {
                /*Debug.Log(gameObject + " need to prevent overlapping collision of itself and object it is colliding with.");
                 * Debug.Log(gameObject.renderer.bounds.size.y);
                 * Debug.Log(gameObject.renderer.bounds.center.y);
                 * Debug.Log(collisionInfo.gameObject.renderer.bounds.size.y/2);
                 * Debug.Log(collisionInfo.gameObject.renderer.bounds.center.y);*/
                gameObject.rigidbody.isKinematic = true;
                collisionInfo.gameObject.rigidbody.isKinematic = true;
                Vector3 newPos = gameObject.transform.position;
                newPos.y = collisionInfo.gameObject.renderer.bounds.center.y + collisionInfo.gameObject.renderer.bounds.size.y / 2 + 0.2f;
                gameObject.transform.position = newPos;
                collisionInfo.gameObject.rigidbody.isKinematic = false;
                collisionInfo.gameObject.rigidbody.velocity    = new Vector3(0, 0, 0);
                gameObject.rigidbody.isKinematic = false;
                gameObject.rigidbody.velocity    = new Vector3(0, 0, 0);
                preventOverlappingCollision      = false;
            }
        }
    }
コード例 #3
0
    void Update()
    {
        Leap.Frame thisFrame = LeapInput.Frame;
        if (thisFrame == null)
        {
            return;
        }

        if (LeapInput.NumberOfFingers[0] + LeapInput.NumberOfFingers[1] == 10)
        {
            //Application.LoadLevel(Application.loadedLevel);

            foreach (objectTouched touchedObject in m_ObjectTouched)
            {
                touchedObject.finger.collider.isTrigger = false;
            }

            ClearFocus();

            GameObject[] allTouchable = GameObject.FindGameObjectsWithTag("Touchable");

            foreach (GameObject obj in allTouchable)
            {
                LeapTouchable tcb = (LeapTouchable)obj.GetComponent(typeof(LeapTouchable));
                if (tcb != null)
                {
                    tcb.reset();
                }
            }
            return;
        }

        //Remove fingers which have been disabled
        int index;

        while ((index = m_Touching.FindIndex(i => i.collider && i.collider.enabled == false)) != -1)
        {
            m_Touching[index].collider.isTrigger = false;
            m_Touching.RemoveAt(index);
            m_LastPos.RemoveAt(index);
        }

        while ((index = m_ObjectTouched.FindIndex(i => i.finger.collider && i.finger.collider.enabled == false)) != -1)
        {
            m_ObjectTouched[index].finger.collider.isTrigger = false;
            m_ObjectTouched.RemoveAt(index);
        }

        while ((index = m_ObjectTouched.FindIndex(i => i.finger.collider && i.finger.collider.enabled == false)) != -1)
        {
            m_ObjectTouched.RemoveAt(index);
        }

        if (m_LastFrame != null && thisFrame != null && m_Selected)
        {
            float transMagnitude = thisFrame.Translation(m_LastFrame).MagnitudeSquared;
            if (transMagnitude > kMovementThreshold)
            {
                m_LastMovedTime = Time.time;
            }
        }

        //Set selection after the time has elapsed
        if (!m_Selected && m_FocusedObject && (Time.fixedTime - m_FirstTouchedTime) >= kSelectionTime)
        {
            m_Selected = true;
        }

        //Update the focused object's color
        float selectedT = m_FocusedObject != null ? (Time.time - m_FirstTouchedTime) / kSelectionTime : 0.0f;


        //If we have passed the minimum deselection threshold and are past the minimum time to start deselecting...
        if (m_Selected && Time.time - m_FirstTouchedTime > kIdleStartDeselectTime + kSelectionTime)
        {
            selectedT = 1.3f - (((Time.time - m_LastMovedTime) - kIdleStartDeselectTime) / kSelectionTime);
        }
        SetHighlightColor(Color.Lerp(kBlankColor, m_HighlightMaterial.color, selectedT));

        //Process the movement of the selected object.
        if (m_Selected && thisFrame != m_LastFrame)
        {
            //End selection if we don't see any fingers or the scaling factor is going down quickly ( indicating we are making a fist )
            if (CheckEndSelection(thisFrame))
            {
                foreach (objectTouched touchedObject in m_ObjectTouched)
                {
                    touchedObject.finger.collider.isTrigger = false;
                }

                ClearFocus();
            }
            else
            {
                if (CheckShouldMove(thisFrame))
                {
                    DoMovement(thisFrame);
                }
                if (CheckShouldRotate(thisFrame))
                {
                    DoRotation(thisFrame);
                }
                if (CheckShouldScale(thisFrame))
                {
                    DoScaling(thisFrame);
                }
            }
        }


        m_LastFrame = thisFrame;
        for (int i = 0; i < m_Touching.Count; ++i)
        {
            m_LastPos[i] = m_Touching[i].transform.position;
        }
    }