バーチャル3Dクリエイター神部まゆみです(*^-^*)
Unityでカメラ切り替えをするスクリプトを書いたから、自分用にメモしておくよ。
「動けばいい」と考えて書いただけだからスマートなコードじゃないけど、参考にできれば参考にしてね。
機能:キーボード上の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
カメラのTarget DisplayはすべてDisplay1で
ターゲットディスプレイを切り替えるのではなく、単純にインスペクターでカメラをオンオフする方式なので…。
んーこれ作ってから後で気付いたんだけど、あんまりスマートなやり方じゃないね(;^_^A
まぁ動いてるからいいけど、Target Display切り替えの方法を調べたら改めて書き直すかも。
参考にしてみてね。