見出し画像

よく聞く「フラグ」を作ってみる!【ゲーム制作記5】

はじめに

今回は「フラグ」の作り方を習得したので、そのやり方を復習していきます。
ゲームではよく「フラグが立った」という言葉を耳にすることがあります。特に私はRPGやアドベンチャーゲームを昔からプレイしていたので、「フラグ」という言葉には非常に聞き馴染みがあります。

どうやって作るんだろう?と疑問に思っていたのですが、これが意外と簡単に作れちゃいました!

動作環境は

  • macOS

  • Unity 2021.3.0f1

です。
よろしくお願いします!


そもそも、どんなことに使えるの?

フラグは最初に以下のようなコードを書きます。

bool GameOver = false;

bool型の変数名「GameOver」、一旦ここでは例としてfalseを代入しています。

フラグに使う「bool型」は「true(真)」か「false(偽)」を代入することができ、ON/OFFスイッチのように使うことができます。

例えば、以下のコード。
「ボタンを押してゲームオーバーになったらリトライパネルを表示する」といった動きができるコードです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Sample : MonoBehaviour
{

  bool GameOver = false;
  public GameObject retry;

  public void Click()
    {
        GameOver = true;
    }

  void Update () {
     if(GameOver == true){
     retry.SetActive(true);
     }
}

変数名「GameOver」にfalseを代入。
「retry」というGameObjectを入れる場所を作り、Unity側でアタッチ。アタッチしたGameObjectは非表示にしておく。
また、ボタンを作り、押された時に「Click」メソッドを実行するようにUnity側で設定しておきます。

ボタンが押されたら、「GameOver」はtrueになり、if文の判定が行われます。「『GameOver』がtrueなら」というものですね。
現在trueを代入しているため、続きの処理が実行され、「retry」にアタッチしたオブジェクトが表示されます。

私の印象的にはif文との相性が非常によく、「trueになったら〇〇を表示して!」「trueになったら〇〇の処理を行って!」といった感じで使っています。

応用の紹介

コードを書いていて私がよく直面するのが、「他のスクリプトでもこの変数の状態を取得したい!」ということ。
先程あげたゲームオーバーの処理だと、trueになった時にリトライ用のオブジェクトを表示させるほかに、制限時間のあるゲームであれば別スクリプトに書いたタイマーを止める処理をしたいし、リザルト画面にシーン遷移するようなこともしたいし……

そこで、他のシーンでも使用できるようにするコードの書き方の紹介です。

宣言する側

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Sample : MonoBehaviour
{
    public static bool GameOver;
    
    void Start () {
        GameOver = false;
    }

    public void Click()
    {
        GameOver = true;
    }
}

宣言のためのコードが、「public static bool (変数名)」になりましたね。

使う側

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

public class Sample2 : MonoBehaviour
{
    void Start () {
        if(Sample.GameOver){
            //処理を書く
        }
    }
}

「宣言したスクリプト名.変数名」と書いて使います。
例だと、「Sample」というスクリプトで宣言したので、「Sample.GameOver」になっていますね。

これで「GameOver」がtrueなら、if文の処理を実行してもらうことができます。

最後まで見ていただき、ありがとうございました!

また次回の記事でお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?