今回のテーマ
- Cinemachine 入門
- 何か(キャラクター)を追いかけるカメラを作る
学習環境のセットアップ
Unity 2018.4 以降を想定しています。
- 新たにプロジェクトを作る
- Package Manager から Cinemachine, ProBuilder をインポートする
- アセットパッケージ LearnCinemachine.unitypackage をダウンロード・インポートする
解説動画
学習環境を確認する
以下のようにして、環境が正しくセットアップされたか確認しましょう。
- Assets/_LearningCinemachine/2D/ にあるシーン "2D with Cinemachine" と "2D" をそれぞれ開いて実行してみましょう
- "2D with Cinemachine" は Cinemachine の機能を使っており、"2D" は使っていません
- シーン "2D" に Cinemachine の機能を使って "2D with Cinemachine" のようにする方法を学びます
- Assets/_LearningCinemachine/3D/ にあるシーン "3D with Cinemachine" と "3D" をそれぞれ開いて実行してみましょう
- "3D with Cinemachine" は Cinemachine の機能を使っており、"3D" は使っていません
- シーン "3D" に Cinemachine の機能を使って "3D with Cinemachine" のようにする方法を学びます
2D ゲームに対して Cinemachine を使う
以下の手順で、2D ゲームに対して Cinemachine を使い、カメラがキャラクターを追うようにしてみましょう。
- シーン "2D" を開く
- Scene ビューが 2D モードになっていることを確認する
- 2D モードになっていないと、Cinemachine のカメラが傾いてしまいます
- メニューの Cinemachine > Create 2D Camera を選び、仮想カメラ (Virtual Camera, vcam) を追加する
- 仮想カメラのオブジェクト名は、既定では CM vcam1 になる
- 仮想カメラの CinemachineVirtualCamera コンポーネントの設定 "Follow" に、Spaceship オブジェクトをアサインする
- これで、カメラが Spaceship を追うようになります
- シーンを実行して確認してみましょう
- シーンを実行している最中に、CinemachineVirtualCamera コンポーネントの設定 "Body" - Lookahead Time, Lookahead Smoothing の値を調整してみましょう
- Lookahead は「前方を見る」という意味です
- Lookahead を設定することにより、進行方向を広く撮影することができます
- なお、CinemachineVirtualCamera コンポーネントの設定 "Save During Play" にチェックを入れておくと、実行中に変更した設定はそのままシーンに保存されます
- ただし、ストレージには保存されないので、保存されていない印 (*) が付きます
- Main Camera オブジェクトの Camera コンポーネントの設定 "Projection" を Orthographic から Perspective に変えてシーンを実行してみましょう
- 雲に遠近感が出て、2D ゲームの画面に空間的な奥行を表現できます
3D ゲームに対して Cinemachine を使う
カメラにキャラクターを追従させる
まずは、以下の手順で仮想カメラにキャラクターを追従させる設定をしてみましょう。
- シーン "3D" を開く
- メニューの Cinemachine > Create Virtual Camera を選び、仮想カメラを追加する
- 仮想カメラ (CM vcam1 オブジェクト) の CinemachineVirtualCamera コンポーネントの設定 "Follow" と "Look At" に Player オブジェクトをアサインする
- CinemachineVirtualCamera コンポーネントの設定 "Body" - Follow Offset の相対座標から、カメラが Follow(追従)し、Look At(見る)する設定になっています
- シーンを実行してキャラクターを動かしてみましょう
- 前方に移動する時は問題ないが、回転すると回転が速すぎる問題があることがわかるでしょう
- この問題を解決していきましょう
- CinemachineVirtualCamera コンポーネントの設定 "Body" - Yaw Damping の設定を大きくして挙動の変化を見てみましょう
- Damping とは「動きをどれくらい遅らせるか(減衰)という意味があります
- Yaw とは「Y 軸の回転」という意味です
- つまり Yaw Damping とは「Y 軸が回転した時、カメラの追従をどれくらい遅らせるか」という意味になります
- CinemachineVirtualCamera コンポーネントの設定 "Body" - Follow Offset の Y と Z の値を変えてみましょう
- これにより、カメラが "Follow" する対象からどの相対位置で追いかけるかを変えられます
- Y = 3, Z = -5 くらいがちょうどいいでしょう
- CinemachineVirtualCamera コンポーネントの設定 "Aim" - Tracked Object Offset の Y の値を変えてみましょう
- これにより、カメラが "Look At" する対象からどの相対位置を「見る」かを変えられます
- Y = 1.5 くらいがちょうどいいでしょう
カメラが壁を突き抜けないようにする
現状では、カメラが壁を突き抜けてしまいます。ジャンプしたり、「壁際で壁に背を向ける」ように位置すると、それがわかります。Cinemachine の拡張機能 "CinemachineCollider" を使うと、カメラが壁を突き抜けないようにすることができます。以下の手順でやってみましょう。
- CinemachineVirtualCamera コンポーネントの一番下にある設定 "Extensions" の Add Extension から CinemachineCollider を選ぶ
- Cinemachine Collider コンポーネントが追加されます
- この状態で、ジャンプしたり壁際で壁に背を向けたりしてみましょう
- カメラが壁を突き抜けないような動きになっているはずです
- Cinemachine Collider コンポーネントの設定 "Strategy" を変えてみましょう
- カメラが壁に衝突した時、どのような動きをするかが変わります
- 各設定の違いについては公式ドキュメントに説明があります
参考資料
ドキュメントは現時点で英語のものしかありませんが、検索すれば日本語の記事もいくつか見つかります。