Unityと吉里吉里でSLGとかRPGを作るブログ

お疲れ様です。
ゲーム素材も揃ってきて、レベルデザインとマップ製作を交互に行う毎日です。

そんな訳で、本日はゲーム製作の肝、フラグの管理方法について記載します。
今回紹介するフラグ管理方法は、姫百合で出た問題をベースにブラシュアップした物で、吉里吉里での製造に関わらず使える概念だと思います。

それなりのサイズのサンプルをアップする予定ですので、久しぶりに2回に分けて、概念、サンプルソースの解説と言う形で紹介していこうと思います。

コンセプトとしては、以下3点に重点を置いています。
・フラグ関係でのバグや問題の解決しやすさ
・開発中、リリース後での変更対応力
・フラグ制御の寛容性


このフラグ管理システムは、こちらで紹介した「イベント制御」と組み合わせる事で強力な力を発揮します。
次回紹介するサンプルも、こちらとのタッグで作っておきます。これを丸々導入する事で、簡単にフラグシステムとイベントシステムを追加可能ですよ。


■データの持ち方

まず、フラグテーブルを用意します。私の場合は、エクセルで管理して、そのままCSVで取り込む方式です。
テーブル管理については、こちらで紹介しています。
データの持ち方
※フラグデータの持ち方

テーブルデータとしては、以下3項目です。
・フラグID
 フラグのIDです。
 分かり易い名前を付けましょう。例えば、ボスAが死んだ時に立てるなら、BOSS_A_SIとか。

・フラグタイプ
 そのフラグが属しているタイプです。
 タイプの使い方は、後で説明します。

・初期値
 フラグの初期値です。ON(1)かOFF(0)を設定しておきます。基本的には0になりますね。


■ONOFFの制御

ゲーム内でのON、OFF制御は、IDを指定して1か0を設定する方式を取ります。
この時、大事なこととして、テーブルに無いフラグを立てに行ってもエラーとならない様にします。
同様にゲーム内に無いフラグを見に行った場合、自動的にOFFが帰る様にします。

例えば、ゲームなどで特定の敵が死んだ時点でイベントを起こしたいと言う事は良くあると思います。
この場合、敵が死んだら、敵のID+_SIと言う形で自動的にフラグを立てに行くようにすれば、全ての「敵が死んだ」イベントを作成出来ます。
しかし、無いフラグが立てられないなら、エネミー全ての死亡フラグをテーブルに載せる必要があるのです。
テーブルには必要なフラグだけ載せた方が可読性が高まります。


■IDによる制御

フラグには、IDを付けます。上で紹介した様に何のフラグか分かる様にしておきます。
また、明確なルールを設けると良いです。
例えば、イベント終了のフラグなら、イベント番号+ENDの様な形にします。
これにより、フラグ関係のデバックが大変楽になります。


■フラグタイプでの制御

タイプは、特定の状況で、同一タイプのフラグを全部OFFにするのに使います。

例を出して見ましょう。
SLGなどで、特定のキャラクター同士が戦闘に参加したら会話イベントを起こしたいとします。
この場合、戦闘に参加したキャラクターのID+_BTなどとしてフラグを立てれれば制御は楽です。

所が、ここで1つ問題になります。
例えばAとBのキャラが揃ったら会話イベントをさせたいのに、1戦目でBのキャラだけだして、2戦目でAのキャラだけ出しても、フラグ上は2つが立った事でイベントが発生してしまうのです。
なので、これらのフラグを1つのタイプとして設定し、戦闘開始時に全部まとめてクリアしてしまいます。
その後、今現在戦闘に参加したキャラのフラグを再び立て直すのです。


■セーブとロード

フラグを保存する時は、立ってるフラグのIDだけを保存します。
そして、ロード時には、セーブデータのフラグIDと一致したものだけ、フラグをONにし、それ以外は全てOFFに設定します。

これらの意図として、製作途中でフラグを消したり、増やしても、セーブデータがエラーにならない。
リリース後の追加でも同様の事が言えます。これにより購入者のセーブデータが駄目にならないと言う訳です。


■総括

とりあえず、フラグの管理方法について紹介しました。
次回は、これらを使ったサンプルをアップロードする予定です。
イベント機能+テーブル機能+フラグ機能のサンプルなので、別途解説用の記事を書きます。







◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
スポンサーサイト
2014.10.14 / Top↑
Secret

TrackBackURL
→http://nekodamasi.blog79.fc2.com/tb.php/111-de415db8