示例#1
0
    ///////////////////
    // MONOBEHAVIOUR //
    ///////////////////
    void OnCollisionEnter(Collision collision)
    {
        // Never collide with any SteamVR tracked objects
        if (collision.gameObject.GetComponent <SteamVR_TrackedObject>())
        {
            return;
        }

        if (armSwinger.preventWallClip == false || armSwinger.wallClipPreventionPaused || armSwinger.preventionsPaused)
        {
            return;
        }

        // If we're already in geometry, unconditionally push back
        if (inGeometry)
        {
            armSwinger.triggerRewind(ArmSwinger.PreventionReason.HEADSET);
            armSwinger.wallClipThisFrame = true;
            return;
        }

        if (armSwinger.currentPreventionReason == ArmSwinger.PreventionReason.NONE || armSwinger.currentPreventionReason == ArmSwinger.PreventionReason.HEADSET)
        {
            if ((groundRayLayerMask.value & 1 << collision.gameObject.layer) != 0)
            {
                foreach (ContactPoint contactPoint in collision.contacts)
                {
                    Vector3 normalOfCollisionPoint = contactPoint.normal;

                    float angleOfCollisionPoint = Vector3.Angle(Vector3.up, normalOfCollisionPoint);

                    //Debug.Log("this.transform=" + this.transform);
                    //Debug.Log("previousCollisionTransform=" + previousCollisionTransform);

                    if (this.transform.position == previousCollisionPosition && this.transform.rotation == previousCollisionRotation)
                    {
                        return;
                    }

                    if (angleOfCollisionPoint >= minAngleToRewindDueToWallClip)
                    {
                        inGeometry = true;
                        armSwinger.triggerRewind(ArmSwinger.PreventionReason.HEADSET);
                        armSwinger.wallClipThisFrame = true;
                        previousCollisionPosition    = this.transform.position;
                        previousCollisionRotation    = this.transform.rotation;
                        return;
                    }
                }
            }
        }
    }
示例#2
0
    ///////////////////
    // MONOBEHAVIOUR //
    ///////////////////
    void OnCollisionEnter(Collision collision)
    {
        // Never collide with any SteamVR tracked objects
        if (collision.gameObject.GetComponent <SteamVR_TrackedObject>())
        {
            return;
        }

        if (armSwinger.preventWallClip == false || armSwinger.wallClipPreventionPaused || armSwinger.preventionsPaused || inGeometry == true)
        {
            return;
        }

        if (armSwinger.currentPreventionReason == ArmSwinger.PreventionReason.NONE || armSwinger.currentPreventionReason == ArmSwinger.PreventionReason.HEADSET)
        {
            if ((groundRayLayerMask.value & 1 << collision.gameObject.layer) != 0)
            {
                Vector3 normalOfCollisionPoint = collision.contacts[0].normal;
                float   angleOfCollisionPoint  = Vector3.Angle(Vector3.up, normalOfCollisionPoint);

                if (angleOfCollisionPoint >= minAngleToRewindDueToWallClip)
                {
                    inGeometry = true;
                    armSwinger.triggerRewind(ArmSwinger.PreventionReason.HEADSET);
                }
            }
        }
    }