
カメラ
Tutorial
Beginner
+0XP
20 mins
(137)
Unity Technologies

プレイヤーのキャラクターと環境を作成したので、ゲームのカメラについて考えてみましょう。
本チュートリアルでは、以下の作業を行います。
- Camera コンポーネントの作業とは
- Cinemachine を使ってバーチャルカメラを設定する
- さまざまなポストプロセシングエフェクトの追加
このチュートリアルを完了したら、プレイヤーにとって視覚的にもできるだけ面白いゲームになるようにカメラを設定していきます。
1. Camera コンポーネントの作業とは
前回のチュートリアルでは、ゲームのレベルを作成しましたね。キャラクターがシーンの中を歩き回れるようになりましたが、これはカメラから離れてさまよい歩いてしまうことがあるということです。このチュートリアルでは、このようなことが起こらないようにカメラの設定を調整します。
Unity のシーンはゲームオブジェクトで構成されており、それらのオブジェクトにはコンポーネントのコレクションがアタッチされています。プレイヤーからのシーンの見え方も同じように構築されています。
シーンを表示するには、シーン内のゲームオブジェクトに Camera コンポーネント が必要です。新しいシーンを作成すると、Camera コンポーネントを持つ Main Camera というゲームオブジェクトが追加されます。
カメラはゲームオブジェクトの z 軸を下方向に向けており、他のゲームオブジェクトと全く同じように動作します。シーンビューでは、カメラの錐台を表すギズモを確認できます。錐台は、上部が底面と平行に切り取られたピラミッドのように見える立体形状になっていますこれは、透視投影カメラで表示およびレンダリングできる領域の形状です。
ゲームを作成するとき、カメラがプレイヤーキャラクターを追従するようにいくつかのオプションがあります。ひとつのソリューションとしては、このためのスクリプトを書くことでしょう。ただし、Unity にはこの問題に対して組み込みのソリューションである Cinemachine があります。
2. Cinemachine はどのように機能しますか?
Cinemachine は、ゲームのカメラに関するあらゆることを解決するための Unity の答えです。このシステムに関する基本的な概要は以下の通りです。
- シーン内に 1 つ以上の「バーチャル」カメラが作成されます。
- これらのバーチャルカメラは、Cinemachine Brain と呼ばれるコンポーネントによって管理されています。
- Cinemachine Brain は、Camera コンポーネントと同じゲームオブジェクトにアタッチされています。デフォルトでは、これは Main Camera ゲームオブジェクトになります。
- Cinemachine Brain はすべてのバーチャルカメラを管理し、実際のカメラがどのバーチャルカメラ(またはバーチャルカメラの組み合わせ)に従うべきかを決定します。
ゲームでは、カメラは JohnLemon の後をついていくだけなので、バーチャルカメラは 1 台だけで済みます。このバーチャルカメラが JohnLemon に追従していることを確認したら、メインカメラのゲームオブジェクトがその状態から離れないようにします。
3. Cinemachine を使って Virtual Camera を配置する
Cinemachine を使ってバーチャルカメラを配置するには、以下の手順を実行します。
Project ウィンドウで、 Assets > Scenes の順に選択し、 MainScene をダブルクリックします。
1. Hierarchy で、JohnLemon ゲームオブジェクトを選択します。
2. Scene ウィンドウにカーソルを合わせて F キーを押します。
3.トップメニューから Cinemachine > Create Virtual Camera の順に選択します。
これにより、 CM vcam1 という名前のシーンに新しいゲームオブジェクトが作成されます。
これは、Scene ウィンドウのカメラのフォーカスポイントに作成されますので、JohnLemon のすぐ上にあるはずです。しかし、シーン内にバーチャルカメラがある状態なので、Game ウィンドウのビューが移動してしまい、ゲームウィンドウに JohnLemon が表示されなくなっています。
これを修正するには、Cinemachine Virtual Camera コンポーネントの設定を変更して、バーチャルカメラがキャラクターを追従していることを確認する必要があります。
4. Cinemachine の Virtual Camera コンポーネントの設定を変更する
バーチャルカメラを設定して JohnLemon を追従するには、以下の手順に従います。
1. Hierarchy で、CM vcam1 を選択します。
2. Inspector で、Cinemachine の Virtual Camera コンポーネントを見つけます。このコンポーネントには多くの設定がありますが、現時点では ターゲットの参照、Aim と Body の 3 つのセクションに焦点を当てる必要があります。
ターゲットの参照セクションには、Follow と Look At の 2 つの設定があります。これらは、ゲームオブジェクトの Transform コンポーネントへの任意の参照です。
バーチャルカメラを移動する場合は、移動する方法を知っている必要があります。具体的には、カメラが従うことになる Transform への参照が必要です。同様に、バーチャルカメラを回転させたい場合は、何を見るために回転しなければならないかを知る必要があります。
次のセクションの 2 つのセクションは、Body と Aim です。これらは、カメラの動き方、回転の仕方をそれぞれ設定します。バーチャルカメラの動きを制限することで、JohnLemon は常に視界に入っていますが、実際にはキャラクターを見ていません。
3. Aim セクションで、右上のドロップダウンメニューを Composer から Do Nothing に変更します。
4. JohnLemon ゲームオブジェクトを Hierarchy ウィンドウから Cinemachine の Virtual Camera コンポーネントのFollow プロパティにドラッグ&ドロップします。これで、 Follow 設定が JohnLemon の Transform を参照するように変更されます。
5. Body セクションでは、セクション右上のドロップダウンを Transposer から Framing Transposer へ変更します。Body を Framing Transposer に変更すると、 Follow ターゲットの画面上の位置に関するルールを与えることで、バーチャルカメラの位置を制御することができます。
さまざまな Body 設定値の詳細については、Cinemachine のドキュメントでチェックすることができます(上部のメニューバーで、 Cinemachine > About の順に進む)。
Game ウィンドウには、赤と青のボックスがいくつか表示されるようになりました。これらは、画面上のどこにターゲットがいるかのガイドです。
6. ここで、バーチャルカメラを正しい角度に設定してみましょう。Hierarchy で、CM vam1 のゲームオブジェクトを選択します。CM vam1 のゲームオブジェクトの Transform コンポーネントで、x 軸を中心とした Rotation を 45 に設定します。
これでバーチャルカメラが下方向へ傾き、キャラクターを上から見ています。これは求めている見た目のざっくりとした感じです。なぜ回転を変更しただけでバーチャルカメラが動いたのですか?これが Cinemachine の強力な機能です!
あなたは、カメラに対してもっと上から見下ろす角度が必要であることを知っていましたし、バーチャルカメラは、もしカメラを下方向へ傾けたいのであれば、ターゲットを画面上に表示させるためにはさらに上方にする必要があることを理解していました。
7. Framing Transposer のデフォルト設定のほとんどはゲームに適しています。変更する必要があるのは、 Camera Distance の設定だけです。画面上のキャラクターが少し小さすぎるので、バーチャルカメラをもう少し近づける必要があります。
Camera Distance の設定を 10 から 8 に変更します。
8. Hierarchy で、CM vcam1 を選択し、名前を VirtualCamera に変更します。
9. VirtualCamera のゲームオブジェクトの選択を解除して、Game ウィンドウからガイドラインを削除します。
10.トップメニューから File > Save Scene の順に選択するか、Ctrl + S(Windows)または CMD + S(macOS)を押して、シーンを保存します。
11. ツールバーの Play ボタンをクリックして、ここまでのゲームをテストします。テストが終わったら、もう一度 Play をクリックします。
それだけです。バーチャルカメラとその動きの設定が終わりました!さあ、ゲームをさらにかっこよく見せるために、カメラにいくつかの視覚効果を追加してみましょう。
5. ポストプロセシングエフェクトの追加
ポストプロセシングでは、画面にレンダリングされる前にゲーム画像にフィルターやエフェクトを適用します(写真に追加できるフィルターに似ています)。このチュートリアルのセクションでは、Unity でのポストプロセシングがどのように機能するかに触れて、自分のゲームに適用していきます。
Unity でのポストプロセシングはどのように機能しますか?
ほとんどの場合、ポストプロセシングエフェクトはグループ化され、ゲームの世界の異なる領域で使用されています。つまり、カメラが特定のエリアにある場合には、その指定された一連のプロセスが画像に適用されます。
暗い部屋にいることを想像してみてください。外へのドアを開けて明るい日中に足を踏み入れてみましょう。あなたの目は調整するためにしばらくかかりますし、部屋を出るときには、すべてが通常よりもはるかに明るく見えるでしょう。Unityでは、部屋の中と外で異なるグループのポストプロセスを適用することで、これをシミュレートすることができます。ポストプロセスのグループは、 Post-Processing Profile と呼ばれるアセットです。ゲームの世界でプロファイルが割り当てられている領域は、 Post Process Volumes と呼ばれるコンポーネントです。
カメラによってポストプロセスが異なることもあります。一連のプロセスを特定のカメラにリンクするには、Camera コンポーネントと同じゲームオブジェクトに Post Process Layer コンポーネントを追加します。レイヤーとは、ゲームオブジェクトを振る舞いによって整理する方法です。
Unity でのポストプロセシングの詳細について
このチュートリアルでは、Unityエディターで特定のポストプロセシングエフェクトを追加する手順をステップバイステップで説明します。これらのエフェクトをより詳しく調べたい場合は、以下に詳しい情報を掲載しています。
6. ポストプロセシングレイヤーの作成
ポストプロセシングレイヤーの作成方法は以下の通りです。
1. Hierarchy で、Main Camera のゲームオブジェクトを選択します。
2. Inspector で、ゲームオブジェクトの名前の下にある Layer プロパティを見つけます。
ゲームオブジェクトは 1 つのレイヤーにしか属しません。Main Camera は Default で Layer にあります。Unity にはデフォルトでいくつかのオプションがありますが、Tags & Layers マネージャーで独自のレイヤーを作成することもできます。
3. Layer プロパティのドロップダウンで、 Add Layer…を選択します。
4. Tags & Layers マネージャーには、32 の利用可能なレイヤーがあります(0 から始まり 31 で終わる)。
最初の 8 つのレイヤーは Unity のデフォルトレイヤーとして予約済みですが、残りの 24 のレイヤーは好きなように使うことができます。Post Process Volume 用のレイヤーが必要なので、すべての Post Process Volume 用のレイヤーを作成することは理にかなっています。
5.「PostProcessingVolumes」をユーザーレイヤー 8 として追加します。
6. Hierarchy で、Main Camera のゲームオブジェクトを選択します。まだ Default で Layer のままです。
これは、新しいレイヤーを作成したにもかかわらず、Main Camera の再割り当てをしていないためです。
7. Main Camera に Post Process Layer コンポーネントを追加します。
8.ドロップダウンメニューを使用して、Layer プロパティを Nothing から PostProcessingVolumes に変更します。
7. Anti-aliasing で画質を向上させる
それでは、ボリュームとプロファイルの設定に移る前に、アンチエイリアスについて考えてみましょう。
Aliasing(エイリアシング)とは、オブジェクトのエッジがギザギザに見え、ピクセルの輪郭が見える場合のことです。
Anti-aliasing(アンチエイリアシング)とは、これらのギザギザした線を輪郭の色と背景色の中間色のピクセルで囲むことで、これらのギザギザした線の目立ちを抑えるポストプロセッシングエフェクトです。どのピクセルをどの程度調整する必要があるかを判断するための異なるアルゴリズムがいくつかあります。最も簡単で効果的なものを使用します。
1. Game ビューが表示されていることを確認して、チュートリアルのこのセクションで行っている変更を確認できるようにしてください。
2. Post Process Layer コンポーネントで、 Mode プロパティのドロップダウンを No Anti-aliasing から Fast Approximate Anti-aliasing(FXAA)に変更します。
3.ドロップダウンの下にある Fast Mode のチェックボックスを有効にします。
JohnLemon はすでにかなり良くなっているように見えます!
これで Post Process Layer が正しく設定されたので、ボリュームの作成に移ることができます。
8. Post-Processing Volume の作成
ポストプロセシングボリュームの作成は以下の通りです。
1. Hierarchy ウィンドウで、Create > Create Empty の順に進みます。
2. 新しいゲームオブジェクトに「GlobalPost」という名前を付けます。
3. Inspector で、Layer を PostProcessingVolumes に設定します。
4. Transform コンポーネントの Position プロパティを(0, 0, 0)に変更します。このゲームオブジェクトは、グローバルの Post Process Volume になります。グローバルボリュームは、影響を与えるカメラのデフォルトのプロファイルとして機能します。その他のグローバル以外のボリュームは、この効果を上書きすることができますが、ゲームは追加のボリュームを必要としません。
5. GlobalPost に Post Process Volume コンポーネントを追加します。
6. Is Global チェックボックスを有効にします。
7. Profile プロパティの右端にある New ボタンをクリックします。これで、新しい Post-processing Profile が作成されます。そのアセットは、 Assets > Scenes の順に選択し、MainScene_Profiles という新しいフォルダに保存されます。
8. プロファイルが設定されたので、 Post Process Volume コンポーネントで利用可能な設定がより多く表示されます。
Overrides サブセクションでは、カメラが通常レンダリングする方法をオーバーライドすることができるさまざまなエフェクトを参照します。デフォルトでは、プロファイルには何の効果もないので、Overrides のサブセクションには何もありません。
9. Color Grading Effect の追加
Color Grading Effect の追加手順は以下の通りです。
1. Add effect… ボタンをクリックして、 Unity > Color Grading の順に選択します。
Color Grading は、レンダリングされたビューの明るさ、コントラスト、色を変更する方法です。写真編集ソフトやインスタグラムでフィルターをかけるようなイメージで考えてください。ゲームをより不気味に見せるために、レンダリングされたビューの色と明るさのレベルを調整します。
注:このコンポーネント内の設定は、Profile アセットへのショートカットです。Overrides サブセクションへの変更はすべて Profile アセットを変更し、コンポーネントには直接影響しません。
2. Color Grading の横の矢印を選択して、設定を展開します。
3. まず、シーンを Tonemap (トーンマップ)する必要があります。Tonemapping(トーンマッピング)は、最終的にレンダリングされたフレームの出力を変更するので、ライトとシャドウの制御がずっと簡単に行えます。
Tonemapping サブセクションの Mode チェックボックスを有効にします。ドロップダウンメニューを使用して、そのプロパティを None から ACES に変更します。ACESトーンマッピングは、トーンマッピングの適用においては業界標準の方法です。これを使うと、プロジェクトの見た目をより映画のような感じに作れます。
4. 今シーンがやや暗い感じになっているのが分かります。これは、ACES のデフォルトの露出がゼロであるためです(詳細については、ドキュメントを参照してください)。これを修正する良い方法は、Post-exposure 機能を使用することです。Post-exposure は、デフォルトの露出を調整する方法です。
Tone サブセクションで、Post-exposure(EV) チェックボックスを有効にします。値を 1 に設定すると、シーンが明るくなります。
5. また、いくつかの色を変えることで、シーンを少し不気味にすることもできます。Color Grading セクションの途中で、 Trackballs と呼ばれるカラーサークルを見つけてください。
6. 各 Trackball の下にある Lift や Gamma、Gain のチェックボックスを有効にします。
Lift はシャドウの色に影響を与え、Gain は最も明るいハイライトの色を変え、Gamma は画像の色の中間(または中規模)のすべてをカバーします。
7. Trackballs の中心にある円をドラッグして、Game ビューの色を微調整します。Drag すると以下のようになります。
- Lift と Gamma の Trackballs は、 若干ブルー寄りです
- Gain のトラックボール は、若干イエロー寄りです
これにより、影に深みが増し、ライティングに温かみが加わります。
8. Color Grading のエフェクトを折りたたみます。
10. Bloom Effect の追加
ライトはかなり効果的ですが、まだ本物のライトのようには見えません。Bloom エフェクトをプラスして、素敵な輝きを演出しましょう。
1. Add effect… ボタンをクリックして、 Unity > Bloom の順に選択します。Bloom エフェクトのセクションを展開します。
2. セクションタイトルのすぐ下の All ショートカットを選択します。これで Bloom のすべての設定が有効になります。現在のところ、 Intensity(輝度)が十分に高くないため、実際には何も光っていません。
3. Intensity プロパティを 2.5 に設定すると、ライトの光で心地よい明るい輝きを作ります。
4. 他にも、ちょっとした輝きで見栄えがよく見えるかもしれないと感じるような明るめのオブジェクトを見ることができるかもしれません。Threshold プロパティを使用して、それらを Bloom エフェクトに追加できます。この値を下げると、エフェクトに明るさの少ないピクセルが追加されます。
Threshold を 0.75 に設定して、シーンにさらなる輝きを加えます。
5. Bloom Effect を折りたたみます。
11. Ambient Occlusion エフェクトの追加
ライトが明るく感じられるようになりましたが、このお化け屋敷は不気味な雰囲気を維持することが大切です。お化け屋敷のコーナーやひび割れを暗くする良い方法は、 Ambient Occlusion (アンビエントオクルージョン)のエフェクトを使用することです。アンビエントオクルージョンは、コーナーを暗くすることで、光がコーナーに届かないという現実世界での効果を模倣しています。
この効果を追加する手順は以下の通りです。
1. Add effect… ボタンをクリックし、 Unity > Ambient Occlusion の順に選択します。Ambient Occlusion エフェクトのセクションを展開します。
2. Ambient Occlusion の All ショートカットをクリックすると、必要な機能がすべて有効になります。
3. Bloom と同様に、動作を確認するには Intensity を設定する必要があります。Intensity プロパティを 0.5 に設定すると、部屋の隅にとても不気味な影ができます。
4. Thickness Modifier を使用すると、この効果を部屋全体にさらに広げることができます。Thickness Modifier プロパティを 3.5 に設定します。
これで、シーン内に配置された他の小道具の背後に大きな影の効果が広がっているのを確認できるはずです。
5. Ambient Occlusion エフェクトを折りたたみます。
12. Vignette(ビネット)エフェクトの追加
幾つかのエフェクトは、実際のカメラの視点からシーンがどのように見えるかをシミュレートします。最後の数回のエフェクトで、このようなカメラのレンズの効き方が変わってきます。まず、カメラレンズ自体の縁を暗くするビネットエフェクトを追加します。これを使うと、プレイヤーに焦点を当てるのに役立ち、ゲームをより閉所恐怖に感じさせます。
この効果を追加するには、以下の手順に従ってください。
1. Add effect… ボタンをクリックし、 Unity > Vignette の順に選択します。Vignette エフェクトのセクションを展開します。
2. Vignette の All ショートカットをクリックして、必要な機能をすべて有効にします。
3. ブルームやアンビエントオクルージョンと同様に、ビネットエフェクトには輝度が必要です。これは、効果が画面のどこまで広がるかを決定します。Intensity プロパティを 0.5 に設定します。
4. スムージングを増やすことで、さらに閉所恐怖や不気味さを感じさせることができます。Smoothness プロパティは、効果が画面の中心に向かって徐々にぼやけた見た目になる距離を決定します。Smoothness プロパティを 0.3 に設定します。
5. Vignette エフェクトを折りたたみます。
13. Lens Distortion エフェクトの追加
最後に加えるべきエフェクトは Lens Distortion(レンズ歪み)です。これにより、最終的にレンダリングされたフレームに歪みが発生し、スパイカメラを通してゲームを見ているように感じられるようになります。
この効果を追加するには、以下の手順に従ってください。
1. Add effect… ボタンをクリックし、 Unity > Lens Distortion の順に選択します。Lens Distortion エフェクトセクションを展開します。
2. Lens Distortion の All ショートカットをクリックすると、必要な機能がすべて有効になります。
3. 他のエフェクトと同様に、 Intensity はエフェクトの強さを制御します。Intensity を前後にスライドさせて、効果を確認してみてください。次に、 Intensity プロパティを 35 に設定します。
4. このエフェクトを使用すると、画像が歪んでしまった画面の端に視覚的なグリッチを生成することがあります。これを修正するには、レンダリングされたフレームを少しズームインするだけで、ビューからグリッチを取り除くことができます。
Scale プロパティを 1.1 に設定して、これを修正します。
5. シーンを保存します。
ポストプロセシングが完了しました!
14. まとめ
このチュートリアルでは、ゲームのビジュアルについて数多く扱いました。カメラの動きだけでなく、ビジュアルも変更し、ゲームを実にプロフェッショナルに見えるようにしました。ここでの作業がもたらした視覚的な違いをご覧ください。
前:
後:
次のチュートリアルでは、ゲームの UI(ユーザーインターフェース)に触れて、ゲームのエンディングを作成します。