CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Unity】複数のカメラを切り替えする方法解説!
こんにちは!Unityで複数のカメラを扱うにはどうすればいいんだろう、と困った経験がありませんか?
Unityには簡単に複数のカメラを設置して切り替える方法が用意されているんです。
本記事ではそんな複数のカメラを切り替えする方法について解説していきます。
複数のカメラを切り替えする方法
早速、複数のカメラを切り替えする方法を解説していきましょう。
今回はカメラの切り替えが分かりやすいように、予め以下のようなCylinderとSphereオブジェクトをワールドに配置しておきます。
一つのカメラは黄色のオブジェクトを、もう一つのカメラは青のオブジェクトを映す設定にしていきます。
このように3Dオブジェクトの色を変更する方法については下の記事で解説しています。
複数のカメラを配置する
まずは最初から配置されているMain Cameraに加えて、2台目のカメラを作りましょう。
画面上部GameObject→Cameraをクリックします。
分かりやすいように名前をSub Cameraとしておきます。
Depthの値でカメラを切り替える
さて、現状カメラがMainとSubの二つヒエラルキーに存在しますが、ゲームビューに表示されているのはどちらのカメラの映像でしょうか?
結論から言えば、カメラの設定項目にあるDepthの値が大きい方が優先して表示されます。
Depthは描画優先度を表しており、最も高い値を持つカメラが有効になります。
値を確認してみると、Main CameraのDepthが-1、Sub CameraのDepthが0となっているため、Sub Cameraの映像が表示されています。
Main Cameraの値を1にすれば下のようにMain Cameraの映像が描画されるようになります。
カメラをアクティブ、非アクティブにして切り替える
カメラオブジェクトをアクティブ、非アクティブにすることでもカメラの映像を切り替えることができます。
Depthの設定によりMain Cameraが表示されている状態でも、Main Cameraを非アクティブにすればSub Cameraに映像が自動的に切り替わります。
ただし、すべてのカメラを非アクティブにしてしまうとゲームビューに表示する映像がなくなってしまいます。
少なくとも一つはカメラをアクティブにしておくようにしましょう。
スクリプトでカメラを切り替える
ここでは、スクリプトからカメラを切り替える方法を解説します。
先ほど紹介した、映したいカメラをアクティブ、映さないカメラを非アクティブにする方法でカメラの切り替えを実現します。
まずはカメラを管理するゲームオブジェクトを作っておきましょう。
GameObject→CreateEmptyから空のゲームオブジェクトを作成し、
名前をCameraManagerと変更しておきます。
次にカメラを操作するスクリプトを作成していきます。
CameraChangeという名前で下のようなスクリプトを作成します。
using UnityEngine;
public class CameraChange : MonoBehaviour
{
public GameObject mainCamera;
public GameObject subCamera;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)){
if(mainCamera.activeSelf){
mainCamera.gameObject.SetActive(false);
subCamera.gameObject.SetActive(true);
}
else{
mainCamera.gameObject.SetActive(true);
subCamera.gameObject.SetActive(false);
}
}
}
}
スペースを押すと、メインカメラとサブカメラのアクティブ・非アクティブが入れ替わるようになっています。
作成したスクリプトをCameraManagerにドラッグアンドドロップします。
その後、CameraManagerのインスペクターを開きます。
下のように、Main CameraとSub Cameraに対応するゲームオブジェクトをドラッグ&ドロップしましょう。
これでカメラを切り替える準備が整いました。
プログラムを実行してスペースキーを押してみます。
このように、スペースキーを押す度にメインカメラとサブカメラのアクティブ・非アクティブが切り替わり、映像も切り替わるようになりました。
ヒエラルキー上で暗い灰色の文字になっているオブジェクトは、非アクティブになっていることを表しています。
カメラを切り替えするボタンの作り方
スペースキーを押す度にカメラを切り替える方法を紹介しましたが、ここではカメラを切り替えするボタンを実装する方法を紹介します。
先ほどのCameraChangeスクリプトのUpdate関数を、下のようにCameraButton関数に変更します。
using UnityEngine;
public class CameraChange : MonoBehaviour
{
public GameObject mainCamera;
public GameObject subCamera;
public void CameraButton()
{
if(mainCamera.activeSelf){
mainCamera.gameObject.SetActive(false);
subCamera.gameObject.SetActive(true);
}
else{
mainCamera.gameObject.SetActive(true);
subCamera.gameObject.SetActive(false);
}
}
}
GameObject→UI→Button – TextMeshProからボタンを作成します。
すると画面にこのようなボタンが表示されたかと思います。
Buttonのインスペクターを開き、OnClickの+ボタンを押しましょう。
次に、下のようにCameraManagerゲームオブジェクトをOnclickのNoneとなっているところにドラッグ&ドロップしましょう。
最後に、NoFunctionとなっているところからCameraButton()を設定しましょう。
ここまで設定できたらプログラムを実行してボタンをクリックしてみましょう。
このように、ボタンを押す度にカメラを切り替えることができるようになりました。
ボタンについての詳しい設定方法は下の記事で解説しています。
カメラの切り替え時にフェードアニメーションを実装する
Unityには、CrossFadeAlphaというUIの透明度を変化させることができる関数が用意されています。
これを徐々に変化させることでフェードアニメーションが実装できます。
具体的なスクリプトや実装方法については以下のサイトが参考になります。
なお、シーンの切り替え時にフェードを設定できる便利な無料アセットもあります。
おすすめアセット
タイムラインでカメラを切り替えできるアセット
Cinemachine
CinemachineはUnityでカメラを操作するための無料アセットです。
Package Manager内、Unity Registryを選択しCinemachineと検索するとインストール画面が出てきます。
Cinemachineを使えば、タイムラインを利用してカメラを切り替えることができます。
具体的な設定方法については下の記事が参考になります。
アクションゲームのカメラワークが簡単に実装できるアセット
Camera Controller
Camera Controllerは、アクションゲームに不可欠な多様な角度からのカメラワークを楽に実装できるアセットです。
1人称視点や3人称視点はもちろん回転も自由に行え、戦闘用のカメラワークも用意されています。
様々なカメラワークを簡単に実装したい方におすすめのアセットです。
まとめ
以上、複数のカメラを切り替えする方法を解説してきました。
カメラワークはゲーム作りをする上で非常に重要な要素です。
カメラの切り替え方法についてはぜひマスターしておきたいですね!