バーチャル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切り替えの方法を調べたら改めて書き直すかも。
追記:シーンビューの視点をカメラに代入する方法など
シーンビューで良い感じのアングルを探すと思うけど、「ビューに揃える」を使うとシーンカメラのトランスフォーム情報をカメラに代入できます。
参考にしてみてね。



