デフォルトでは、視錐台はカメラの中心線に対して対称に置かれますが、必ずしもそうする必要はありません。錐台を斜めにすることが可能です。これは、中心線で分かれた片側が中心線に対して作る角度が、その反対側が作る角度よりも小さいということです。
これにより画像の片側の景観がより密集し、端に近いオブジェクトが非常に近く見える印象を与えます。カーレースゲームなどがその良い使用例です。錐台の角度が下の端の方で小さいと、視点が路面に近い印象を与え、スピード感が強調されます。
ビルトインレンダーパイプラインでは、斜めの錐台を使用するカメラはフォワード レンダリングパス のみを使用できます。カメラがディファードシェーディングのレンダリングパスを使用するように設定されている場合に、錐台を斜めにすると、Unity はそのカメラに強制的にフォワードレンダリングパスを使用します。
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# スクリプトの例
射影行列がどのような仕組みで動作するか知らなくても、射影行列を使うことができます。horizObl と vertObl の値はそれぞれ、水平と垂直方向の傾斜値を設定します。値が 0 は傾斜がないことを示します。正の値は視錐台を右または上方向に移動します。これにより左または下方向を平坦にします。負の値は視錐台を左または下方向にずらします。これにより右または上方向を平坦にします。このスクリプトをカメラに追加し、ゲームの実行中にシーンビューに切り替えると、効果を直接確認することができます。インスペクターで horizObl と vertObl の値を変更すると、カメラ視錐台のワイヤーフレーム描画は変化します。いずれかの値を 1 あるいは –1 にすると、視錐台の片側が中心線に対して完全に平行になります。これらの値の範囲を超えた値の設定は可能ですが、ほとんど必要なことはありません。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.