Ejemplo n.º 1
0
        public Component_Camera GetCamera()
        {
            var result = OnGetCamera();

            GetCameraEvent?.Invoke(this, ref result);
            return(result);
        }
Ejemplo n.º 2
0
    void ProcessCameras()
    {
        GetCameraEvent camera = new GetCameraEvent();

        Event <GetCameraEvent> .Broadcast(camera);

        Vector3    center   = transform.position;
        Vector3    pos      = camera.camera.transform.position;
        Vector3    forward  = camera.camera.transform.forward;
        Quaternion rotation = camera.camera.transform.rotation;

        float near = camera.camera.nearClipPlane;
        float far  = camera.camera.farClipPlane;

        foreach (var c in m_cameras)
        {
            c.transform.rotation = rotation;

            Vector3 zero = -center / c.scale + center;

            Vector3 cameraPos = pos / c.scale + zero;
            c.transform.position = cameraPos;

            var mat = camera.camera.projectionMatrix;

            var   dir  = Vector3.Project(pos - cameraPos, forward);
            float dist = dir.magnitude;
            if (Vector3.Dot(dir, forward) < 0)
            {
                dist *= -1;
            }

            float currentNear = near + dist;
            float currentFar  = far + dist;

            c.near = currentNear;
            c.far  = currentFar;

            mat.m22 = -(currentFar + currentNear) / (far - near);
            mat.m23 = -(2 * currentFar * currentNear) / (far - near);

            c.camera.projectionMatrix = mat;
        }
    }
Ejemplo n.º 3
0
 void GetCamera(GetCameraEvent e)
 {
     e.camera = m_camera;
 }