예제 #1
0
    private float CheckCameraClipPlane(Vector3 from, Vector3 to)
    {
        float num = -1f;

        RPG_Camera.ClipPlaneVertexes clipPlaneAt = RPG_Camera.GetClipPlaneAt(to);
        int layerMask = 257;

        if (RPG_Camera.MainCamera != null)
        {
            RaycastHit raycastHit;
            if (Physics.Linecast(from, to, out raycastHit, layerMask))
            {
                num = raycastHit.distance - RPG_Camera.MainCamera.nearClipPlane;
            }
            if (Physics.Linecast(from - base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.UpperLeft, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f))
            {
                num = Vector3.Distance(raycastHit.point + base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, from);
            }
            if (Physics.Linecast(from + base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.UpperRight, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f))
            {
                num = Vector3.Distance(raycastHit.point - base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, from);
            }
            if (Physics.Linecast(from - base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.LowerLeft, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f))
            {
                num = Vector3.Distance(raycastHit.point + base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, from);
            }
            if (Physics.Linecast(from + base.transform.right * RPG_Camera.halfPlaneWidth - base.transform.up * RPG_Camera.halfPlaneHeight, clipPlaneAt.LowerRight, out raycastHit, layerMask) && (raycastHit.distance < num || num == -1f))
            {
                num = Vector3.Distance(raycastHit.point - base.transform.right * RPG_Camera.halfPlaneWidth + base.transform.up * RPG_Camera.halfPlaneHeight, from);
            }
        }
        return(num);
    }
예제 #2
0
    public static RPG_Camera.ClipPlaneVertexes GetClipPlaneAt(Vector3 pos)
    {
        RPG_Camera.ClipPlaneVertexes result = default(RPG_Camera.ClipPlaneVertexes);
        if (RPG_Camera.MainCamera == null)
        {
            return(result);
        }
        Transform transform     = RPG_Camera.MainCamera.transform;
        float     nearClipPlane = RPG_Camera.MainCamera.nearClipPlane;

        result.UpperLeft   = pos - transform.right * RPG_Camera.halfPlaneWidth;
        result.UpperLeft  += transform.up * RPG_Camera.halfPlaneHeight;
        result.UpperLeft  += transform.forward * nearClipPlane;
        result.UpperRight  = pos + transform.right * RPG_Camera.halfPlaneWidth;
        result.UpperRight += transform.up * RPG_Camera.halfPlaneHeight;
        result.UpperRight += transform.forward * nearClipPlane;
        result.LowerLeft   = pos - transform.right * RPG_Camera.halfPlaneWidth;
        result.LowerLeft  -= transform.up * RPG_Camera.halfPlaneHeight;
        result.LowerLeft  += transform.forward * nearClipPlane;
        result.LowerRight  = pos + transform.right * RPG_Camera.halfPlaneWidth;
        result.LowerRight -= transform.up * RPG_Camera.halfPlaneHeight;
        result.LowerRight += transform.forward * nearClipPlane;
        return(result);
    }