Unityでカメラ切り替えをするスクリプトを書いたよ。5つのカメラを数字キーで切り替え

Unity

 

バーチャル3Dクリエイター神部まゆみです(*^-^*)

 

Unityでカメラ切り替えをするスクリプトを書いたから、自分用にメモしておくよ。

「動けばいい」と考えて書いただけだからスマートなコードじゃないけど、参考にできれば参考にしてね。

————-PR———————-

現在、人気商品が最大70%以上オフで買えるアマゾンタイムセールをやってるみたいです。

amazonタイムセール祭り 最大70%以上オフ

ゲーミングノートなども安くなっているので、欲しい商品はこの機会に買っておくと良いかも。

————————————-

機能:キーボード上の1~5キーを押すことでカメラを切り替えできる

こんな感じ。

 

カメラの配置はこんな感じで。

 

動画を作るときに視点変更する用に作った感じ。

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

unity 2020.1.1で作成しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraChange : MonoBehaviour {
 
    private GameObject MainCamera;      //メインカメラ格納用

    //使わないカメラはコメントアウトしてね
    private GameObject Camera2;       //カメラ2格納用 
    private GameObject Camera3;       //カメラ3格納用 
    private GameObject Camera4;       //カメラ4格納用 
    private GameObject Camera5;       //カメラ5格納用 
 
 
    //呼び出し時に実行される関数
    void Start () {
        //メインカメラを取得
        MainCamera = GameObject.Find("MainCamera");

        //使わないカメラはコメントアウトしてね
        Camera2 = GameObject.Find("Camera2");
        Camera3 = GameObject.Find("Camera3");
        Camera4 = GameObject.Find("Camera4");
        Camera5 = GameObject.Find("Camera5");


        //カメラ2以降を非アクティブに。使わないカメラはコメントアウトしてね
        Camera2.SetActive(false);
        Camera3.SetActive(false);
        Camera4.SetActive(false);
        Camera5.SetActive(false);
    }
    
 
    //単位時間ごとに実行される関数
    void Update () {

        //キーボード上1キーが押されたら、メインカメラをアクティブに
        if(Input.GetKeyDown(KeyCode.Alpha1)){
            //メインカメラをアクティブに設定
            MainCamera.SetActive(true);

            //他のカメラを非アクティブに。使わないカメラはコメントアウトしてね
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }


        //【カメラ2を使わない場合コメントアウトここから】
        //キーボード上2キーが押されたら、カメラ2をアクティブに
        if(Input.GetKeyDown(KeyCode.Alpha2)){
            //カメラ2をアクティブに設定
            Camera2.SetActive(true);

            //他のカメラを非アクティブに。使わないカメラはコメントアウトしてね
            MainCamera.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }
        //【カメラ2を使わない場合コメントアウトここまで】


        //【カメラ3を使わない場合コメントアウトここから】
        //キーボード上3キーが押されたら、カメラ3をアクティブに
        if(Input.GetKeyDown(KeyCode.Alpha3)){
            //カメラ3をアクティブに設定
            Camera3.SetActive(true);

            //他のカメラを非アクティブに。使わないカメラはコメントアウトしてね
            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera4.SetActive(false);
            Camera5.SetActive(false);
        }
        //【カメラ3を使わない場合コメントアウトここまで】


        //【カメラ4を使わない場合コメントアウトここから】
        //キーボード上4キーが押されたら、カメラ4をアクティブに
        if(Input.GetKeyDown(KeyCode.Alpha4)){
            //カメラ4をアクティブに設定
            Camera4.SetActive(true);

            //他のカメラを非アクティブに。使わないカメラはコメントアウトしてね
            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera5.SetActive(false);
        }
        //【カメラ4を使わない場合コメントアウトここまで】


        //【カメラ5を使わない場合コメントアウトここから】
        //キーボード上5キーが押されたら、カメラ5をアクティブに
        if(Input.GetKeyDown(KeyCode.Alpha5)){
            //カメラ5をアクティブに設定
            Camera5.SetActive(true);

            //他のカメラを非アクティブに。使わないカメラはコメントアウトしてね
            MainCamera.SetActive(false);
            Camera2.SetActive(false);
            Camera3.SetActive(false);
            Camera4.SetActive(false);
        }
        //【カメラ5を使わない場合コメントアウトここまで】

    }
}

 

力技で書いただけだからもっと短く書けると思うけど、私は動画撮るのに使いたいだけだから動けばいいやって感じで。

特に50行目以降は繰り返しだから、for文か何かで回してゴッソリ削れそう( ̄▽ ̄;)

使い方とか注意点など

カメラの名前を合わせるか書き換える

5つまでのカメラ切り替えに対応していて、カメラの名前は

  • Maincamera
  • Camera2
  • Camera3
  • Camera4
  • Camera5

としてあるのでこれに合わせるか、適宜書き換えてください。

使わないカメラを操作するコードはコメントアウトしたほうがいいかも ※しなくても一応動くっぽい

そのままでも一応動くみたいだけど、存在しないカメラを参照することになるから、 NullReferenceException: Object reference not set to an instance of an object のエラーが出る。

私みたいに動画撮りたいだけなら無視でもいいとは思うけど、ゲーム開発とかする場合はエラーは潰しておいた方がいいと思う。

ゲーム開発みたいにやることがたくさんあるとエラーもたくさん出る可能性があるから、問題の切り分けが難しくなってくるからね。

一応コードには注釈をコメントで書いておいたよ。

使い方は、適当に空のオブジェクトを作成してアタッチすればOK

1~5キーじゃなく他のキーに割り当てたい場合は、unityのKeyCodeを見て書き換えればOK

KeyCode - Unity スクリプトリファレンス
Key codes returned by Event.keyCode. These map directly to a physical key on the keyboard.

カメラのTarget DisplayはすべてDisplay1で

ターゲットディスプレイを切り替えるのではなく、単純にインスペクターでカメラをオンオフする方式なので…。

んーこれ作ってから後で気付いたんだけど、あんまりスマートなやり方じゃないね(;^_^A

まぁ動いてるからいいけど、Target Display切り替えの方法を調べたら改めて書き直すかも。

 

 

参考にしてみてね。

 

タイトルとURLをコピーしました