本講座はUnityで3Dアクションゲームの作り方について説明していきます。前回はプレイヤーの移動のスマホ操作の作り方について解説してきました。
前回の記事:
第7回目ではプレイヤーを写しているカメラの視点を移動させたり、回転操作ができるようにしていきましょう。
なお今回もスマホ操作を検証するために、UnityRemoteというアプリをダウンロードしておくと便利です。
UnityRemoteについて :
もしくは、お手持ちのスマホにビルドしてテストしましょう。
では始めていきます。
プレイヤーの追跡機能の作成
今回はスマホ操作でカメラをプレイヤーの周囲で回転させたり、高さの変更をしたりしていきます。移動回転してもプレイヤーを写し続けてほしいので、まずはカメラが常にプレイヤーを写し続けるようにしていきます。
カメラオブジェクトの構成
まずはプレイヤーを写しているカメラを操作しやすいように階層構造にしていきます。こうすることで同じオブジェクトに色々な操作をして予想とは違う影響が出ることを防ぐことができます。
では作成していきましょう。今回行う操作は、
1 2 3 4 |
・プレイヤーの移動に合わせてカメラを移動 ・スマホ操作によってプレイヤーの周りを回転 ・スマホ操作によって高さを変更 ・常にプレイヤーを写し続ける |
この4つです。「常にプレイヤーを写し続ける」はカメラを直接動かしますので、他の3つの操作を行うために階層を作っていきます。
まず空オブジェクトを3つ作成し、このオブジェクトの名前を「CameraRoot」「RotationRoot」「HeightRoot」とします。
もしこれらのオブジェクトの「Transform」に値が入っている場合はすべてPosition、Rotationを0、Scaleを1にしておきましょう。
そして、「CameraRoot」の子に「RotationRoot」。「RotationRoot」の子に「HeightRoot」を配置します。その後元々配置されている「MainCamera」を「HeightRoot」の子に配置しましょう。
これらを上記の役割にあてはめると
1 2 3 4 |
・プレイヤーの移動に合わせてカメラを移動 = CameraRoot ・スマホ操作によってプレイヤーの周りを回転 = RotationRoot ・スマホ操作によって高さを変更 = HeightRoot ・常にプレイヤーを写し続ける = MainCamera |
となります。下記画像のようになっていればOKです。
カメラコントロールクラスの作成
構成が終わったらこれらを管理するためのクラスを作成していきます。新しいスクリプトを作成し、「PlayerCameraController」という名前にします。
そして作成した「PlayerCameraController」をInspectorの「CameraRoot」に設定しておきましょう。
まずは、子のオブジェクトを操作できるように「[SerializeField]」で「RotationRoot」、「HeightRoot」、「MainCamera」を設定できるようにします。「RotationRoot」、「HeightRoot」は「Transform」として、「MainCamera」は「Camera」として取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerCameraController : MonoBehaviour { // 回転操作用トランスフォーム. [SerializeField] Transform rotationRoot = null; // 高さ操作用トランスフォーム. [SerializeField] Transform heightRoot = null; // プレイヤーカメラ. [SerializeField] Camera mainCamera = null; void Start() { } void Update() { } } |
Unityに戻ってInspectorから「CameraRoot」の「PlayerCameraController」にそれぞれのオブジェクトを設定しましょう。
常にプレイヤーを写すカメラ処理
まずは、常にプレイヤーを写し続けるようにしていきます。
ここまででプレイヤーの操作の基本が完成しました。
次回からは敵キャラを作成して攻撃できるようにしていきます。
次回の記事 :
コメント