君がゲームを作る!Unityゲーム開発入門
第20回 迷路のゴールを作ろう!(後編)

C#のメンバ変数への設定のしかたに注目!

こんにちは!

普段からナチュラルヒッキーであることを自負する僕ですが、こんな僕でもたまには魔が差して外に出ることがあります。

3日後に福岡市でオープン予定のmarkisなる商業施設のプレオープンを覗きに行ってみました!

感想をひとことで言うと、お客さんがみんな綺麗な服を着ているなぁって思いました。終わり。

さて、今日は Unity入門 第20回目です!

前回に引き続き、ゲームのゴールを作成していきたいと思います!

前回のおさらい

前回はゴールとなる花のゲームオブジェクトを配置し、ColliderコンポーネントでTrigger指定をしたところまででしたね。

それではこの続きから進めていきましょう!

テキストの表示状態を操作する

まずは「ゴール!!」の表示状態を制御するスクリプト(プログラム)を準備しましょう!

「Assets」メニューの「Create」から「C# Script」をクリックします。

プロジェクトウィンドウにC#のファイルが作成されました!
わかりやすいようにファイル名を「Goal」に変えておきましょう。

次にスクリプトの内容を編集していきます。
C#のファイルをダブルクリックするか、インスペクターウィンドウで「Open」をクリックします。

スクリプトの編集画面が開きました。

C#プログラムを下のように編集してください。

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

public class Goal : MonoBehaviour {

    public GameObject GoalText;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.name == "Flower")
        {
            this.GoalText.SetActive(true);
        }
    }
}

C#プログラムの中身

プログラムの中身を少し詳しく見てみましょう。

public GameObject GoalText;

GameObject型のメンバ変数です。これはのちほど使います。

private void OnTriggerEnter2D(Collider2D other)

OnTriggerEnter2Dメソッドは、そのゲームオブジェクトがトリガー(今回では花のゲームオブジェクト)に触れたタイミングでUnityから呼び出されるメソッドです。

そして、引数で渡されている「Collider2D other」は触れたトリガーのColliderコンポーネントが渡されます。

if (other.gameObject.name == "Flower")

トリガーを保持しているゲームオブジェクトの名前が"Flower"であった場合、という条件で判定しています。
"Flower"は前回、花のゲームオブジェクトに設定した名前ですね。

this.GoalText.SetActive(true);

メンバ変数「GoalText」の「SetActive(true)」メソッドを呼び出しています。

これにより、メンバ変数「GoalText」に格納されたゲームオブジェクトの表示状態を「非表示」から「表示」に切り替えています。

キャラクターにスクリプトコンポーネントを追加する

作成したC#スクリプトをキャラクターのゲームオブジェクトに追加しましょう。

そうすることで、キャラクターがトリガーに触れたときにスクリプトの「OnTriggerEnter2D」メソッドが呼び出されるようになります。

キャラクターのゲームオブジェクトを選択して、「Add Component」をクリックします。

「Scripts」をクリックします。

「Goal」をクリックします。

コンポーネントが追加されました!

追加されたGoalコンポーネントを見ると、「Goal Text」という項目がありますね。

これがプログラム内で書いたメンバ変数「GoalText」です。

ここに「ゴール!!」のゲームオブジェクトを設定しましょう。

キャラクターのゲームオブジェクトが選択されている状態で、 ヒエラルキーウィンドウから「Text」をインスペクターウィンドウの「Goal Text」へドラッグ&ドロップします。

「Goal Text」へ「Text」が設定されました!

ここでもう一度プログラムを見返してみましょう。

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

public class Goal : MonoBehaviour {

    public GameObject GoalText;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.name == "Flower")
        {
            this.GoalText.SetActive(true);
        }
    }
}

トリガーに触れたタイミングでメンバ変数「GoalText」のSetActiveメソッドを呼び出し、表示状態を切り替えていましたね。

いまこのメンバ変数「GoalText」に「ゴール!!」ゲームオブジェクトを設定しました。

つまり、トリガーに触れたタイミングで「ゴール!!」ゲームオブジェクトの表示状態を切り替えられるようになった、ということですね。

「ゴール!!」の初期状態を非表示にする

最後に「ゴール!!」ゲームオブジェクトの初期状態を非表示にしましよう。

ゲームオブジェクトを選択した状態で、インスペクターウィンドウの左上のチェックボックスのチェックを外します。

「ゴール!!」が非表示になりました!

テストプレイして確認してみよう!

では、テストプレイをして動作を確認しましょう。
「▶」をクリックして、プレイモードに入ります。

矢印キーで操作してゴールを目指します。

ゴールの花を取ると。。

「ゴール!!」と表示されました!

「▶」ボタンをもう一度クリックして、プレイモードを抜けておきましょう。

今回はここまでです!

迷路を解いたらゴール!!と表示されるようになりましたね。

まだ本来のゲームとしてはまだまだ改善点がある状態ですが、ひとまず当初の目標とした

  • 2Dゲーム
  • 四角いステージエリアの中で、十字キーでキャラクターを操作しながら移動する
  • 迷路を解いたら、ゲームクリア!

を実現することができました。

次回からはまた新しいゲーム内容と目標を設定し、Unityへの理解をさらに深めていきたいと思います!

次回へ続く。

>> 続きの記事
【君がゲームを作る!Unityゲーム開発入門】第21回 ふたつめのゲームの内容を考える ~ プロジェクトの作成