見出し画像

Cluster Creator Kitで複雑な条件分岐に使えるなんちゃってビットフラグ #ClusterGAMEJAM

やほほーい。せぃが君です。(*´▽`*)
いわゆるVtuber活動をしています。

今回は、ClusterGAMEJAM2022 in autumnの時に使った、Cluster Creator Kitで複雑な条件分岐に使えるナンチャッテビットフラグについて解説するよ!


謎解きワールド作ったよ


今回、僕はお友達のUnityが上手なVtuber、八ツ橋まろんちゃんと一緒に下記のワールドを作りました。


たいまつとカンテラを利用した謎解きゲームで、第一~第三ステージまであるんだけど、その第三ステージでは「正しい順番でカンテラを灯さないと開かない扉」が出てきます。

ABCの文字が浮かぶカンテラ
どうやら順番に火を灯さなくちゃいけないらしい

複雑な条件の比較にはビットフラグやで


ただ、これをまともにGlobal Logicとかを使って作ろうとすると結構大変で、ABCの三つくらいならいいんだけど、最終的にこのカンテラ、一番多い場合で、七つに増えるので、これをうまく管理しようとすると、普通ならLogicコンポーネントにかなり煩雑な処理を書かなくちゃいけません。

そこで、今回使ったのが、Integerを使ったナンチャッテビットフラグです。

ビットフラグとはなんぞや


bitとは、乱暴にいうと、1と0のことです。

通常、bool型は、1bitを使ってtrueとfalseを管理します。ということは、32bitで構成されるIntegerはboolが32個集まったものとして利用することができるよね、というのが基本的なビットフラグの考え方です。

この説明だけだと???かもしれませんが、今回はナンチャッテビットフラグなので、この概念をそこまで厳密に理解する必要はないです。(それでも詳しく知りたいかたは、この辺などを参考にどうぞ)


ナンチャッテビットフラグで、複数のbool的処理を楽々管理


今回は、Integerの10進数の各桁をboolに見立てました。つまり、整数の1=0000001なら、1番目のカンテラが正しい順で灯っている、整数の1111=0001111なら、1番から4番までのカンテラが正しい順で灯っているという具合です。

Logicは通常二つの値の比較しかできませんが、こんなかんじで10進数の各桁をboolに見立てると、たくさんのbool判定を一回の比較でいっきに確認することができます

記述が綺麗になり、拡張性が高まる


こうすることのメリットはふたつあって、ひとつは単純にLogicの記述が綺麗になります。もうひとつは、処理がスケールしやすくなる、つまり拡張性が高い記述法だということです。

たとえば、今回のワールドだと最小3個から、最大7個まで、この「正しい処理順判定」を拡張する必要があるのですが、これを普通の方法で3個から7個に拡張しようとすると、煩雑な処理をいちいち追加しないといけないし、どこかで記述ミスしていないか、整合性が崩れていないかの確認がとても大変です。

でも、このナンチャッテビットフラグを使えば、扱う桁数を3桁から7桁に増やすだけで対処できます。

具体的にいうと、ABCなら、1を増減させるカンテラ、10を増減するカンテラ、100を増減するカンテラの三つを使って管理することになるのですが、これをABCDにして、扱うカンテラを四つに変える時は、1、10、100のカンテラには一切処理を加えず、ただ100のカンテラをコピペして、扱う数字を1000に書き変えてあげるだけでよいということです。

ナンチャッテビットフラグ、おすすめです

というわけで、ナンチャッテビットフラグ便利だよというお話でした。(*´▽`*)

桁ごとのboolを比較したいとなると、ちゃんとしたビットフラグを使った方がいいと思うけど、今回みたいな正しい順でカンテラを灯していく=1個前のカンテラまで正しく灯されていることを確認すればいい程度の処理なら、このナンチャッテビットフラグで充分です。

あと、ナンチャッテであることの副産物として、各桁で0~9までの数字を扱えるので、その気になれば、複雑な樹形図みたいな分岐を書くこともできるかも? どうだろう。これは未検証。

色々役立つテクニックなので、Clusterワールドで複雑な処理を書きたい場合は、ぜひぜひ応用してみてね。(*´▽`*)

せぃが君でした。🍀



記事を良き!と思った時に、BOOTHのブーストみたいに投げ銭できるみたい。いただいたサポートは、VTuber活動資金として大切に使わせていただきます。