こんにちは!こちらの記事では、Cluster Creator Kitのオペレーション機能の基本的な部分について紹介していきます。
今回は、クラスター社エンジニアのはとりんが行った配信、【ロジックリリース記念】ゲーム機能完全に理解した!【YouTubeLive】をもとに、オペレーション機能を用いたHPやMPの作り方について説明していきます。内容は解説配信と一緒ですので、詳しく知りたい場合は是非動画も見てください。
今回つくるもの
今回、作成するのはHPを持ったモンスター(Cube)とMPを消費して魔法を放つ杖になります。

準備
最初に、モンスターと杖のオペレーション機能以外の部分を作っていきます。
- 杖は、Grabbable Itemとし、Use Item Trigger により 魔法の弾をCreateするように設定します
- 弾は、On Create Item Triggerで弾が生成されたときにAdd Instant Forceするようにします。
- 弾がOn Collideしたときは、当たった相手に”Damaged”というシグナルを送り、自身をdestroyするようにします。
- モンスターは、”Damaged”のシグナルを送られるとdestroyするように設定します。
以上で、魔法の弾をうつ杖と弾に当たると消えるモンスターになります。ItemやTrigger、Gimmickに関してはこちらの記事をご覧ください。
モンスターのHP
ではまず、相手モンスターにHPを設定し、複数回魔法が当たったときに消えるようにしましょう。
- 弾がぶつかった時のダメージ量を設定するため、弾のOn Collide Item Triggerに”damage”という整数値10のメッセージを追加します。
- HPの初期値を設定するため、モンスターが生成されたときにkey名が”hp”で30という値を自身にメッセージします。
- Item Logicを用いて、弾にぶつかり”Damaged”というシグナルメッセージを受けとったときに、”hp”から”damage”を減算するようにします。演算子を=Subtractとし、第一引数に”hp”、第二引数に”damage”を指定することで”hp”から”damage”を減算した結果を”hp”に送ることができます。
- LessThanOrEqualで”hp”が0以下になったときに、”Died”というシグナルを送るようにします。第二引数の0のように、メッセージではなく定数を使用するときは、引数の種類をRoomStateからConstantにする必要があります。
- モンスターがDestroyするメッセージを”Died”に変更します。


以上で、HPを持つモンスターが完成しました。その他、詳しい計算処理の記述に関してはドキュメントをご覧ください。
値の可視化
モンスターのHPなど、簡単に値を表示する方法を紹介します。
Canvasを作成し、Set Text Gimmickをアタッチします。ここではモンスターのHPを見たいのでTargetはItemに設定します。Keyは”hp”に、ItemはHPを表示したいモンスターに、Parameter TypeはIntegerにします。そして、Format欄は”HP: {0}”とします。この{0}の部分にHPの値が表示されます。

この他にも、Signalメッセージの送られたタイミングなどの表示も可能です。
詳しくはドキュメントをご覧ください。
魔法の杖のMP消費
次に,モンスターのHP減少と同じように,魔法の杖のMP消費の仕組みを作っていきます。
- 杖のOn Create Item Triggerで、key名を”mp”としたIntegerの初期値を設定します。
- モンスターのHPと同様に、MPの表示を行います。
- use itemしたときに魔法が撃てるかの判定を行います。Item LogicのGreaterThanOrEqualを用いて、”mp”が5以上のときに”ShotNormal”シグナルを出すようにします。
- このシグナル”ShotNormal”によって弾の生成とMPの消費を行うように設定します。この時のMPの消費はHPが減るときと同様に実装できます。

MPの自動回復
時間経過による、MPの自動回復を行うにはItem Timerを使用します。これはシグナルを受けたとき、指定したDelay Time Secondsの秒数後にTriggerをうつ機能になります。この機能を利用して、自分自身を動かすシグナルをTriggerに設定することで、一定の間隔でTriggerを発火させることができます。ただし、最初にItem Timerを動かすシグナルは必要なので、On Create Item Trigger等でシグナルをうつようにしましょう。
この周期が短い場合、アイテムを持っていた人が退室したとき等にクロックが止まってしまう可能性があります。クロックが途切れた場合の対策としてOn Grab Item Triggerでもシグナルをうつようにするとよいでしょう。
- 杖のOn Create Item Triggerに”RecoverMP”を追加します。
- 杖のOn Grab Item Triggerに”RecoverMP”を設定します。
- “RecoverMP”を受けて1秒後に”RecoverMP”をうつItem Timerを設定します。
- Item Logicを用いて、”RecoverMP”が送られるごとに”mp”を1増やすように設定します。

このようにItem Timerを利用することで、一定間隔でMPが増えていくようにできます。しかし、このままではMPが増え続けてしまうのでMPに最大値を設定します。
- MPを増やしているItem Logicに”mp”が最大値より大きいかの判定”mpMax”を追加します。
- Condition関数を用いて”mpMax”がtrueのときは”mp”に15を代入、falseのときは”mp”に”mp”を代入します。

以上でMPが最大値を超えないようにできました。v1.9.0からはLogicにMin関数が追加されているので、Min関数を使えばこの処理を1つのステップで行うことができます。
ランダムで発生するクリティカル
さらに、杖で撃つ魔法にランダム要素を加えてみましょう。ここでは、攻撃力が大きいクリティカル弾をある確率で発生するようにします。
- これまで使用した弾とは別に、ダメージが大きいクリティカル弾を”ShotCritical”によって生成されるように用意します。
- 弾を撃つときのTriggerのkeyを”ShotNormal”から”Shot”に変更します。
- Item Trigger Lotteryを用いて、”Shot”を受け取ったときに”ShotNormal”と”ShotCritical”を4:1の割合でメッセージするように設定します。

このときの割合は、Item Trigger Lotteryの各ElementのWeightを調整することで好きな確率にすることができます。
モンスターが消滅するときのディレイ
最後に、モンスターのHPが0になってから少し待って消滅するように変更します。
- HPが0以下になった時のメッセージをDiedからDelayDiedに変更します。
- Item TimerでDelayDiedを受け取った2秒後にDiedをメッセージするように設定します。

これでHPが0にになる攻撃を受けた瞬間ではなく、少し間をおいて消滅するようになりました。ただし、Item Timerの仕様上、Delay Time中に再度メッセージを受け取るとディレイのカウントが最初からになってしまうので注意が必要です。現状では、HPが0以下になってから2秒以内にダメージを受け続けると消滅しないようになってしまっています。これを解決したい場合は、モンスターが生きているかのフラグを作り、生きている場合にのみダメージ処理をするようにしましょう。また、消滅までのディレイ中にモンスターのHPがマイナス表示されることがあるので、HPがマイナスになった場合は0にする処理を加えてもいいでしょう。
最後に
このように、オペレーション機能を用いて計算や条件分岐などを行うことで、様々なゲーム要素を作り出すことができます!
ぜひ、オペレーション機能を使ったゲームワールドをclusterで制作してみましょう!