迷路ゲームの作り方!すっごいシンプル編[Unity]
立ち上がったら一度動かしてみましょう。 Assets/StarterAssets/ThirdPersonController/Scenes/Playground を開いてください。下図のようなシーンが展開されたらゲームを動かしてみましょう(画面上部の再生ボタン)。移動はWASDキー、視点移動はマウスで行うことができます。ダッシュする場合はShiftキー押しっぱなしで移動。スペースキーでジャンプできます。
フィールドのオブジェクトを非表示にするステージ作成
床を作るこのままだとゲームを起動したら下に落っこちてしまいますので、まずは床を作成しましょう。ヒエラルキー右クリック 3D Object>Plane から床を作成します。作った直後は位置が変になっていることが多いので、 Reset(Position0,0,0)してからScaleを(20,1,20) にして遊べるエリアを広げましょう。余裕がある場合は元々の床で使われていたマテリアルを適応してみましょう。
壁を作る 壁を作る共通ルール- スケール(x,z)のみを利用して、壁の横幅等を調整する
- z方向にスケールし、Rotation : Yを回転させる
まずはレベルの大きさを決める外壁を作成します。今回は Scale:20を基準 としたステージを作成します。下図は私が作成したサンプルになります。
壁の位置座標スケール右10,0,01,5,20左-10,0,01,5,20上0,0,1020,5,1下0,0,-1020,5,1 内壁オススメの編集方法について
- シーンビューの右上:緑色のコーンをクリックして、上から見下ろした状態にする
- 三TOPに切り替える:水平投写に切り替わり、奥行きがなくなるため調整しやすくなります。
- 壁になるオブジェクトを選択した状態で、Rectツールに切り替える
- シーンビュー内で調整したい壁を選択し、位置・大きさ調整を行う
- Ctrl+Dで複製をし、そのまま次の壁を調整する
基本的には壁と同じCubeを使いますが、いくつか設定が変わります。 縦の大きさは0.5に変更 。私のサンプルでは x,zを2.5 に変更していますが、皆さんの作った迷路の大きさに合わせて調整してください。もう一つ重要な変更として、 BoxColliderのIsTriggerにチェックを入れてください 。この変更はゴールのみに行うことに注意してください。あとは見やすくするために、マテリアルを変更しておきましょう。 Floorのマテリアルがあった場所のGridOrange_01_Mat をセットしてください。
UIゴール時に、UIでテキストを表示させましょう。 ヒエラルキー何も無いところ右クリック>UI>Panelを追加 します(右クリックできない場合は左上のプラスボタン)。作られたPanelを右クリックして、 UI>Text – Text Mesh Pro を追加(Import TMP Essential)。Alignmentを上下方向:中央・左右方向:中央にセットして、Textに「GOAL」と入力して、満足するSizeに変更してください。 文字が折り返してしまう場合、Wrapping:Disable に変更すると直ります。あとは色とか好きなのに変えておくと良いですね。
必要なソースコードを書いて完成
MazeManagerゲーム開始直後にパネルを非表示にして、「 ゴールしました! 」と誰かが主張したタイミングで非表示にしたパネルを再表示させます。後ほどインペクターに対象のパネルをセットする作業があることに注意してください。
using UnityEngine; using UnityEngine.Events; public class MazeManager : MonoBehaviour < [SerializeField] private GameObject panel; public static UnityEvent OnGoal = new UnityEvent(); private void Awake() < panel.SetActive(false); OnGoal.RemoveAllListeners(); OnGoal.AddListener(() =>< panel.SetActive(true); >); > > MazePlayerゴールの当たり判定に触れたタイミングで、「 ゴールしました! 」と主張するスクリプト。キャラクター制御等は他のプログラムに任せておきましょう。Triggerモードで当たったら何でもかんでもゴールだと思い込むスクリプトになっているので、その点に注意してください。
using UnityEngine; public class MazePlayer : MonoBehaviour < private void OnTriggerEnter(Collider other) < MazeManager.OnGoal.Invoke(); >> シーン内にセットアップ MazeManager基本的にどこでもOKです。今回は 空のGameObjectを作成(MazeManager) し、そこに貼り付けましょう。貼り付けたらインスペクターのpanelにPanel(Goalのテキストの親のオブジェクト)をセットしてください。
MazePlayerMazePlayerはキャラクターである PlayerArmatureのGameObjectに貼り付け てください。 こちらのスクリプトは位置が重要 になります。 かならずPlayerArmatureに貼り付けましょう!!!