Unityの3Dオブジェクトをクリックした場合に、オブジェクトに近い位置にカメラを切り替えたり(ズームイン)、逆に遠い位置にカメラを切り替える(ズームアウト)方法について紹介をします。
もう少しやる事を細かく深堀りすると、以下の様な挙動になります。
- オブジェクトにズームする方法は、オブジェクトをクリックすると、オブジェクトに近いカメラに有効カメラを切り替える
- オブジェクトからズームアウトする方法は、UIのボタンをクリックすると、オブジェクトに遠いカメラに有効カメラを切り替える
- カメラ自体は移動せずに、カメラ切り替えにより、ズーム&ズームアウトを模倣する
つまり、3Dアクションゲームの様にカメラがフレーム毎に移動する訳ではなくて、オブジェクトやボタンを押したらカメラが切り替わるという動作を実装してみます。
コンテンツ
Unityのカメラ切り替え(ズームイン&ズームアウト)のための準備
Unityのオブジェクトをクリックした際にカメラを切り替える(ズームイン&ズームアウトする)ための準備を紹介します。
カメラ切り替え(ズームイン&ズームアウト)の参考情報
今回は3Dオブジェクトにクリックをした際にカメラを切り替える方法を紹介していますが、実は同じ様な仕組み以前実装しています。これらも参考にしていただけるとカメラ切り替えの理解が深まると思います。
カメラのTransform情報(位置、回転)を変える事でカメラ位置を切り替える方法は以下になります。
今回はUnityで3Dカメラの視点を左右に切り替える方法をまとめます。 Unityの3Dシーンでは、カメラを切り替える方法はたくさん存在しますが、今回は以下の様な3Dカメラ視点の切り替えを実装してみます。 画面上の「右・ …
複数のカメラのアクティブ、非アクティブを切り替える事でカメラ位置を切り替える方法は以下になります。
※本記事の内容は、以下の記事の応用的な内容です。
今回はUnityで複数の3Dカメラを切り替える方法について解説をしたいと思います。 以前はUnity上の1つのカメラを使用してカメラの視点(位置、回転等のTransform情報)のみ切り替える方法を実践しました。 今回は …
3Dオブジェクトの配置
ズームイン&ズームアウトの対象となるオブジェクトを配置します。
Sceneビューの中央に青いボールを配置しました。
■オブジェクトを配置
ズームイン&ズームアウト用のカメラの配置
ズームアウト時とズームイン時のカメラを配置していきます。
今回はズームアウト時がデフォルトのメインカメラ(MainCamera)、ズームイン時が追加したサブカメラ(Camera1)になります。
■Hierarchyウィンドウ
■ズームアウト時のカメラ(メインカメラ)
■ズームイン時のカメラ(サブカメラ)
Unityのカメラの切り替え(ズームイン&ズームアウト)の考え方
Unityの3Dオブジェクトをクリックした際にカメラを切り替える(ズームイン&ズームアウトする)ための考え方について紹介します。
3Dオブジェクトにクリック判定を付与する
今回作成したオブジェクト(青いボール)をクリック判定できる様にします。
3Dオブジェクトをクリックできる様にするには一手間必要になります。詳細は以下の記事にまとめていますので参考にして下さい。
この記事ではUnityで3Dオブジェクトのクリック判定について解説していきたいと思います。 Unityの3Dオブジェクトのクリック判定はよく使用する処理にもかかわらず、2Dのクリックよりも少し手間が必要です。 ただ、実装 …
この後でクリック時にカメラが3Dオブジェクトにズームインする処理を付与します。
ズームアウトのためのボタンを作成する
3Dオブジェクトのズームインをしたら、元の位置(ズームアウト位置)に戻るためのボタンを作成します。
UIオブジェクトでボタン(Text文言:Return)を作成して配置しました。
■Returnボタンを追加
3DオブジェクトにズームするC#スクリプト
ズームイン時は以下の機能を持ったC#スクリプトを実行します。
一つの関数に処理をまとめたので、これをオブジェクトクリック時に呼び出す様にします。
- ズームアウト時のカメラを非アクティブにする
- ズームインした位置のカメラをアクティブにする
- Returnボタンをアクティブにする
■C#スクリプト
1 2 3 4 5 6 |
public void ActiveSubCamera1() { mainCamera.gameObject.SetActive(false); subCamera1.gameObject.SetActive(true); returnButton.gameObject.SetActive(true); } |
オブジェクトからズームアウトするC#スクリプト
ズームアウト時は以下の機能を持ったC#スクリプトを実行します。
一つの関数に処理をまとめたので、これを「Return」ボタンクリック時に呼び出す様にします。
- ズームイン位置のカメラを非アクティブにする
- ズームアウト位置のカメラをアクティブにする
- 「Return」ボタンを非アクティブにする
■C#スクリプト
1 2 3 4 5 6 |
public void ActiveMainCamera() { subCamera1.gameObject.SetActive(false); mainCamera.gameObject.SetActive(true); returnButton.gameObject.SetActive(false); } |
Unityのカメラ切り替え(ズームイン&ズームアウト)の実装
カメラを切り替えてズームイン、ズームアウトする機能を実装していきます。
カメラ切り替え(ズームイン&ズームアウト)のC#スクリプト
既にズームイン、ズームアウト時のスクリプトを紹介していますが、C#スクリプト全体としては以下の様な内容にしました。
■C#スクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraManager3 : MonoBehaviour { public Camera mainCamera = default; //メインカメラ(ズームアウト時) public Camera subCamera1 = default; //サブカメラ1(ズームイン時) public GameObject returnButton = default; //Returnボタン void Start() { //メインカメラを設定 mainCamera = Camera.main; //メインカメラを有効化する ActiveMainCamera(); } void Update(){} //関数:メインカメラを有効化 public void ActiveMainCamera() { subCamera1.gameObject.SetActive(false); mainCamera.gameObject.SetActive(true); returnButton.gameObject.SetActive(false); } //関数:サブカメラ1を有効化 public void ActiveSubCamera1() { mainCamera.gameObject.SetActive(false); subCamera1.gameObject.SetActive(true); returnButton.gameObject.SetActive(true); } } |
カメラマネージャーの作成
カメラを制御するカメラマネージャーオブジェクトを作成しておきます。
空のオブジェクト(名称:CameraManager)を作成して、先程のスクリプトをアタッチしています。
また、スクリプトのパラメータにメインカメラ(ズームアウト位置)、サブカメラ(ズームイン位置)、Returnボタンを設定します。
■スクリプトをアタッチしてパラメータ設定
3Dオブジェクトとボタンの動作を設定
最後に、ズームイン対象の3Dオブジェクトと、ReturnボタンにCameraManagerにアタッチしたC#スクリプトの対象関数を設定します。
- 3Dオブジェクト:ActiveMainCamera
- Returnボタン:ActiveSubCamera1
■3Dオブジェクトクリック時に「ActiveMainCamera」を呼び出す
■Returnボタンクリック時に「ActiveSubCamera1」を呼び出す
カメラ(ズームイン&ズームアウト)切り替えの動作確認
では実際に3Dカメラ切り替え時の動作確認をしてみましょう。
■動作確認
まとめ
今回はUnityの3Dオブジェクトをクリックした場合にズームインしたり、ズームアウトしたりする方法を紹介しました。
■今回実践した事のまとめ
- ズーム対象の3Dオブジェクトを作成
- C#スクリプトでズームイン&ズームアウトする処理を作成
- 3Dオブジェクトにクリック判定を付与して、ズームインする関数をアタッチ
- ズームアウトするボタンを作成して、ズームアウトする関数をアタッチ
今回やっている事は簡単に言えばカメラの切り替えになります。3Dオブジェクトをクリックしたり、UIを押したタイミングで、カメラを切り替えをする事で、実際にゲームをしている時の様なカメラ切り替えを実装する事ができます。
ぜひ参考にして使いこなしてみて下さい。