【Unity】主観カメラへの切り替えと、プレイヤーの移動方法について
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
主観カメラへの切り替えと、プレイヤーの移動方法について
以前、Unityでカメラの向きを基準に移動する方法と、追従して回転できるカメラの実装 や
Unityで動きのあるカメラをドリーイン・ドリーアウト(寄ったり・引いたり)させる方法 を紹介いたしましたが、
このシーンに、主観カメラに切り替える機能も実装してみました。
またその際に、プレイヤーの移動も切り替わるようにしてみました。
© Unity Technologies Japan/UCL
※使用しているUnityのバージョンは5.6.2f1です。
[Unity_317×90]
カメラの切り替え処理
”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】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発