Unityでカメラをスクリプトから切り替えられるようにする

Unityで新しいカメラを作り、Main Cameraと切り替えが出来るようにスクリプトを組んでいきたいと思います。

カメラを切り替える為には、現在使っているカメラを使用停止、切り替えるカメラを停止状態から使用状態へと変更する必要があります。

複数のカメラを切り替える事が出来れば、ゲームの視点を切り替える機能を搭載する事が出来るようになります。

スクリプトを組む前にまず使用停止状態と使用状態を手作業で切り替えてみます。
何の事はないんですが、インスペクタ上のコンポーネントの名前の左にチェックボックスがあり、そのチェックを外すと停止状態になります。

コンポーネント毎にチェックを外して機能しないようにも出来ますし、シーンに配置したインスタンスのインスペクタの名前の左のチェックボックスを外した場合、インスタンス自身が存在しない状態に出来ます。

ゲームオブジェクト、コンポーネントのオンオフ


これはゲーム開始前の設定として手動で機能のOn、Offをするだけなので、ゲーム中に機能のOn、Offをするには、スクリプトで行う必要があります。

スポンサーリンク

カメラの切り替えをスクリプトで行う為の準備

メインカメラは「masasi」君の頭の少し後ろからの視点になっているので、新しいカメラを作成し、「masasi」君からより遠くの視点にします。
この二つのカメラをスクリプトから切り替えが出来るようにします。

まずはMain Cameraより少し遠くからみるOther Cameraを作ります。

カメラを作成する方法

上のように名前をOther Cameraとしインスペクタ上のOther Cameraの左側のチェックを外してゲーム起動時には機能しないようにします。

また、カメラは「masasi」君をフォローして動くようにしパラメータを設定してMain Cameraより少し遠めに配置します。

キャラクターを遠目から移す位置に移動

次にMain CameraとOther Cameraを切り替えるスクリプトを取りつけるゲームオブジェクトを配置します。

カメラ自体にスクリプトを取りつけた場合、カメラを非アクティブにした時にスクリプトも機能しなくなる為、全体を管理するスクリプトは別のインスタンスに設定していきます。

Create Emptyで空のオブジェクトを作り、名前を「Script」とします。
Scriptのインスペクタ上からAdd ComponentでNew Script、名前を「ChangeCamera」とします。

ではChangeCameraのスクリプトを書いてみます。

カメラ切り替えスクリプトを実現する為にはどうすればいいのか?

まずは切り替えるカメラのゲームオブジェクトが必要なので、publicでメインカメラと他のカメラが設定出来るようにします。

public var mainCamera : GameObject;
public var otherCamera : GameObject;

これでインスペクタ上でMain CameraとOther Cameraを設定出来るようになります。

カメラの切り替えは数字の1を押した時に行われるようにします。
となると、Update関数内でキーボードの「1」が押されたかどうかの判定が必要になります。
キーの判定には

Input.GetKeyDown(キー)

を使います。
オブジェクトのOn・Offは

ゲームオブジェクト.SetActive(true)でOn
ゲームオブジェクト.SetActive(false)でOff

に出来ます。ゲームオブジェクト自身のOn・OffではなくゲームオブジェクトのコンポーネントのOn・Offは

ゲームオブジェクトのコンポーネント.enabled = true
ゲームオブジェクトのコンポーネント.enabled = false

とします。

今回は1のキーを押すたびにMainとOtherのカメラの切り替えをするので、Onの時はOff、Offの時はOnにするという処理が必要になります。

そのカメラ自身がOnの時、つまりアクティブであるかどうかを取得出来るのが、

ゲームオブジェクト.activeSelf

というプロパティです。
プロパティは持ってる情報、みたいな感じです。この場合は「ゲームオブジェクトがアクティブかどうかの情報」ですね。

という事は、このプロパティ値を取得し、反転させた値をSetActiveで指定すれば良いという事になります。
値の反転は!(エクスクラメーションマーク)で出来ます。

切り替えの方法を踏まえてスクリプトを記述する

Update関数内は

と記述します。

最終的なコードは

となります。

それではUnityに戻ってChangeCameraスクリプトのインスペクタにMain CameraとOther Cameraをドラッグ&ドロップしましょう。

スクリプトにカメラを設定する

上のようにスクリプトにカメラの設定をしたら、Unityの実行ボタンを押して試してみます。
最初はMain Cameraの視点ですが、数字の1を打つとOther Cameraに切り替わり、もう一度押せばMain Cameraに切り替わるようになりました。

カメラ切り替えをスクリプトで出来ると何がよいか?

今回は少し遠めにカメラを切り替えるという事でしたが、Other Cameraの位置を変えたり、さらにカメラを増やすことによって、ユーザーがカメラの視点切り替えをする機能が作れると思います。

FPS(FirstPersonShooter)とTPS(ThirdPersonShooter)をカメラの切り替えだけで実現出来てしまうので感慨深いものがありますねぇ・・・・。

次回はライトをちょっとやってみます。