この記事はUnityのコンポーネントCameraについて解説した記事です。
- <Cameraとは>
- <Cameraのインスペクター>
- <Physical Camera>
- <Cameraのスクリプトの使い方>
- allCameras
- allCamerasCount
- current
- main
- onPostRender
- onPreCull
- onPreRender
- activeTexture
- actualRenderingPath
- allowDynamicResolution
- allowHDR
- allowMSAA
- areVRStereoViewMatricesWithinSingleCullTolerance
- aspect
- backgroundColor
- cameraToWorldMatrix
- cameraType
- clearFlags
- clearStencilAfterLightingPass
- commandBufferCount
- cullingMask
- cullingMatrix
- depth
- depthTextureMode
- eventMask
- farClipPlane
- fieldOfView
- forceIntoRenderTexture
- layerCullDistances
- layerCullSpherical
- nearClipPlane
- nonJitteredProjectionMatrix
- opaqueSortMode
- orthographic
- orthographicSize
- pixelHeight
- pixelRect
- pixelWidth
- previousViewProjectionMatrix
- projectionMatrix
- rect
- renderingPath
- scaledPixelHeight
- scaledPixelWidth
- scene
- stereoActiveEye
- stereoConvergence
- stereoEnabled
- stereoSeparation
- stereoTargetEye
- targetDisplay
- targetTexture
- transparencySortAxis
- transparencySortMode
- useJitteredProjectionMatrixForTransparentRendering
- useOcclusionCulling
- velocity
- worldToCameraMatrix
- AddCommandBuffer
- CalculateFrustumCorners
- CalculateObliqueMatrix
- CopyFrom
- GetCommandBuffers
- GetStereoNonJitteredProjectionMatrix
- GetStereoProjectionMatrix
- GetStereoViewMatrix
- RemoveAllCommandBuffers
- RemoveCommandBuffer
- RemoveCommandBuffers
- Render
- RenderToCubemap
- RenderWithShader
- ResetAspect
- ResetCullingMatrix
- ResetCullingMatrix
- ResetProjectionMatrix
- ResetReplacementShader
- ResetStereoProjectionMatrices
- ResetStereoViewMatrices
- ResetTransparencySortSettings
- ResetWorldToCameraMatrix
- ScreenPointToRay
- ScreenToViewportPoint
- ScreenToWorldPoint
- SetReplacementShader
- SetStereoProjectionMatrix
- SetStereoViewMatrix
- SetTargetBuffers
- ViewportPointToRay
- ViewportToScreenPoint
- ViewportToWorldPoint
- WorldToScreenPoint
- WorldToViewportPoint
- GetAllCameras
- OnPostRender
- OnPreCull
- OnPreRender
- OnRenderImage
- OnRenderObject
- OnWillRenderObject
- CameraCallback
<Cameraとは>
Unityでシーン上に設置されたオブジェクトを映してレンダリングする為のコンポーネントです。
普通に使えば、映したものをゲーム画面に表示させる事ができます。
↓のようにシーンビューで映したものがゲームビューに表示されています。
また、単に映したものをゲーム画面に表示するだけではなく、画像データとして取り込んで加工したりと様々な使い方ができます。
<Cameraのインスペクター>
Clear Flags
カメラが何も映していない場所をどのように処理するのかを決定します。
例えば↓のようにオブジェクトを置いてカメラで映した場合
↓の真っ黒な部分はオブジェクトが何もないエリアになります。
↑の真っ黒な部分をどのようにするかを決定します。
・Skybox
カメラが映していない場所にスカイボックスと言われるシーンを囲むように表示される背景を描画します。
デフォルトでは↓のようになっていると思います。
このスカイボックスはLightning Settingで設定されているものが表示されます。
スカイボックスという名前がついてますが、必ずしも空であるとは限りません。設定したマテリアルの内容が画面全体を覆うような感じで表示されるものです。
設定したマテリアルを変える事で↓のようにしたり色々できます。
マテリアルがスカイボックスに対応したものでない場合は真っ黒になるので注意してください。
・Background
Skyboxが設定されていない時、背景がこの色になります。
Skyboxが設定されている場合は特に意味はありません。
・Solid Color
Backgroundというパラメータがすぐ下に表示されると思います。
カメラが描画していない場所をBackgroundで設定した色にします。
・Depth Only
カメラが映していない場所に何もない状態にします。
普通に使うと↓のようになります。
オブジェクトがない場所が真っ暗になって何も描画されていません。
Solid Colorで真っ黒にすればいいのでは?と思うかもしれませんが、このモードの真骨頂はカメラを複数台置いた場合です。
↓のような感じで複数台カメラを置いたとします。
すると↓のように表示されます。
オブジェクトが映っていない場所に何かを映す設定にしていた場合は完全に塗りつぶされてしまいます。例えば1台目のカメラが映した内容を2台目のカメラで塗り潰してしまうみたいな感じです。
Depth Onlyにしておくと塗り潰しが発生しないので複数台カメラを置いたとしても2台目のカメラが映した後ろに1台目のカメラの内容が描画されます。
・Don’t Clear
前のレンダリング内容を消しません。
普通にDon’t Clearで映すと↓のようになります。
またしても背景が真っ黒になっていますが、これはオブジェクトが動いていないからこうなっているだけでオブジェクトを動かすと↓のようになります。
これは単に横にスライドさせただけなのですが、こうなりました。
前回映した内容を消さずに描画するので前の状態が残り続けます。
↑では横にスライドさせた為に、前の状態が残り続けて残像のようになっているわけです。というか正真正銘の残像です。
前の像が残っている為こうなっているわけですね。
Culling Mask
チェックが入っているレイヤーのオブジェクトのみをカメラに映します。
レイヤーは各種ゲームオブジェクトの右上にあるLayerで指定しているものになります。
チェックが入っているレイヤーのゲームオブジェクトがカメラに映って、チェックが入っていないレイヤーのゲームオブジェクトはカメラに映りません。
Everythingを選択すると全てのレイヤーにチェックが入り、Nothingを選択すると全てのレイヤーのチェックが外れます。
Projection
カメラの映し方をどうするのかを設定します。
・Perspective
遠近感のある映し方をします。
・Field of View
画角を調節します。
カメラが映すことのできる角度の範囲を調節できるパラメータです。
Field of Viewが60の時↑のようになります。
この値を小さくして画角を狭くすると↓のようになります。
↑Filed of Viewを10にしてみました。
画角が狭くなって見える範囲が小さくなっていることがわかります。オブジェクトを動かしてはいませんが、画面は拡大されているように見えます。
逆に大きくすると↓のようになります。
↑Filed of Viewを130にしてみました。
画角が広くなって見える範囲も広くなりました。オブジェクトを動かしてはいませんが、画面では小さく見えます。
・Physical Camera
この項目にチェックを入れると、現実にあるようなカメラと同じ原理で描画します。
解説が長くなるので詳しくは↓↓の方に載せてあります。
・Orthographic
遠近感の無い映し方をします。
↑Perspectiveの時とカメラの位置は動かしていません。
遠近感がなくなるので、Orthographicに設定するとカメラから離れても見え方が同じになります。
2D的な表現に使用される場合が多いです。
・Size
カメラの見える範囲を調節します。
↓はSizeが1の時です。
Sizeを2にすると↓のようになります。
カメラが映している範囲が広がりました。範囲が広がった事によってオブジェクトは小さく映ります。
Clipping Planes
Nearでカメラが映す一番近い距離を指定します。最低値は0.01です。
Farでカメラが映す一番遠い距離を指定します。最低値は0.02です。
Viewport Rect
このカメラが画面に描画する範囲を決定します。
画面の左下を基準にXとYで画面が始まる距離を表して、WとHで画面の横幅と縦幅を表します。
ここで使用される値は正規化された値になります。
XとYは0で画面の左下、1で右上になり、WとHは0で描画されず、1で画面いっぱいに描画されます。
例えば↓のような設定をしたとします。
すると↓のように表示されます。
これは↓のようにViewport Rectによって、どれくらいの割合と位置にカメラで映した内容を画面に映すのかを決めています。
このパラメータを利用する事によってゲーム中に複数の画面を描画したり、ミニマップを作ってみたりと色々な使い方ができます。
Depth
この値が小さい順にカメラが描画されます。
複数台カメラを使用している場合、描画する順番を整理するのに使用されます。
↓顔がアップで映っているのがDepth1で奥にCubeに乗って見えるのがDepth0になってます。
Cubeに乗っている方のClear FlagsがSkyboxの設定になっていて、顔のアップがDepth Onlyです。
値が小さい順で描画されるので、まずCubeに乗っている方が描画されて、顔のアップが描画されています。
ちなみにお互いのDepthの値を入れ替えると↓のようになります。
逆になったのでまず顔のアップが描画されて、その後Cubeに乗っている方が描画されます。
Cubeに乗っている方はClear FlagsがSkyboxなので、後ろの顔のアップのカメラの内容を無視してスカイボックスで塗り潰してしまっています。
このようにカメラの描画順を指定することができます。
同じ値にしておくとどっちから描画されるのかランダムになるのでカメラ間で同じ値にはしないようにしましょう。(描画範囲が同じな場合)再起動したり実機に入れたりした時に逆になったりします。
Rendering Path
このカメラのレンダリングパスを変更します。
User Graphics Settingsにチェックが入っているとProject SettingsのGraphicsの項目に従います。
別の項目を設定した場合、設定したレンダリングパスで描画します。
Target Texture
このカメラが映したものを画面ではなく設定したテクスチャに描画します。
ここに設定できるのはRender Textureという種類のテクスチャのみになります。
レンダーテクスチャはプロジェクトウィンドウで右クリックすることで作ることができます。
カメラでの描画内容をテクスチャとして扱うことができるので様々な使い方ができます。
Occlusion Culling
オクルージョンカリングを実行するかどうかを設定します。
カメラは範囲外の部分を描画しないことで軽量化してますが、遮蔽物などに隠れていて見えないものまで描画してしまいます。
オクルージョンカリングを行うことで、遮蔽物などで見えなくなってしまったものは描画しません。
ただし、カメラのこの項目にチェックが入っているだけでは意味がなく、シーン上でオクルージョンカリングを行う範囲をベイクしてあげる必要があります。
Allow HDR
HDRというのは、High Dynamic Rangeの略でより広い明るさの幅を表現できる機能の事です。
この項目にチェックを入れる事でカメラがHDRに対応します。
Allow MSAA
MSAAというのは、MultiSamplingの略でアンチエイリアスの手法の一つです。
簡単に言うとカメラが映した結果が荒くなってジャギジャギになってしまった場合、それを滑らかに緩和することができます。
Deferredレンダリングの設定になっている場合はMSAAを使うことができません。
この項目にチェックが入っているとProject SettingsのQualityタブのAnti Aliasingで選択された項目が適用されます。
Allow Dynamic Resolution
動的にこのカメラの解像度を変更する事を許可します。
主に処理が重くなった時などに、一時的に解像度を下げる場合に使用します。
これにチェックが入っていると動的な解像度の変更が可能になるだけで、処理自体は自分で行う必要があります。
Physical Camera
これにチェックを入れると現実にあるようなカメラと同じ原理で描画します。
詳しくは↓で解説しています。
<Physical Camera>
Unity2018.2から追加された機能で、現実にあるようなカメラと同じ原理で描画します。
この項目にチェックを入れると↓のようにインスペクターに項目が増えます。
描画の手法が変更されるので考え方が↓のようになります。
Focal Length
焦点とイメージセンサーの距離を表します。
近いほど多くの範囲の光を受けれるので映像が広くとられます。小さくすると広角レンズのように扱えます。
逆に遠くすると光を受けられる範囲が少しになるので映像が狭くなります。要するにズームされます。大きくすると望遠レンズのように扱えます。
連動してField of Viewが動きます。
Sensor Type
Sensor Sizeのテンプレートです。
現実にあるイメージセンサーを選択することができます。これを変更しても単にSensor Sizeの値が変わるだけです。
8mm・・・ X 4.8 Y 3.5
Super 8mm・・・ X 5.79 Y 4.01
16mm・・・ X 10.26 Y 7.49
Super 16mm・・・ X 12.52 Y 7.41
35mm 2-perf・・・ X 21.95 Y 9.35
35mm Academy・・・ X 21 Y 15.2
Super-35・・・ X 24.89 Y 18.66
65mm ALEXA・・・ X 54.12 Y 25.59
70mm・・・ X 70 Y 51
70mm IMAX・・・ X 70.41 Y 52.63
Custom・・・↑以外の値にすると勝手にこれになります
Sensor Size
イメージセンサーのサイズを変更します。
この値を変更するとカメラの画角も変わります。画角の変わり方はGate Fitの設定によります。
シーンビューのカメラのラインの奥にセンサーサイズの枠線が表示されています。
Lens Shift
シフトレンズを使っているかのように扱えます。カメラの向きを変えずに映す向きを変更することができます。
Lens Shift X 0, Y 0 (シフトなし)
Lens Shift X -1, Y 0 (シフト有り)
Gate Fit
画面の解像度に合わせてアスペクト比をどこを基準に変更するのかを決定します。
この項目はUnity2018.3から追加されました。
・Vertical
解像度の計算を縦基準にします。
実際の画面の縦幅に、カメラが映している縦幅が合うようにします。
横の部分はアスペクト比によって可変します。つまり横で見切れたりといった事が発生します。
・Horizontal
解像度の計算を横基準にします。
実際の画面の横幅に、カメラが映している横幅が合うようにします。
縦の部分はアスペクト比によって可変します。つまり縦で見切れたりといった事が発生します。
・Fill
画面とセンサーサイズに合わせてアスペクト比を変更します。
センサーサイズ内に収まるようになります。
・Overscan
画面とセンサーサイズに合わせてアスペクト比を変更します。
必ずセンサー全体が画面に収まるようになります。
・None
センサーサイズに映っているものをそのまま描画します。
センサーサイズと画面のサイズが合っていない場合、絵が伸びます。
<Cameraのスクリプトの使い方>
名前空間 | UnityEngine |
型 | class |
継承 | Behavior |
allCameras
シーン内で有効なカメラを全て返します。
無効になっているカメラは受け取れないので注意してください。
読み取り専用です。
型 Camera[]型
○ 使い方
全てのカメラを取得したい時に使用します。
//全てのカメラを取得 Camera[] allCamera = Camera.allCameras;
allCamerasCount
シーン内で有効なカメラの数を返します。
読み取り専用です。
型 int型
○ 使い方
全てのカメラの数を取得したい時に使用します。
//全てのカメラを取得 Camera[] allCamera = Camera.allCameras; for(int i = 0; i < Camera.allCamerasCount; ++i) { Debug.Log(allCamera[i].name); //カメラの名前を1つずつ表示 }
current
現在レンダリングされているカメラを返します。
読み取り専用です。
型 Camera型
○ 使い方
この変数を普通の状態で使用することはありません。
OnRederImageやOnPreRender,OnPostRenderなどのレンダリングに関係するイベント関数内で使用されます。
void OnWillRenderObject() { if (Camera.current.cameraType == CameraType.SceneView) { Debug.Log("このオブジェクトはシーンビューに映っています"); } }
main
シーン上のMainCameraのタグになっているカメラを返します。
読み取り専用です。
型 Camera型
○ 使い方
メインカメラを取得したい場合に使用します。
複数存在する場合どれが呼ばれるかランダムになるので注意してください。(再起動したり、機種によって変わったりする)
//メインカメラ取得 Camera came = Camera.main;
onPostRender
カメラがレンダリングを終えた後に発生するイベントです。
型 Camera.CameraCallback型
○ 使い方
カメラがレンダリングを終えた後に何か処理をしたい場合に使用します。
void Start() { Camera.onPostRender += EndRendering; } public void EndRendering(Camera came) { Debug.Log(came.name + "のレンダリングが終わりました"); }
onPreCull
カメラがカリングを開始する前に発生するイベントです。
型 Camera.CameraCallback型
○ 使い方
カメラがカリングを開始する前に何か処理をしたい場合に使用します。
void Start() { Camera.onPreCull += BeforeCulling; } public void BeforeCulling(Camera came) { Debug.Log(came.name + "がこれからカリングを行います"); }
onPreRender
カメラがレンダリングを開始する前に発生するイベントです。
型 Camera.CameraCallback型
○ 使い方
カメラがレンダリングを開始する前に何か処理をしたい場合に使用します。
void Start() { Camera.onPostRender += BeforeRendering; } public void BeforeRendering(Camera came) { Debug.Log(came.name + "がこれからレンダリングを行います"); }
activeTexture
このカメラが描画しているレンダーテクスチャーです。
何も設定してない場合はnullが返ってきます。
読み取り専用です。
型 RenderTexture型
○ 使い方
カメラが使用しているレンダーテクスチャーを取得したい時に使用します。
//カメラに設定されているレンダーテクスチャーを取得する Camera came = GetComponent<Camera>(); RenderTexture tex = came.activeTexture;
actualRenderingPath
このカメラの現在使用しているレンダリングパスです。
読み取り専用です。
型 RenderingPath型
enum型です。
・UsePlayerSettings・・・プレイヤーセッティングの設定を使用します
・VertexLit・・・頂点ライティングです
・Forward・・・フォーワードレンダリングです
・DefferdLighting・・・旧式のディファードライティングです
・DeferredShading・・・ディファードライティングです
○ 使い方
このカメラが使用しているレンダリングパスを知りたい場合に使用します。
例えば、ユーザーが低スペック端末等でプレイする時、レンダリングパスがサポートされていない場合があります。それを検知する時に使用します。
Camera came = GetComponent<Camera>(); if(came.actualRenderingPath != RenderingPath.DeferredShading) { Debug.Log("想定していたレンダリング方法になっていない"); }
allowDynamicResolution
動的にこのカメラの解像度を変更する事を許可します。
型 bool型
○ 使い方
主に処理が重くなった時などに、一時的に解像度を下げる場合に使用します。
これにチェックが入っていると動的な解像度の変更が可能になるだけで、処理自体は自分で行う必要があります。
Camera came = GetComponent<Camera>(); came.allowDynamicResolution = true;
allowHDR
より広い明るさの幅を表現できる機能を使用する事を許可します。
型 bool型
○ 使い方
ハイダイナミックレンジレンダリングのオンオフを切り替えたい場合に使用します。
Camera came = GetComponent<Camera>(); came.allowHDR = true;
allowMSAA
カメラが映した結果が荒くなってジャギジャギになってしまった場合、それを滑らかに緩和する機能を使用する事を許可します。
型 bool型
○ 使い方
アンチエイリアスのオンオフを切り替えたい場合に使用します。
trueだとProject SettingsのQualityタブのAnti Aliasingで選択された項目が適用されます。
Camera came = GetComponent<Camera>(); came.allowMSAA = true;
areVRStereoViewMatricesWithinSingleCullTolerance
ステレオビューマトリックスがシングルパスカリングに適しているかどうかを返します。
読み取り専用です。
型 bool型
○ 使い方
ステレオビューマトリックスを手動で設定したい時、シングルパスレンダリングが可能かどうか事前にチェックするのに使います。
Camera came = GetComponent<Camera>(); if(came.areVRStereoViewMatricesWithinSingleCullTolerance) { Debug.Log("このカメラはシングルパスレンダリングができます"); }
aspect
このカメラのアスペクト比です。
幅を高さで割った値です。
型 float型
○ 使い方
現在のカメラのアスペクト比を知りたい場合に使用します。
Camera came = GetComponent<Camera>(); Debug.Log("このカメラのアスペクト比は" + came.aspect + "です");
backgroundColor
CameraClearFlagsがSolidColorに設定されている場合、もしくはSkyboxに設定されているけどSkyboxがnullだった場合、背景に塗られる色です。
型 Color型
○ 使い方
背景色を変えたい場合などに使用します。
Camera came = GetComponent<Camera>(); came.backgroundColor = Color.black;
cameraToWorldMatrix
Cameraから見た位置をワールド座標に変換するために使用する行列を返します。
読み取り専用です。
型 Matrix4x4型
○ 使い方
カメラから見た相対的な位置がわかっているもののワールド座標が知りたい場合に使用します。
Camera came = GetComponent<Camera>(); Matrix4x4 m = came.cameraToWorldMatrix; Vector3 p = m.MultiplyPoint(new Vector3(0, 0, -1f * came.nearClipPlane)); Debug.Log("このカメラは" + p.ToString() + "の位置から描画し始めます。");
cameraType
このカメラの種類を指定します。
型 CameraType型
enum型です。
・Game・・・ゲーム内のカメラです
・SceneView・・・シーンビューのカメラです
・Preview・・・プレビューのカメラです
・VR・・・VR用のカメラです(エディタのみです)
・Reflection・・・リフレクションプローブのカメラです
○ 使い方
このカメラがどのようなカメラなのか知りたい場合に使用します。
if (Camera.current.cameraType == CameraType.SceneView) { Debug.Log("このカメラはシーンビュー用です"); }
clearFlags
カメラが何も映していない場所をどのように処理するのかを決定します。
詳しくはインスペクターの項目で解説しています。
型 CameraClearFlags型
enum型です。
・Skybox・・・スカイボックスでクリアします
・SolidColor・・・指定した色でクリアします
・Depth・・・深度バッファのみをクリアします
・Nothing・・・クリアしません
○ 使い方
カメラのクリアフラグを途中で切り替えたい場合などに使用します。
//このカメラを深度カメラに変更します Camera came = GetComponent<Camera>(); came.clearFlags = CameraClearFlags.Depth;
clearStencilAfterLightingPass
カメラがDeferred Light Pathの後にステンシルバッファをクリーンにする必要があるかどうかを設定します。
型 bool型
○ 使い方
ステンシルバッファを強制的に消したい場合などに使用します。
Camera came = GetComponent<Camera>(); came.clearStencilAfterLightingPass = true;
commandBufferCount
このカメラに設定されているコマンドバッファ数を取得します。
読み取り専用です。
型 int型
○ 使い方
コマンドバッファ数を知りたい場合に使用します。
Camera came = GetComponent<Camera>(); Debug.Log("コマンドバッファが" + came.commandBufferCount + "個設定されています。");
cullingMask
このカメラが描画するレイヤーを指定します。
型 int型
○ 使い方
ビットフラグ形式になっているため注意が必要です。
//このカメラをDefault layerのゲームオブジェクトだけ描画するようにします Camera came = GetComponent<Camera>(); cam.cullingMask = 1 << 0;
cullingMatrix
カリングクエリに使うためのカメラのカスタムマトリクスを設定します。
型 Matrix4x4型
○ 使い方
複数のカメラをまったく同じようにカリングする時などに使用します。
Camera came = GetComponent<Camera>(); Camera.main.cullingMatrix = came.projectionMatrix * came.worldToCameraMatrix;
depth
このカメラのレンダリング順を指定します。
型 float型
○ 使い方
この値が小さい順番にレンダリングされていきます。
//このカメラをメインカメラより後にレンダリングします。 Camera came = GetComponent<Camera>(); came.depth = Camera.main.depth + 1;
depthTextureMode
このカメラがどのように深度テクスチャを生成するのかを選択します。
型 DepthTextureMode型
enum型です。
・None・・・深度テクスチャを生成しません(デフォルト)
・Depth・・・深度テクスチャを生成します
・DepthNormals・・・深度と法線を組み合わせたテクスチャを生成します
・MotionVectors・・・モーションベクターをレンダリングしたテクスチャを生成します(可能な場合に限る)
○ 使い方
深度テクスチャを生成したい場合に使用します。
Camera came = GetComponent<Camera>(); came.depthTextureMode = DepthTextureMode.Depth;
eventMask
このカメラがイベントを発生させるレイヤーを制限します。
イベントと言っても全てのイベントではなく、OnMouseEnterなどのマウス系のイベントです。
型 int型
○ 使い方
ビットフラグ形式になっているため注意が必要です。
//このカメラが映しているオブジェクトの中でレイヤーがUIのものだけマウスイベントを受け取る Camera came = GetComponent<Camera>(); came.cullingMask = 1 << LayerMask.NameToLayer("UI");
farClipPlane
このカメラが映せる最大距離を表します。
型 float型
○ 使い方
カメラの映せる距離を調整したい場合に使用します。
Camera came = GetComponent<Camera>(); came.farClipPlane = 100.0f;
fieldOfView
このカメラの画角です。
詳しくはインスペクターの項目で解説しています。
型 float型
○ 使い方
カメラの画角を調整したい場合に使用します。
Camera came = GetComponent<Camera>(); came.fieldOfView = 60.0f;
forceIntoRenderTexture
レンダリングをレンダーテクスチャに強制します。
型 bool型
○ 使い方
CommandBufferを使用してレンダリング中のイメージを使用したい場合に使用します。
Camera came = GetComponent<Camera>(); came.forceIntoRenderTexture = true;
layerCullDistances
このカメラが映せる距離をレイヤー毎に表します。
型 float[]型
○ 使い方
レイヤー別にレンダリング距離を分けたい時に便利です。例えば、大きな建物などは遠くでも見えるけど、小石などの小さなものは近くじゃないと見えないようにしたりする事で負荷軽減ができるので便利です。
Camera came = GetComponent<Camera>(); int layerNum = LayerMask.NameToLayer("Water"); came.layerCullDistances[layerNum] = 50.0f;
layerCullSpherical
このカメラが遠方まで映せる距離を平面ではなく球面にします。
layerCullDistancesが設定されている必要があります。
型 bool型
○ 使い方
視界範囲を球状にします。
デフォルトの状態では視界が最も遠い位置は平面で表されるので、例えば視点をグルグル動かせる系のゲームだと、止まっている状態で視点をグルグル回すとオブジェクトが映ったり映らなかったりします。
視界範囲を球状にすることによってクルクル視点を回してもオブジェクトがちらつきません。
Camera came = GetComponent<Camera>(); came.layerCullSpherical = true; int layerNum = LayerMask.NameToLayer("Water"); came.layerCullDistances[layerNum] = 50.0f;
nearClipPlane
このカメラが映せる最小距離を表します。
型 float型
○ 使い方
カメラの映せる距離を調整したい場合に使用します。
Camera came = GetComponent<Camera>(); came.nearClipPlane = 10.0f;
nonJitteredProjectionMatrix
オフセットが適用されていない投影行列です。
型 Matrix4x4型
○ 使い方
モーションベクターなどを使用する際に使用します。
Camera came = GetComponent<Camera>(); came.nonJitteredProjectionMatrix =
came.projectionMatrix;
opaqueSortMode
不透明なオブジェクトをどういう順番でレンダリングしていくかです。
型 Rendering.OpaqueSortMode型
enum型です。
Default・・・大まかにグループ化して順番にレンダリングしてきます。
FrontToBack・・・前から順にレンダリングします。粗く順番を決めるので必ずしも前から順とは限りません
NoDistance・・・距離によらない順番でレンダリングします
○ 使い方
レンダリング順を変えたい時に使用します。
Camera came = GetComponent<Camera>(); came.
opaqueSortMode=
Rendering.OpaqueSortMode.NoDistance;
orthographic
平行投影かそうでないかです。
falseだとperspectiveになります。
詳しくはインスペクターの項目で解説しています。
型 bool型
○ 使い方
カメラの映し方を変更したい場合に使用します。
Camera came = GetComponent<Camera>(); came.
orthographic=
true;
orthographicSize
カメラがorthographicの時の画角の広さです。
この値はカメラの画角の縦幅の半分の値になっています。
詳しくはインスペクターの項目で解説しています。
型 float型
○ 使い方
カメラが映す範囲を変更したい場合に使用します。
Camera came = GetComponent<Camera>(); came.
orthographicSize=
5.0f;
pixelHeight
カメラビューポートの高さをピクセル単位で返します。動的解像度スケーリングを考慮しません。
読み取り専用です。
型 int型
○ 使い方
カメラが映す範囲の高さをピクセル単位で知りたい場合に使用します。
Camera came = GetComponent<Camera>();
Debug.Log("このカメラは高さ" + came.
pixelHeight +"ピクセルで描画しています");
pixelRect
画面上のピクセル座標でどこにカメラが描画されるかです。
型 Rect型
○ 使い方
カメラが映す範囲をピクセル単位で指定したい場合に使用します。
Camera came = GetComponent<Camera>(); came.pixelRect = new Rect(0, 0, 400, 200);
pixelWidth
カメラビューポートの幅をピクセル単位で返します。動的解像度スケーリングを考慮しません。
読み取り専用です。
型 int型
○ 使い方
カメラが映す範囲の幅をピクセル単位で知りたい場合に使用します。
Camera came = GetComponent<Camera>();
Debug.Log("このカメラは幅" + came.
pixelWidth +"ピクセルで描画しています");
previousViewProjectionMatrix
最後のフレームで使用されるビュー投影行列を取得します
読み取り専用です。
型 Matrix4x4型
○ 使い方
ブラーなどの前回の描画情報を使って表現されるイメージエフェクトで使用されます。
Camera came = GetComponent<Camera>();
Material material = new Material(Shader.Find("Buler"));
material.SetMatrix("_PreviousViewProjectionMatrix", came.previousViewProjectionMatrix);
projectionMatrix
射影行列です。
この値を変更してしまうとカメラのaspectやfieldOfViewなどが更新されなくなります。
ResetProjectionMatrixを行うことで直す事ができます。
型 Matrix4x4型
○ 使い方
カメラの座標をクリップ座標に変換するときなどに使用します。
//カメラの映り方を若干歪ませます Camera came = GetComponent<Camera>();Matrix4x4 p =
came.projectionMatrix;
p.m01 += 1.0F;
Camera.main.projectionMatrix = p;
rect
カメラが画面のどの位置にどれくらいの割合で表示されるかです。
詳しくはインスペクターの項目で解説しています。
型 Rect型
○ 使い方
カメラを画面にどう映るのかを制御したい時に使用します。
//このカメラを左上のミニマップにします
Camera came = GetComponent<Camera>();
came.rect = new Rect(0,0.8f,0.2f,0.2f);
renderingPath
このカメラのレンダリングパスです。
型 RenderingPath型
enum型です。
・UsePlayerSettings・・・プレイヤーセッティングの設定を使用します
・VertexLit・・・頂点ライティングです
・Forward・・・フォーワードレンダリングです
・DefferdLighting・・・旧式のディファードライティングです
・DeferredShading・・・ディファードライティングです
○ 使い方
このカメラが使用しているレンダリングパスを変更したい場合に使用します。
現在のレンダリングパスを知りたい場合はactualRenderingPathがあるのでそちらを使用しましょう。renderingPathで指定したものは機種によって使用されていない可能性があります。
Camera came = GetComponent<Camera>();came.renderingPath =
RenderingPath.Forward;
scaledPixelHeight
カメラビューポートの高さをピクセル単位で返します。動的解像度スケーリングを考慮します。
読み取り専用です。
型 int型
○ 使い方
カメラが映す範囲の高さをピクセル単位で知りたい場合に使用します。
Camera came = GetComponent<Camera>();
Debug.Log("このカメラは高さ" + came.
scaledPixelHeight +"ピクセルで描画しています");
scaledPixelWidth
カメラビューポートの幅をピクセル単位で返します。動的解像度スケーリングを考慮します。
読み取り専用です。
型 int型
○ 使い方
カメラが映す範囲の幅をピクセル単位で知りたい場合に使用します。
Camera came = GetComponent<Camera>();
Debug.Log("このカメラは幅" + came.
scaledPixelWidth +"ピクセルで描画しています");
scene
nullではない場合、このカメラは指定されたシーンのコンテンツのみをレンダリングします。
EditorSceneManager.NewPreviewSceneによって作成されたシーンのみをサポートします。
型 SceneManagement.Scene型
○ 使い方
主にエディタ拡張などでカスタマイズする時に使用します。
Camera came = GetComponent<Camera>(); came.scene = EditorSceneManager.NewPreviewScene();
stereoActiveEye
立体視している場合、現在レンダリングしている目を返します。(VRディスプレイの左か右か)
読み取り専用です。
型 Camera.MonoOrStereoscopicEye型
enum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
○ 使い方
OnRenderImageなどで現在レンダリング中のカメラの種別を判別する際に使用します。
Camera came; private void Start() { came = GetComponent<Camera>(); } protected virtual void OnRenderImage(RenderTexture source, RenderTexture destination) { if (came.stereoActiveEye == Camera.MonoOrStereoscopicEye.Left) { Debug.Log("このカメラは左目用です"); } }
stereoConvergence
立体視している場合、目が収束する点までの距離を返します。(VRディスプレイの左右が収束する距離)
型 float型
○ 使い方
立体視を行う為の距離を変更したい場合などに使用します。
Camera came = GetComponent<Camera>(); came.stereoConvergence = 5.0f;
stereoEnabled
このカメラが立体視をしているかどうか。(VRディスプレイで見るような形)
読み取り専用です。
型 bool型
○ 使い方
立体視モードになっているかどうか知りたい時に使用します。
Camera came = GetComponent<Camera>(); if(came.stereoEnabled) { Debug.Log("このカメラは立体視しています"); }
stereoSeparation
このカメラが立体視をしている場合の左右の距離。(VRディスプレイで見るような形)
VR機器によってはこの値が固定となります。
型 float型
○ 使い方
左右の目の距離が知りたい場合に使用します。
Camera came = GetComponent<Camera>(); if(came.stereoEnabled) { Debug.Log("このカメラの左右の距離は" + came.stereoSeparation + "です"); }
stereoTargetEye
このカメラがVRディスプレイの左右どちらにレンダリングするのか
型 StereoTargetEyeMask型
enum型です。
None・・・どちらの目もレンダリングしません。
Left・・・左目だけをレンダリングします。
Right・・・右目だけをレンダリングします。
Both・・・両目をレンダリングします。
○ 使い方
カメラがレンダリングしたいディスプレイを変更したい場合に使用します。
Camera came = GetComponent<Camera>(); came.stereoTargetEye = StereoTargetEyeMask.Both;
targetDisplay
このカメラが表示するディスプレイの番号です。
型 int型
○ 使い方
どのディスプレイに表示したいのか変更したい場合などに使用します。
Camera came = GetComponent<Camera>(); came.targetDisplay = 1;
targetTexture
このカメラのレンダリング先であるレンダーテクスチャです。
nullの場合、ディスプレイをレンダリング先にします。
型 RenderTexture型
○ 使い方
主にカメラに設定されているレンダーテクスチャからデータを受け取りたい時などに使用します。
Camera came = GetComponent<Camera>(); if(came.targetTexture != null) { //レンダーテクスチャに映った深度バッファを取り出します RenderBuffer rb = came.targetTexture.depthBuffer; }
transparencySortAxis
透明なオブジェクトをレンダリングする順番を決める時に基準とするベクトルです。
型 Vector3型
○ 使い方
主に半透明なオブジェクトのレンダリングの仕方を変えたい場合に使用します。
//透明なオブジェクトを斜め奥から順に描画するようにします。 Camera came = GetComponent<Camera>(); came.transparencySortAxis = Vector3.one;
transparencySortMode
透明なオブジェクトどのような順番でレンダリングするのかです。
型 TransparencySortMode型
enum型です。
Default・・・カメラの現在の設定に合わせる?
Perspective・・・カメラの位置からオブジェクトの中心までの距離に基づいてレンダリングの順番を決めます
Orthographic・・・ビューの方向に沿った距離に基づいてレンダリングの順番を決めます
CustomAxis・・・transparencySortAxisを使って自分で指定したベクトルに基づいてレンダリングの順番を決めます
○ 使い方
主に半透明なオブジェクトのレンダリングの仕方を変えたい場合に使用します。
//透明なオブジェクトを斜め奥から順に描画するようにします。 Camera came = GetComponent<Camera>(); came.transparencySortMode = TransparencySortMode.Orthographic;
useJitteredProjectionMatrixForTransparentRendering
透明なオブジェクトをレンダリングする時にオフセットを利用するか否かです。
型 bool型
○ 使い方
ジッタ投影レンダリングをしたい場合に使用します。
Camera came = GetComponent<Camera>(); came.
useJitteredProjectionMatrixForTransparentRendering=
true;
useOcclusionCulling
このカメラがオクルージョンカリングをするかどうかです。
型 bool型
○ 使い方
このフラグをtrueにするだけでは意味はなく、シーンにベイクしておく必要があります。
Camera came = GetComponent<Camera>(); came.
useOcclusionCulling=
true;
velocity
このカメラの速度です。
読み取り専用です。
型 Vector3型
○ 使い方
読み取り専用なので、検知する目的にしか使えません。
Camera came = GetComponent<Camera>(); if(came.velocity.magnitude > 5.0f) { Debug.Log("カメラが早すぎて酔う〜"); }
worldToCameraMatrix
ワールド座標からCameraから見た位置に変換するために使用する行列を返します。
型 Matrix4x4型
○ 使い方
カメラの視点を変えたい時などに使用します。
//ちょっと右からの視点に変えます Camera came = GetComponent<Camera>();Vector3 cameOffset = new Vector3(-5, 0, 0);
Matrix4x4 m = Matrix4x4.TRS(cameOffset, Quaternion.identity, new Vector3(1, 1, -1));
came.worldToCameraMatrix = m * transform.worldToLocalMatrix;
AddCommandBuffer
指定されたタイミングで実行されるようなコマンドバッファをカメラに追加します。
1. 実行するタイミング : Rendering.CameraEvent型
2. 実行するコマンドバッファ : Rendering.CommandBuffer型
なし
○ 使い方
レンダリング結果をカスタマイズしたい場合などに使用します。
//深度バッファをセットする CommandBuffer command = new CommandBuffer (); command.name = "Set depth texture"; command.SetGlobalTexture ("_DepthTexture", m_DepthBuffer); m_Camera.AddCommandBuffer (CameraEvent.BeforeImageEffects, command);
CalculateFrustumCorners
カメラの視錐台を成す4つの辺のベクトルを返します。
1. ビューポート : Rect型
2. どこまで遠くを映すか : float型
3. どの視点のカメラか : Camera.MonoOrStereoscopicEye型
4. カメラの視錐台を成す4つの辺のベクトルを入れる変数 : Vector3[]型
4の配列の中に結果が返ってきます。従って配列の大きさは4以上である必要があります。
なし
○ 使い方
カメラの視錐台の情報を知りたい場合に使用します。
Vector3[] v = new Vector3[4]; Camera.main.CalculateFrustumCorners(new Rect(0,0,1,1),camera.farClipPlane,Camera.MonoOrStereoscopicEye.Mono,v);
CalculateObliqueMatrix
カメラのNear Clipから開始される視界の平面の形を指定した場合に得られる近平面射影行列を返します。
- クリップ平面 : Vector4
このVector4の要素は面の法線ベクトル(3次元)とカメラからの距離です。
斜めの近平面射影行列を返します。 : Matrix4x4型
○ 使い方
カメラが視界を開始する面を変えたい場合に使用します。
//斜めに見切れるカメラ Camera came = GetComponent<Camera>(); Vector3 clipNormal = came.worldToCameraMatrix.MultiplyVector(Vector3.one); Camera.main.projectionMatrix = Camera.main.CalculateObliqueMatrix(new Vector4(clipNormal.x, clipNormal.y, clipNormal.z, 3.0f));
↓描画が開始される面が斜めになるのでこうなります。(Vector3.oneは適当に書いた物なので使う場合はちゃんとカメラの方向から計算した方がいいです)
CopyFrom
このカメラの設定を他のカメラと同じようにします。
- 設定をコピーしたいカメラ : Camera型
なし
○ 使い方
同じ設定のカメラにしたい場合に使用します。
Camera came = GetComponent<Camera>(); came.CopyFrom(Camera.main);
GetCommandBuffers
このカメラに指定したタイミングのコマンドバッファが設定されていたら、それを返します。
- どのタイミングか : Rendering.CameraEvent型
指定したタイミングにセットされているコマンドバッファ :CommandBuffer[]型
○ 使い方
このカメラに設定されているコマンドバッファを得たい場合に使用します。
Camera came = GetComponent<Camera>(); CommandBuffer[] buffers = came.GetCommandBuffers(Rendering.CameraEvent.BeforeDepthTexture);
GetStereoNonJitteredProjectionMatrix
オフセットが適用されていないVR用の投影行列を返します。
- どの視点のカメラか : Camera.MonoOrStereoscopicEye型
enum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
オフセットが適用されていないVR用の投影行列 : Matrix4x4型
○ 使い方
このカメラに設定されているコマンドバッファを得たい場合に使用します。
Camera came = GetComponent<Camera>(); Matrix4x4 m = came.
GetStereoNonJitteredProjectionMatrix(Camera.MonoOrStereoscopicEye.Left);
GetStereoProjectionMatrix
VR用の投影行列を返します。
- どの視点のカメラか : Camera.MonoOrStereoscopicEye型
enum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
VR用の投影行列 : Matrix4x4型
○ 使い方
VR用の投影行列を得たい場合に使用します。
Camera came = GetComponent<Camera>(); Matrix4x4 m = came.
GetStereoProjectionMatrix(Camera.MonoOrStereoscopicEye.Left);
GetStereoViewMatrix
VR用のビュー行列を返します。
- どの視点のカメラか : Camera.MonoOrStereoscopicEye型
enum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
VR用のビュー行列 : Matrix4x4型
○ 使い方
VR用のビュー行列を得たい場合に使用します。
Camera came = GetComponent<Camera>(); Matrix4x4 m = came.
GetStereoViewMatrix(Camera.MonoOrStereoscopicEye.Left);
RemoveAllCommandBuffers
このカメラに設定されているすべてのコマンドバッファを削除します。
なし
なし
○ 使い方
コマンドバッファを削除したい場合に使用します。
Camera came = GetComponent<Camera>(); came.RemoveAllCommandBuffers();
RemoveCommandBuffer
このカメラから指定したコマンドバッファを削除します。
- どのタイミングのコマンドバッファか : Rendering.CameraEvent型
- 指定するコマンドバッファ : Rendering.CommandBuffer型
なし
○ 使い方
コマンドバッファを指定して削除したい場合に使用します。
同じコマンドバッファが複数回適用されていた場合、全て削除されます。
Camera came = GetComponent<Camera>(); CommandBuffer[] buffers = came.GetCommandBuffers(Rendering.CameraEvent.BeforeDepthTexture); if(buffers != null && buffers.Length > 0) { came.RemoveCommandBuffer(Rendering.CameraEvent.BeforeDepthTexture, buffers[0]); }
RemoveCommandBuffers
このカメラから指定したタイミングのコマンドバッファを削除します。
- どのタイミングのコマンドバッファか : Rendering.CameraEvent型
なし
○ 使い方
コマンドバッファをタイミングを指定して削除したい場合に使用します。
Camera came = GetComponent<Camera>(); came.RemoveCommandBuffers(Rendering.CameraEvent.BeforeDepthTexture);
Render
このカメラを手動でレンダリングします。
なし
なし
○ 使い方
レンダリング結果がすぐに欲しい場合などに使用します。
Camera came = GetComponent<Camera>(); came.Render();
RenderToCubemap
このカメラから静的のキューブマップにレンダリングします。
- ベイクされるキューブマップ : Cubemap型
- 6つの面のビットフラグ : int型 (デフォルト引数 63)
2番目の引数はビットフラグです。2の6乗=64なので、デフォルト引数 63は6つの全ての面を表します。(0を含むと63で64個になる)
- ベイクされるキューブマップ用のレンダーテクスチャ : RenderTexture型
- 6つの面のビットフラグ : int型 (デフォルト引数 63)
RenderTextureはisCubemapがtrueに設定されている必要があります。
成功したか失敗したか : bool型
○ 使い方
レンダリングをキューブマップに反映したい場合などに使用します。
Camera came = GetComponent<Camera>();
Cubemap cube = new Cubemap(1080, UnityEngine.Experimental.Rendering.GraphicsFormat.RGBA_ASTC12X12_SRGB, UnityEngine.Experimental.Rendering.TextureCreationFlags.None);
came.RenderToCubemap(cube);
RenderWithShader
シェーダーを交換してカメラをレンダリングします。
- 交換するシェーダー : Shader型
- 交換するところのタグ : String型
なし
○ 使い方
現在レンダリング中である場合はこの関数は使用できないので注意してください。
このカメラだけエフェクトをかけたい時などに使用します。
Camera came = GetComponent<Camera>(); Shader s = Shader.Find("Sprites/Diffuse"); came.RenderWithShader(s,"Transparent");
ResetAspect
アスペクト比をスクリーンの時のアスペクト比に戻します。
なし
なし
○ 使い方
アスペクト比をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetAspect();
ResetCullingMatrix
カリングクエリに使うためのカメラのカスタムマトリクスを元に戻します。
なし
なし
○ 使い方
カリングマトリクスをリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetCullingMatrix();
ResetCullingMatrix
カリングクエリに使うためのカメラのカスタムマトリクスを元に戻します。
なし
なし
○ 使い方
カリングマトリクスをリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetCullingMatrix();
ResetProjectionMatrix
このカメラの射影行列を元に戻します。
なし
なし
○ 使い方
射影行列をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetProjectionMatrix();
ResetReplacementShader
このカメラで変更されたシェーダーを元に戻します。
なし
なし
○ 使い方
カメラに適用されたシェーダーをリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetReplacementShader();
ResetStereoProjectionMatrices
このカメラに設定されたVR用の射影行列を元に戻します。
なし
なし
○ 使い方
VR用の射影行列をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetStereoProjectionMatrices();
ResetStereoViewMatrices
このカメラに設定されたVR用のビュー行列を元に戻します。
なし
なし
○ 使い方
VR用のビュー行列をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetStereoViewMatrices();
ResetTransparencySortSettings
このカメラに設定された透明なオブジェクトのレンダリングの順番設定を元に戻します。
なし
なし
○ 使い方
透明なオブジェクトのレンダリングの順番設定をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetTransparencySortSettings();
ResetWorldToCameraMatrix
このカメラに設定されているワールド座標からカメラ座標に変換する行列を元に戻します。
なし
なし
○ 使い方
ワールド座標からカメラ座標に変換する行列をリセットしたい時に使用します。
Camera came = GetComponent<Camera>(); came.ResetWorldToCameraMatrix();
ScreenPointToRay
画面の指定したポイントからレイを飛ばします。
- スクリーン座標 : Vector3型
スクリーン座標は左下が(0,0)で右上が画面のピクセル数の横,縦
zの値はカメラからどれだけ前後からレイを飛ばすか
飛んだレイの結果 : Ray型
○ 使い方
画面でタップした場所にオブジェクトが存在するのかなど、画面と関連した色々な事に使われます。
Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
ScreenToViewportPoint
スクリーン座標からビューポート座標に変換します。
スクリーン座標は左下が(0,0)で右上が画面のピクセル数の横幅,縦幅です。
ビューポート座標は縦幅と横幅を正規化した場合の画面における座標です。
- スクリーン座標 : Vector3型
zの値はカメラの位置からどれだけ前後かです。
ビューポート座標 : Vector3型
○ 使い方
画面で指定した位置のビューポート座標を得たい場合に使用します。
Vector3 viewPos = Camera.main.ScreenToViewportPoint(Input.mousePosition);
ScreenToWorldPoint
スクリーン座標からワールド座標に変換します。
スクリーン座標は左下が(0,0)で右上が画面のピクセル数の横幅,縦幅です。
- スクリーン座標 : Vector3型
zの値はカメラの位置からどれだけ前後かです。
ワールド座標 : Vector3型
○ 使い方
画面で指定した位置のワールド座標を得たい場合に使用します。
Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
SetReplacementShader
このカメラが描画するシェーダーを交換します。
- 交換するシェーダー : Shader型
- 交換するところのタグ : String型
なし
○ 使い方
このカメラだけエフェクトをかけたい時などに使用します。
Camera came = GetComponent<Camera>(); Shader s = Shader.Find("Sprites/Diffuse"); came.SetReplacementShader(s,"Transparent");
SetStereoProjectionMatrix
このカメラにVR用の射影行列をセットします。
- どの視点のカメラか : Camera.MonoOrStereoscopicEye型
- セットする射影行列 : Matrix4x4型
引数1はenum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
なし
○ 使い方
VR用の射影行列をセットしたい時などに使用します。
Camera came = GetComponent<Camera>(); came.SetStereoProjectionMatrix(Camera.StereoscopicEye.Left, came.projectionMatrix);
SetStereoViewMatrix
このカメラにVR用のビューマトリクスをセットします。
- どの視点のカメラか : Camera.MonoOrStereoscopicEye型
- セットするビューマトリクス : Matrix4x4型
引数1はenum型です。
Left・・・左目用です。
Right・・・右目用です。
Mono・・・立体視モードではありません。
なし
○ 使い方
VR用のビューマトリクスをセットしたい時などに使用します。
Camera came = GetComponent<Camera>(); Matrix4x4 viewL = came.worldToCameraMatrix; Matrix4x4 viewR = came.worldToCameraMatrix; viewL[12] += 0.011f; viewR[12] -= 0.011f; cam.SetStereoViewMatrix(Camera.StereoscopicEye.Left, viewL); cam.SetStereoViewMatrix(Camera.StereoscopicEye.Right, viewR);
SetTargetBuffers
このカメラがレンダリングするバッファを指定します。
複数指定することもできます。
- カラーバッファ : RenderBuffer型
- 深度バッファ : RenderBuffer型
- カラーバッファ(複数) : RenderBuffer[]型
- 深度バッファ(複数) : RenderBuffer[]型
なし
○ 使い方
レンダリング先のバッファを指定したい場合などに使用します。
Camera came = GetComponent<Camera>(); RenderTexture rt = new RenderTexture(300, 200, 24, RenderTextureFormat.ARGB32); came.SetTargetBuffers (rt.colorBuffer, rt.depthBuffer);
ViewportPointToRay
指定したビューポート座標からレイを飛ばします。
- ビューポート座標 : Vector3型
ビューポート座標は左下が(0,0)で右上が(1,1)
zの値はカメラからどれだけ前後からレイを飛ばすか
飛んだレイの結果 : Ray型
○ 使い方
画面の指定した場所にオブジェクトが存在するのかなど、画面と関連した色々な事に使われます。
Camera came = GetComponent<Camera>(); Ray r = came.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));
ViewportToScreenPoint
ビューポート座標をスクリーン座標に変換します。
- ビューポート座標 : Vector3型
ビューポート座標は左下が(0,0)で右上が(1,1)
zの値はカメラからどれだけ前後からレイを飛ばすか
スクリーン座標 : Vector3型
○ 使い方
ビューポート座標をスクリーン座標に変換したい場合に使用します。
Camera came = GetComponent<Camera>(); Vector3 screenPos = came.ViewportToScreenPoint(new Vector3(0.5f, 0.5f, 0));
ViewportToWorldPoint
ビューポート座標をワールド座標に変換します。
- ビューポート座標 : Vector3型
ビューポート座標は左下が(0,0)で右上が(1,1)
zの値はカメラからどれだけ前後からレイを飛ばすか
ワールド座標 : Vector3型
○ 使い方
ビューポート座標をワールド座標に変換したい場合に使用します。
Camera came = GetComponent<Camera>(); Vector3 worldPos = came.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0));
WorldToScreenPoint
ワールド座標をスクリーン座標に変換します。
- ワールド座標 : Vector3型
スクリーン座標 : Vector3型
○ 使い方
ワールド座標をスクリーン座標に変換したい場合に使用します。
Camera came = GetComponent<Camera>(); Vector3 screenPos = came.WorldToScreenPoint(Vector3.zero);
WorldToViewportPoint
ワールド座標をビューポート座標に変換します。
- ワールド座標 : Vector3型
ビューポート座標 : Vector3型
○ 使い方
ワールド座標をビューポート座標に変換したい場合に使用します。
Camera came = GetComponent<Camera>(); Vector3 viewPos = came.WorldToViewportPoint(Vector3.zero);
GetAllCameras
現在のシーン内にある全てのカメラを引数にした配列に入れます。
- カメラを入れる配列 : Camera[]型
カメラが入った数 : int型
○ 使い方
入れる配列の大きさがシーン中に存在するカメラの数より小さい場合エラーになります。
Camera[] c = new Camera[Camera.allCamerasCount]; int cameraCount = Camera.GetAllCameras(c);
OnPostRender
カメラがシーンのレンダリングを終了した際に呼び出されます。
なし
○ 使い方
レンダリング終了時に何か処理を加えたい時に使用します。
void OnPostRender() { Debug.Log("このカメラのレンダリングが終了しました"); }
OnPreCull
カメラがシーンのカリングを行う直前に呼び出されます。
なし
○ 使い方
シーンのカリングを行う直前に何か処理を加えたい時に使用します。
void OnPreCull() { Debug.Log("このカメラはカリングを行う直前です"); }
OnPreRender
カメラがシーンのレンダリングを開始する前に呼び出されます。
なし
○ 使い方
シーンのレンダリングを開始する前に何か処理を加えたい時に使用します。
void OnPreRender() { Debug.Log("このカメラはレンダリングを行う前です"); }
OnRenderImage
すべてのレンダリングが完了したときに呼び出されます。
- 受け取ったレンダリング結果 : RenderTexture型
- 画面に出力するもの : RenderTexture型
○ 使い方
すべてのレンダリングが完了したときに何か処理を加えたい時に使用します。
受け取ったレンダーテクスチャにレンダリング結果が入っていますので、これを加工して出力するレンダーテクスチャに入れると画面での映り方が変わります。
public Material mat; void OnRenderImage(RenderTexture src, RenderTexture dest) { Graphics.Blit(src, dest, mat); }
OnRenderObject
カメラがシーンのレンダリングを終了した際に呼び出されます。
なし
○ 使い方
レンダリング終了時に何か処理を加えたい時に使用します。
OnPostRenderとの違いはこの関数はカメラがアタッチされていなくても呼び出される点です。
void OnRenderObject() { Debug.Log("このカメラのレンダリングが終了しました"); }
OnWillRenderObject
このオブジェクトがカメラに映っている場合、カメラごとに一度呼び出されます
なし
○ 使い方
このオブジェクトがカメラに映っている間、何か処理を加えたい時に使用します。
この関数はカメラがアタッチされていなくても呼び出されます。
void OnWillRenderObject() { Debug.Log("カメラに映ってます"); }
CameraCallback
カメラのコールバックで使用するデリゲートです。
- コールバックで渡されるカメラ : Camera型
○ 使い方
Camera.onPreCull、Camera.onPreRender、Camera.onPostRender のコールバックを取得するのに使用します。
void Start() { Camera.onPostRender += EndRendering; } public void EndRendering(Camera came) { Debug.Log(came.name + "のレンダリングが終わりました"); }
Static変数や関数、メッセージなどがわからない方は↓の記事を参考にしてみてください