【Unity】複数のカメラを切り替えする方法解説!

URLをコピーする
URLをコピーしました!

CGBoxの一部の記事にはアフィリエイト広告が含まれております。

こんにちは!Unityで複数のカメラを扱うにはどうすればいいんだろう、と困った経験がありませんか?

Unityには簡単に複数のカメラを設置して切り替える方法が用意されているんです。

本記事ではそんな複数のカメラを切り替えする方法について解説していきます。

目次

複数のカメラを切り替えする方法

早速、複数のカメラを切り替えする方法を解説していきましょう。

今回はカメラの切り替えが分かりやすいように、予め以下のようなCylinderとSphereオブジェクトをワールドに配置しておきます。

一つのカメラは黄色のオブジェクトを、もう一つのカメラは青のオブジェクトを映す設定にしていきます。

このように3Dオブジェクトの色を変更する方法については下の記事で解説しています。

あわせて読みたい
【Unity】オブジェクトのマテリアルを変更する方法 こんにちは!Unityで作成したオブジェクトはデフォルトのままだと見た目が少し味気ないですよね。 色を変えたくても、設定方法が分からない!となることがあるかと思い...

複数のカメラを配置する

まずは最初から配置されているMain Cameraに加えて、2台目のカメラを作りましょう。

画面上部GameObject→Cameraをクリックします。

分かりやすいように名前をSub Cameraとしておきます。

Depthの値でカメラを切り替える

さて、現状カメラがMainとSubの二つヒエラルキーに存在しますが、ゲームビューに表示されているのはどちらのカメラの映像でしょうか?

結論から言えば、カメラの設定項目にあるDepthの値が大きい方が優先して表示されます。

Depthは描画優先度を表しており、最も高い値を持つカメラが有効になります。

値を確認してみると、Main CameraのDepthが-1、Sub CameraのDepthがとなっているため、Sub Cameraの映像が表示されています。

MainCameraのDepth
SubCameraのDepth

Main Cameraの値を1にすれば下のようにMain Cameraの映像が描画されるようになります。

カメラをアクティブ、非アクティブにして切り替える

カメラオブジェクトをアクティブ、非アクティブにすることでもカメラの映像を切り替えることができます。

Depthの設定によりMain Cameraが表示されている状態でも、Main Cameraを非アクティブにすればSub Cameraに映像が自動的に切り替わります。

ただし、すべてのカメラを非アクティブにしてしまうとゲームビューに表示する映像がなくなってしまいます。

少なくとも一つはカメラをアクティブにしておくようにしましょう。

スクリプトでカメラを切り替える

ここでは、スクリプトからカメラを切り替える方法を解説します。

先ほど紹介した、映したいカメラをアクティブ、映さないカメラを非アクティブにする方法でカメラの切り替えを実現します。

まずはカメラを管理するゲームオブジェクトを作っておきましょう。

GameObject→CreateEmptyから空のゲームオブジェクトを作成し、

名前をCameraManagerと変更しておきます。

次にカメラを操作するスクリプトを作成していきます。

CameraChangeという名前で下のようなスクリプトを作成します。

スペースを押すと、メインカメラとサブカメラのアクティブ・非アクティブが入れ替わるようになっています。

作成したスクリプトをCameraManagerにドラッグアンドドロップします。

その後、CameraManagerのインスペクターを開きます。

下のように、Main CameraとSub Cameraに対応するゲームオブジェクトをドラッグ&ドロップしましょう。

これでカメラを切り替える準備が整いました。

プログラムを実行してスペースキーを押してみます。

このように、スペースキーを押す度にメインカメラとサブカメラのアクティブ・非アクティブが切り替わり、映像も切り替わるようになりました。

ヒエラルキー上で暗い灰色の文字になっているオブジェクトは、非アクティブになっていることを表しています。

カメラを切り替えするボタンの作り方

スペースキーを押す度にカメラを切り替える方法を紹介しましたが、ここではカメラを切り替えするボタンを実装する方法を紹介します。

先ほどのCameraChangeスクリプトのUpdate関数を、下のようにCameraButton関数に変更します。

GameObject→UI→Button – TextMeshProからボタンを作成します。

すると画面にこのようなボタンが表示されたかと思います。

Buttonのインスペクターを開き、OnClickの+ボタンを押しましょう。

次に、下のようにCameraManagerゲームオブジェクトをOnclickのNoneとなっているところにドラッグ&ドロップしましょう。

最後に、NoFunctionとなっているところからCameraButton()を設定しましょう。

ここまで設定できたらプログラムを実行してボタンをクリックしてみましょう。

このように、ボタンを押す度にカメラを切り替えることができるようになりました。

ボタンについての詳しい設定方法は下の記事で解説しています。

あわせて読みたい
【Unity】ボタンにイベントやアニメーションを設定する方法 こんにちは!アプリやゲームにボタン機能は必須ですよね。 Unityでは標準機能で簡単にボタンが作れるんです! 本記事ではボタンにイベントやアニメーションを設定する方...

カメラの切り替え時にフェードアニメーションを実装する

Unityには、CrossFadeAlphaというUIの透明度を変化させることができる関数が用意されています。

これを徐々に変化させることでフェードアニメーションが実装できます。

具体的なスクリプトや実装方法については以下のサイトが参考になります。

ゴマちゃんフロンティア
【Unity】シーン遷移時のカメラのフェードイン・アウト処理の実装 | ゴマちゃんフロンティア というわけで、今回はUnityにおけるシーン遷移時のカメラのフェードイン・アウト処理に関するお話です。 シーン遷移時のフェードといえば、iTweenのCameraFadeTo()を使って...

なお、シーンの切り替え時にフェードを設定できる便利な無料アセットもあります。

あわせて読みたい
Simple Fade Scene Transition System | Particles/Effects | Unity Asset Store Use the Simple Fade Scene Transition System tool for your next project. Find this and more particle & effect tools on the Unity Asset Store.

おすすめアセット

タイムラインでカメラを切り替えできるアセット

Cinemachine

CinemachineはUnityでカメラを操作するための無料アセットです。

Package Manager内、Unity Registryを選択しCinemachineと検索するとインストール画面が出てきます。

Cinemachineを使えば、タイムラインを利用してカメラを切り替えることができます。

具体的な設定方法については下の記事が参考になります。

umi studio blog
【Unity】Cinemachineを使ってタイムライン(Timeline)でカメラを切り替える方法! はじめにCinemachine はカメラをスムーズに切り替えたり、追従したり、様々なカメラ制御が簡単にできるUnity公式無料アセットです。本記事では、TimelineでのCinemachineを...

アクションゲームのカメラワークが簡単に実装できるアセット

Camera Controller

あわせて読みたい
Camera Controller | Camera | Unity Asset Store Get the Camera Controller package from ootii and speed up your game development process. Find this & other Camera options on the Unity Asset Store.

Camera Controllerは、アクションゲームに不可欠な多様な角度からのカメラワークを楽に実装できるアセットです。

1人称視点や3人称視点はもちろん回転も自由に行え、戦闘用のカメラワークも用意されています。

様々なカメラワークを簡単に実装したい方におすすめのアセットです。

まとめ

以上、複数のカメラを切り替えする方法を解説してきました。

カメラワークはゲーム作りをする上で非常に重要な要素です。

カメラの切り替え方法についてはぜひマスターしておきたいですね!


この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Unityメインの個人開発者。UnityでAIを学習させてみたり、野球ゲームを作ってみたりと色々してました。現在はライターとして、Unityで開発する人の力になる記事が書けるよう奮闘中。

目次
閉じる