通常、視錐台はカメラの中心線に対して対称に置かれますが、必ずしもそうする必要はありません。錐台を “斜め” にすることが可能です。これは、中心線で分かれた片側が中心線に対して作る角度が、その反対側が作る角度よりも小さいということです。これにより画像の片側の景観がより密集し、視点が端に近いオブジェクトに非常に近い印象を与えます。カーレースゲームなどがその良い使用例です。錐台の角度が下の端の方で小さいと、視点が路面に近い印象を与え、スピード感が強調されます。
Camera コンポーネントには、特別に錐台の傾斜を設定するための機能はありませんが、カメラの Physical Camera プロパティーを有効にし、レンズシフトを適用するか、または、スクリプトを加えてカメラの射影行列を変更することができます。
カメラの Physical Camera (物理カメラ) プロパティーを有効にして、Lens Shift (レンズシフト) を表示します。これを使用して、X 軸と Y 軸に沿ってカメラの焦点中心をオフセットし、描画した画像の歪みを最小限に抑えることができます。
レンズをシフト (移動) すると、シフトの方向とは反対側の錐台の角度が減少します。例えば、レンズを上にシフトすると、錐台の底とカメラの中心線との間の角度が小さくなります。
Physical Camera のオプションの詳細は、Physical Camera を参照してください。
個々の Physical Camera プロパティーの設定の詳細は、Camera コンポーネント を参照してください。
次のスクリプト例は、カメラの射影行列を変更することによって斜めの錐台を素早く設定する方法を示しています。ゲームが再生モードを実行している間だけ、スクリプトの効果が得られます。
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# スクリプトの例
function SetObliqueness(horizObl: float, vertObl: float) {
var mat: Matrix4x4 = camera.projectionMatrix;
mat[0, 2] = horizObl;
mat[1, 2] = vertObl;
camera.projectionMatrix = mat;
}
JS スクリプトの例
うれしいことに、射影行列がどのような仕組みで動作するか知らなくても、射影行列を使うことができます。horizObl と vertObl の値はそれぞれ、水平と垂直方向の傾斜値を設定します。値が 0 は傾斜がないことを示します。正の値は視錐台を右または上方向に移動します。これにより左または下方向を平坦にします。負の値は視錐台を左または下方向にずらします。これにより右または上方向を平坦にします。このスクリプトをカメラに追加し、ゲームの実行中にシーンビューに切り替えると、効果を直接確認することができます。インスペクターで horizObl と vertObl の値を変更すると、カメラ視錐台のワイヤーフレーム描画は変化します。いずれかの値を 1 あるいは –1 にすると、視錐台の片側が中心線に対して完全に平行になります。これらの値の範囲を超えた値の設定は可能ですが、ほとんど必要なことはありません。
2018–10–05 Page amended
Lens Shift は Unity 2018.2 で追加