【Unity】主観カメラへの切り替えと、プレイヤーの移動方法について


主観カメラへの切り替えと、プレイヤーの移動方法について


以前、Unityでカメラの向きを基準に移動する方法と、追従して回転できるカメラの実装 や
Unityで動きのあるカメラをドリーイン・ドリーアウト(寄ったり・引いたり)させる方法 を紹介いたしましたが、
このシーンに、主観カメラに切り替える機能も実装してみました。
またその際に、プレイヤーの移動も切り替わるようにしてみました。

© Unity Technologies Japan/UCL

※使用しているUnityのバージョンは5.6.2f1です。

カメラの切り替え処理


切り替えに際して、主観カメラは別途用意することにしました。

”First Person Camera”として、Playerの子要素に配置します。
子要素にすることで、主観カメラはプレイヤーと一緒に動いてくれます。

※ ルート階層にある”Third Person Camera”が、第三者視点カメラです。

この2つのカメラをスクリプトから切り替えられるようにしましょう。
下記の処理を、こちらの記事で解説したプレイヤー用スクリプトに追記します。
※FixedUpdate内は、条件式だけ一部追記


	[SerializeField]
	private GameObject firstPersonCamera;	// インスペクターで主観カメラを紐づける
	[SerializeField]
	private GameObject thirdPersonCamera;   // インスペクターで第三者視点カメラを紐づける

	void Update() {
		// スペースキーでカメラを切り替える
		if (Input.GetKeyDown(KeyCode.Space)) {
							// ↓現在のactive状態から反転 
			firstPersonCamera.SetActive(!firstPersonCamera.activeInHierarchy);
			thirdPersonCamera.SetActive(!thirdPersonCamera.activeInHierarchy);
		}
	}

	void FixedUpdate() {
		// キャラクターの向きは、サードパーソンカメラが有効な時だけ変更する
		if (moveForward != Vector3.zero && thirdPersonCamera.activeInHierarchy) {
			transform.rotation = Quaternion.LookRotation(moveForward);
		}
	}

切り替えはGameObject.SetActiveメソッドを使用して、片方を有効化したら、もう片方は無効化しています。
その際、引数のbool値には、現在のactive状態を反転するという記述にすることで、スクリプトがスッキリします。

active状態を取得するプロパティは、activeInHierarchyを使用しています。
このプロパティの詳しい解説は、下記の関連記事をお読みください。
関連記事GameObjectのactive状態を取得する時の注意点

また、プレイヤーを移動方向に向ける処理は、主観カメラのときには動作しないようにします。
この処理を含まないと、例えば主観カメラの時に後ろ方向に移動させた場合などに、視点の向きは変わらないのにキャラクターだけ後ろに向いてしまい、挙動がおかしくなります。

スクリプトが正しく動作すれば、主観カメラ時にはこんな感じで動きます。

以上です。

最近よく読まれている記事

【Unityのプログラミング力向上】C# 練習問題 4
【Unityのプログラミング力向上】C# 練習問題 3

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP