![見出し画像](https://assets.st-note.com/production/uploads/images/137986901/rectangle_large_type_2_bf7ea61bafc85e0bbd8226b3965bc2e8.png?width=1200)
よく聞く「フラグ」を作ってみる!【ゲーム制作記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文の処理を実行してもらうことができます。
*
最後まで見ていただき、ありがとうございました!
また次回の記事でお会いしましょう!
この記事が気に入ったらサポートをしてみませんか?