По умолчанию, пирамида видимости расположена симметрично относительно центральной линии камеры, но она не обязательно должна быть такой. Пирамиду можно сделать “наклонной”, т.е., одна сторона будет иметь меньший угол к центральной линии, чем противоположная сторона. Похожий эффект получится, если взять распечатанную фотографию и отделить у неё один из краёв. Это делает перспективу на одном из краёв изображения кажущейся более плотной, передавая смотрящему ощущение, что он находится очень близко к видимому на этом крае объекту. Пример использования - гоночная игра, где пирамида может быть более плоской на нижнем крае. Это бы создало у смотрящего впечатление, что он ближе к дороге, усиливая ощущение скорости.
Так как у класса камеры нет никаких методов для установки степени наклона пирамиды, это можно довольно просто сделать с помощью изменения матрицы проекции:-
using UnityEngine;
using System.Collections;
public class ExampleScript : MonoBehaviour {
void SetObliqueness(float horizObl, float vertObl) {
Matrix4x4 mat = Camera.main.projectionMatrix;
mat[0, 2] = horizObl;
mat[1, 2] = vertObl;
Camera.main.projectionMatrix = mat;
}
}
C# script example
function SetObliqueness(horizObl: float, vertObl: float) {
var mat: Matrix4x4 = camera.projectionMatrix;
mat[0, 2] = horizObl;
mat[1, 2] = vertObl;
camera.projectionMatrix = mat;
}
JS script example
К счастью, чтобы это использовать, вовсе не обязательно разбираться в том, как работает матрица проекции. Значениям horizObl и vertObl присваивается количество соответственно горизонтальной и вертикальной “косости”. Положительное значение сдвигает пирамиду вправо или вверх, таким образом, делая более плоской правую или верхнюю часть пирамиды. Эффект можно явно увидеть, если добавить этот скрипт к камере и переключиться в окно Scene при запущенной игре. Wireframe представление пирамиды видимости камеры будет меняться с изменением значений horizObl и vertObl в инспекторе. Значение 1 или –1 в любой из переменных означает, что одна из сторон пирамиды будет полностью плоской относительно центральной линии. При этом, хоть и такая необходимость и возникает редко, но можно использовать значения вне этого диапазона.