超初心者のゲーム開発記~Unity~

超初心者がUnityでゲーム(目標はAndroidアプリ )を開発していくブログです!

【Unity 2Dローグライク】公式チュートリアルをやってみる part.6~ランダムなステージ生成2

こんばんは!ヤギです!

Unityの2Dローグライクの
公式チュートリアルをやってみる part.6になります!
※前回(part.5)の記事はこちら
www.yagigame.com

記事概要

今回の記事では、ゲームのステージをランダムに生成するためのスクリプトを呼ぶ方法をご説明していきます。
※part.6に対応する公式チュートリアルの章は、Writing the Game Managerです!
unity3d.com
※この記事は、ひよこのたまご様の記事をリスペクトしています。
hiyotama.hatenablog.com

ステージ作成を呼ぶスクリプト(GameManager.cs)の作成

1. Hierarchy viewのGameManagerに、スクリプト(BoardManager.csとGameManage.cs)をアタッチします。
f:id:yagigame:20181031125516p:plain
2. GameManager.csを開き、スクリプトを書きます。
※スクリプトの中に、解説を書いております。ご参照ください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour {

    //クラスに属し、複数のシーンで使われる変数を宣言
    //Staticにすることで、他のスクリプトからも呼び出すことができます
    public static GameManager instance = null;

    //BoardManager型の変数を宣言
    public BoardManager boardScript;

    //テストとして、敵が出現するレベルの3とする
    private int level = 3;

	// AwakeはStartよりも前、最初に呼ばれる
	void Awake () {
        //GameManagerが存在しなければ、このオブジェクトを設定する
        if(instance = null){
            instance = this;
        }else{
            //すでに存在する場合、このオブジェクトは不要なため破壊する
            Destroy(this);
        }

        //シーン遷移時に、このオブジェクトは破壊せず引き継ぐ
        DontDestroyOnLoad(gameObject);

        //BoardManagerのコンポーネントを取得
        boardScript = GetComponent<BoardManager>();
        //ステージ生成の関数を呼ぶための、関数を呼ぶ
        InitGame();
	}
	
    void InitGame(){
        //ステージ生成の関数を呼ぶ
        boardScript.SetupScene(level);
    }
}

GameManagerとPrefab(敵やアイテム)を紐付ける

1. Hierarchy view > GameManagerを選択し、Inspectorを表示する。
2. この後の手順で1で開いたInspectorを常に表示するために、鍵マークをクリックしロックする。
f:id:yagigame:20181031130607p:plain
3. Prefabs > Exit をInspectorview > Exitにドラッグする。
4. Prefabs > Floor(1~8)を全て、Inspector > Floor Tilesにドラッグする。
※複数のFloor Prefabを選択して、まとめてドラッグ可能です。
f:id:yagigame:20181031131117p:plain
5. 同様にPrefabs > Wall(1~8)をInspector > Wall Tilesにドラッグする。
6. Prefabs > FoodとSodaをInspector > Food Tilesにドラッグする。
7. Prefabs > Enemy(1~2)をInspector > Enemy Tilesにドラッグする。
8. Prefabs > OuterWall(1~3)をInspector > OuterWall Tilesにドラッグする。
※1~8を実施すると、GameManagerのInspectorは下記のようになります。
f:id:yagigame:20181031131659p:plain
9. GameManagerのInspectorの修正が全て完了したので、ロックを解除しておきます。
10. GameManagerが完成したので、Prefabsフォルダにドラッグし、Prefabにしておきます。

※この状態で、ゲームを実行してみましょう!
※カメラがずれていますが、ステージが生成されています!感動!
f:id:yagigame:20181031131811p:plain

ゲームを写すカメラの修正

ステージが全て表示されるように、カメラの位置を修正していきます。
1. Hierarchy > Main Cameraをクリックし、Inspector viewを開きます。
2. Inspector > Transform > Position のxとyを、3.5に変更します。
3. backgroundを黒色に変更します。
f:id:yagigame:20181031132337p:plain

※この状態で、ゲームを実行してみましょう!
※カメラがずれずに、ステージが生成されています!とても感動!
f:id:yagigame:20181031132433p:plain

GameManagerを呼び出すスクリプト(Loader.cs)の作成

GameManagerを呼び出すスクリプトを作成していきます。
1. Project > Create > C#scriptをクリックし、Loader.csを作成します。
2. Loader.csを開き、スクリプトを書きます。
※スクリプトの中に、解説を書いております。ご参照ください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Loader : MonoBehaviour {

    //GameManager変数を宣言
    public GameObject gameManager;

	// 最初に呼び出される関数
	void Awake () {
        //GameManagerが存在しなければ
        if(GameManager.instance == null){
            //GameManagerを作成する ※InspectorでGameObjectにGameManagerを設定する
            Instantiate(gameManager);
        }
	}
}

3. Loader.csをMainCameraにドラッグし、紐付けます。
4. MainCameraのInspector > Loader.cs > GameObjectにGameManageのPrefabを設定します。
※1~4を実施後のMainCameraのInspectorは下記のようになります。
f:id:yagigame:20181031134850p:plain
5. 最後にHierarchy > GameObjectは削除しておきます。

ランダムなステージの作成は以上で完了となります!

次回予告

次回の記事では、オブジェクトの動かし方について書いていきたいと思います。
※次回の記事はこちら
www.yagigame.com

※Unityのチュートリアルの章としては、次回は(Moving Object Script)となります!

読んでいただきありがとうございました!