【cluster】Logic使ったゲームワールドを作ろう パターン編1
Cluster Creator Kit Advent Calendar 2020の5日目の記事です。
(※この記事は「パターン編1」です。よくあるLogicのパターンとかを説明します。「準備編」「本編」ほど丁寧な解説ではないです。。。)
この記事で作るのは……
公式記事「オペレーション機能を使ったHPやMPの作り方(https://creator.cluster.mu/2020/11/07/operation-how-to/)」のシンプル版って感じです。
あの記事はLogic初心者が読むにはちょっとキツいと思いますが、この記事を読み終わってから読めばいくらか理解しやすいと思います。
準備
ボール(Sphere)を配置し、MovableItem
をつけます。位置は床からハミでない感じでテキトーにしてください。
最初からついているもの、自動でつくものとか合わせてだいたいこうなります。
HP表示部分
↓の画像のように、Sphereを右クリックして、UI
Text
を選びます。
Canvas
Text
というのが Sphere
の子として作られました。
さらにEventSystem
というのもできますが、これはあとで削除します。
Canvasの設定
で、Canvas
を選択し、こんな風に変更してみます。
Canvasの設定変更 |
---|
Canvas のRenderMode をWorldSpace に。 |
Scale は全部0.02に。 |
PosX は0、PosY は1、PosZ は0。 |
そうすると、だいたいこんな風に見えると思います
ボケボケですが、いちおうテキストっぽいものが見えるようになりました。
このテキストは、ボールを動かすとちゃんとついてきます。
Textの設定
つづけて、Text
を選択し、こんな風に変更。
Textの設定変更 |
---|
Scale は全部0.1に。 |
Text はとりあえずHP 20とか書いておく。 |
Font Size は300くらいに。 |
Alignment は両方中央に。 |
Horizontal Overflow とVertical Overflow はどっちもOverflow に。 |
ボールからやや上に、クッキリテキスト表示 |
SetTextGimmickをつける
このTextに、SetTextGimmick
を追加してください。
設定はこんな風に。
SetTextGimmickの設定変更 |
---|
Key をHPに |
Item をSphereに(ボールをドラッグ&ドロップで動かしてきて、Itemの上で離す。もしくはItem の右のほうにある◎みたいなボタンをクリックして、Sphereを選ぶ) |
ParameterType をInteger に |
|Format には HP {0:D2} と書く(意味はまたあとで) |
ここに書いた部分は、Logicとかが完成してから効いてきます。
Logicっぽいところを書いていこう
またSphereを選択し……
OnCreateItemTrigger
ItemLogic
ItemTimer
DestroyGimmick
を追加します。
設定はこんな感じ!
Logicの流れ |
---|
ゲームが始まったら、OnCreateItemTrigger が自動で呼ばれる。変数HPが15になる |
ItemLogic にhit というメッセージが来たら、HPを4減らす。マイナスにはしない。 |
その後、HPが0以下ならDestroyTimerというメッセージを自分(This )に送る。 |
ItemTimer にDestroyTimerというメッセージが来たら、0.5秒後にDestroyというメッセージを自分(This )に送る。 |
DestroyGimmick はDestroyを受信したら、自分(This 、つまりSphere)を破壊する。 |
Logicの部分をさらに解説
Subtract
は引き算って意味です。
HPから4を引いて、それをまたHPに入れる。Constant
も 右上部分もInteger
!!
さて、次です。
HPが減ってもマイナスにはしないという部分。
「最小値が0ってことは、 Min
を使えばいいんだな!」
すいません、実は逆です……Max
を使います。
HPと0を比べて、大きい(最大の)ほうをHPに入れる。
- HPが6なら、0より6のほうが大きいから、6を入れる。
- HPが-3なら、-3より0のほうが大きいから、0を入れる。
……というわけです(最小・最大を指定するClamp
のほうが直感的で分かりやすいかも……)
あとは消える部分
最後は0以下ならDestroyTimerメッセージを送る。LessThanOrEqual
って英語が長くてコワいと感じるかもしれませんが、要するに「以下」です。
ここは変数に値を入れたいわけじゃないから、Signal
ですよ!
で、DestroyTimerを受信したItemTimer
は0.5秒後にDestroyメッセージを送る。ここは分かりやすいと思います。
計算についてもっと知りたければ
Subtract
とかMax
とかLessThanOrEqual
とかの計算。
もっと知りたい方向けの記事は、【cluster】Logicでの「計算」一覧です。
ところで攻撃する部分は?
ところで、ItemLogicが発動するためのhit
ってどっから来るの?
……という点に気づいた人はエラい。
はい、cluster公式の「的当てゲーム」と全く同じ銃と弾を作ってください。
めんどくさい
そのほうが解説が短くて済むんで……
で、的当てゲームの銃で撃つと
こんな風になります(銃のデザインがアレなのはともかく)。
弾が当たるとHPが減って……でも、HP表示まで転がってる……
なので、とりあえずSphereが回転しないようにします。
SphereについているRigidBodyのConstraintsを開いて、Freeze Rotationに全部チェックを入れてください。
こんな感じ
こんな風に、回転しないようになります。
当たるとHPが減っていって、HPが0になると0.5秒後に消滅。
ひとまずこれで完成です!
その他
-
SetTextGimmick
のとこにあったHP {0:D2}
について。HP 15
とかHP 08
とか、指定された変数を表示しろって意味ですね。ライフ {0:D2}
とかすれば当然ライフ 15
とかライフ 08
とかに変わります。 - このときただの
{0}
でもいいんですが、{0:D2}
とすると自動的に2桁(04とか08とか13とか)で表示されます。 - 小数なら
{0:F2}
とすると小数点2桁まで表示とかできます。0.04
0.28
1.10
とかケタをそろえて表示できるわけですね。 -
EventSystem
がまだワールドに残っていたら消してください。 - Logicで出てくる「Add」とか「LessThan」とか「Clamp」とかの計算についての一覧はこちら。
「パターン編2(https://zenn.dev/vins/articles/ef2d93ca6c4400/)」につづく。
Discussion