Esempio n. 1
0
        protected new void Start()
        {
            if (screenCamera == null)
            {
                screenCamera = GetComponent <Camera>();
            }
            this.DisableAndThrowOnUnassignedReference(screenCamera, "The CameraWorld component requires a reference to a Camera component.");

            if (nearPlaneDistance == 0f && farPlaneDistance == 0f)
            {
                nearPlaneDistance = screenCamera.nearClipPlane;
                farPlaneDistance  = screenCamera.farClipPlane;
            }

            if (wrappingPlaneDistance == 0f)
            {
                wrappingPlaneDistance = (nearPlaneDistance + farPlaneDistance) * 0.5f;
            }

            var frustumPlanes   = GeometryUtility.CalculateFrustumPlanes(screenCamera);
            var leftPlaneIndex  = Geometry.FindMatchingPlane(screenCamera.transform.right, frustumPlanes);
            var rightPlaneIndex = Geometry.FindMatchingPlane(-screenCamera.transform.right, frustumPlanes);
            var lowerPlaneIndex = Geometry.FindMatchingPlane(screenCamera.transform.up, frustumPlanes);
            var upperPlaneIndex = Geometry.FindMatchingPlane(-screenCamera.transform.up, frustumPlanes);
            var wrappingPlane   = new Plane(screenCamera.transform.forward, screenCamera.transform.position + screenCamera.transform.forward * nearPlaneDistance);

            var origin        = Geometry.Intersect(frustumPlanes[leftPlaneIndex], frustumPlanes[lowerPlaneIndex], wrappingPlane);
            var rightPosition = Geometry.Intersect(frustumPlanes[rightPlaneIndex], frustumPlanes[lowerPlaneIndex], wrappingPlane);
            var upperPosition = Geometry.Intersect(frustumPlanes[leftPlaneIndex], frustumPlanes[upperPlaneIndex], wrappingPlane);

            _untransformedOrigin      = transform.InverseTransformPoint(origin);
            _untransformedAxis0Vector = transform.InverseTransformVector(rightPosition - origin);
            _untransformedAxis1Vector = transform.InverseTransformVector(upperPosition - origin);
            _untransformedAxis2Vector = transform.InverseTransformVector(screenCamera.transform.forward * (farPlaneDistance - nearPlaneDistance));

            base.Start();
        }