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への理解をさらに深めていきたいと思います!
次回へ続く。