コンテンツへスキップ

【Unity】別のゲームオブジェクトのメソッドを呼び出す方法

別のゲームオブジェクトのメソッドを呼び出す方法を習得すれば、ゲームクリアやゲームオーバーの仕組みなどが作れるようになります。この記事の内容をぜひ実際に試してみてください。

想定している場面

この記事では、プレイヤーがステージから落下して負けてしまったときに、画面に「You Lose」と表示する、というゲームオーバーの場面を使って解説します。プレイヤーのスクリプト「プレイヤーが落下した」 ⇒ 別のオブジェクト「画面に文字を表示する」を呼び出す、というプログラムの流れになります。 

考え方

① ステージから落下したことがわかるように当たり判定を用意します。プレイヤーがこれに触れた時、ステージから落下したということがわかります。

call-other-game-object-method2

② ① の処理から呼び出されます。そして、「You Lose」というテキストを表示します。

call-other-game-object-method3

上記のように、① の処理の中で、② の処理を呼び出す必要があります。それでは、「別のゲームオブジェクトのメソッドを呼び出す方法」について説明していきます。

準備:Unity での設定

下図のように、ステージから落下したことを判定するための「当たり判定」と、「You Lose」と表示するための「テキスト」が必要です。

call-other-game-object-method1

STEP1:当たり判定を作成する(ステージからの落下を判定)

空のゲームオブジェクト「DeathOfFalling」を作成します。
タグ「DeathOfFalling」を付けます。
「トリガーにする」にチェックを入れます。
コンポーネント「Box Collider 2D」を追加し、コライダーをステージの下の方に設置します。

call-other-game-object-method4

STEP2:画面表示部分を作成する(キャンバスを作成)

画面に画像やテキストを表示する時は、キャンバスを用意します。キャンバス上に置いた画像やテキストを一括で移動させたり、表示・非表示を切り替えられるので便利です。

キャンバスのゲームオブジェスト「UI」を作成します。
レンダーモード「スクリーンスペース – カメラ」を選択します。
レンダーカメラにヒエラルキーにある「Main Camera」をアタッチします。

call-other-game-object-method5

STEP3:画面表示部分を作成する(テキストを作成)

キャンバス「UI」の下に、テキスト(TextMeshPro)を追加します。
Text Inputに「You Lose」と入力します。
文字の色を好みの色に変更します。

call-other-game-object-method6

以上で、Unity 側での設定は完了です。次は、プログラミングです。

プログラミング(プレイヤー側のスクリプト:ステージから落下したとき)

GameObjectTags.cs

public enum GameObjectTags
{
    Player,
    Enemies,
    ColliderEnemyBody,
    ColliderEnemyHead,
    ColliderDeathOfFalling,
}

■ 7行目:
 ステージから落下したことを識別するための当たり判定に用います。
 本記事内の Unity の設定で、ゲームオブジェクト「DeathOfFalling」につけたタグの名前と同じにします。これにより、プレイヤーは何と当たったのか識別できるようになります。

PlayerController.cs

public class PlayerController : MonoBehaviour
{
    [SerializeField] private GameObject uiObject;
    private UIController uiController;

    private void Start()
    {
        uiController = uiObject.GetComponent<UIController>();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag.Equals(GameObjectTags.ColliderDeathOfFalling.ToString()))
        {
            uiController.Dead();
        }
    }
}

■ 3行目:uiObject(シリアライズフィールド)
 ゲームオブジェクト「UI」をアタッチします。

■ 8行目:uiController の初期化
 uiObject から UIController を取得します。
 UIController のメソッドを実行するために必要です。

■ 11行目:OnTriggerEnter2D
 Trigger の設定がある当たり判定に触れた際に実行されます。

■ 13行目:
 タグ「ColliderDeathOfFalling」に触れた時に、UIController の Dead メソッドを呼び出します。

PlayerController.cs ができたら下記の操作を Unity 側でしてください。
 ・ヒエラルキーの「Player」に、PlayerController.cs を追加(ドラッグアンドドロップ)します。
 ・PlayerController(スクリプト) 内の「UI Object」にヒエラルキーの「UI」をアタッチします(下図参照)。

call-other-game-object-method7

プログラミング(画面表示側のスクリプト)

UIController.cs

public class UIController : MonoBehaviour
{
    [SerializeField] private GameObject youLose;

    private void Start()
    {
        youLose.GetComponent<TextMeshProUGUI>().enabled = false;
    }

    public void Dead()
    {
        youLose.GetComponent<TextMeshProUGUI>().enabled = true;
    }
}

■ 3行目:youLose(シリアライズフィールド)
 テキストを表示・非表示するためにゲームオブジェクトを割り当てます。

■ 5行目:Start(メソッド)
 ゲーム開始時は、テキストを非表示にします。

■ 10行目:Dead(メソッド)
 プレイヤーが負けた時は、テキストを表示します

UIController.cs ができたら下記の操作を Unity 側でしてください。
 ・ヒエラルキーのキャンバス「UI」に、UIController.cs を追加(ドラッグアンドドロップ)します。
 ・UIController(スクリプト) 内の「You Lose」にヒエラルキーの「YouLose」をアタッチします(下図参照)。

call-other-game-object-method8

以上で、別のゲームオブジェクトのメソッドを呼び出す方法の解説を終わります。

広告

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA