Logic使ったゲームワールドを作ろう 【準備編】

この記事では、clusterで複雑なギミックをつくるために必須な「Logic」を理解するために必要となるトリガー・ギミックについて「的あてゲームをつくる」の記事を例にしてclusterクリエイター・vinsさんが解説します。

この記事がオススメなのは……

この記事がオススメなのは……

  • clusterでワールドを作ったことがある人
  • そのとき、トリガーとギミックをいちおう使ったことがある人(カンペキに理解してなくてもいいです。この記事でも少し説明してます)
  • でもLogicってのがなんか良く分からない人

です!

Logic使ってますか〜?

どうも、vinsといいます。

clusterでは、2020年11月25日からLogic機能を使い、

  • プレイヤーがHPやMPを持つ
  • フツーのゲームみたいにHPとかを画面に表示する

……といったことがデキるようになりました。

よくあるこんな感じのゲーム

そもそもLogicで何ができるのかと言うと

HPやMPがあるゲームを作ったり、脱出ゲームのフラグに使ったり……

「ゲームっぽいゲーム」を作るにはゼッタイ必要なものなんですが。
「むずかしい! わからない!」と感じる人も多いみたいです。

今こそLogicをはじめよう

Logicを使ったゲームを作れるようになると、グンとできることが増えますよ!というわけで、clusterでLogic始めていきましょう。

でもまずはトリガーとギミックの理解から!

「Logicわかんない! だけどトリガーとギミックなら使ったことあるよ!」って人はいると思います。
それは重要なことです。

Logic使うなら、まずはトリガーとギミックを知っておかないといけません。

複雑なゲームも、まずトリガーとギミックを理解してから!(製作ワールド:打てッ! ホームランダービー

トリガーとギミックってなんだっけ

トリガーとギミックってなんだっけという方に向けておさらいです。

  • 「何かが起きたぞ」→トリガー(当たった、ボタン押した、アイテム拾った……)
  • 「何かをさせるぞ」→ギミック(音を出す、弾を出す、アイテム動かす、アイテム消す……)

とりあえずこんな感じですかね。

開発者さんもこう言っている

こちらはclusterの開発者・ねおりんさんのTweet。

オペレーションってのはひとまず、Logicのことだと思ってもらえればいいです。
トリガーとギミックの間にはさんで色々やるものが、Logic(オペレーション)。

なので、Logicを理解する前に、まずトリガーとギミックを理解しなくちゃいけません!
トリガーとギミックでやれることを、より広げていくのがLogicと考えてもいいです。

(※逆にLogicだけ使えるようになっても、何も起こせない……)

トリガーとギミックは、公式の的当てゲームを理解できればOK!

トリガーとギミックについては、cluster公式の的当てゲームを作る記事がよくまとまっていると思います。

なので、的当てゲームの記事を見て、自分でもマネできるようにしましょう。

cluster公式より引用、的当てゲーム

テンプレートワールド 「シューター」でもいいですが、こちらはLogicの話も入っているワールドです。
けっこうフクザツなので、今読んでいるこの記事を読み終わってからさわったほうがいいかも?

的当てゲームの記事を読むときのヒント

的当てゲームの完成形は↓こんな風↓になってます。

  • 銃(Gun)といくつかの的(Target)がワールドの中に置いてある
  • 弾(Bullet)はPrefabになっていて、銃を使うと出てくる

PrefabというのはフツーにUnity使っていてもちょっと???ってなりやすいとこです。なんで、ひとまずは何も考えずに公式の的当てゲームの記事にある 「弾」アイテムのPrefabを用意する をマネしてみてください。

この部分をよく読んでくださいね

的当てゲーム、トリガーとギミックの流れ

的当てゲームは、主に4つの部分からできています。

「銃を使う」「弾が出る」「弾がぶつかる」「的の動き」。

さらに中身を見ていくなら……

1.銃を使う
銃を拾い、「使う」ボタンを押すとUse Item Triggerが発動!
Create Item Gimmickが呼ばれて、「2.弾が出る」へ。
Play Audio Source Gimmickも呼ばれて、バァーンと音がなる!
2.弾が出る
弾が出た瞬間、On Create Item Triggerが発動!
Add Instant Force Item Gimmickが呼ばれて、弾のスピードが決まる(前に飛び始める)。
その後、弾が何かにぶつかったら「3.弾がぶつかる」へ。
3.弾がぶつかる
弾が何かにぶつかるとOn Collide Item Triggerが発動!
Destroy Item Gimmickが呼ばれて、弾が消える。
さらに、当たった相手が的ならば「4.的の動き」へ。
4.的の動き
「3.弾がぶつかる」のOn Collide Item Triggerからつながってる!
Play Audio Source Gimmickが呼ばれて命中音がなる!
Set Animator Value Gimmickで、的がクルクル回る。

……トリガー・ギミックが苦手な人は、こういうのを読むと「分からん!」となるかもしれませんが、元記事にはスクショの画像とかも多いんで、ゆっくり1つずつ理解していってくださいね。

元記事とこの記事と両方読むとわかりやすく……なるような気がします。。。

画像をたくさん使って説明してくださっています。

的当てゲーム、特にムズカシイところ

的当てゲームの記事はとてもわかりやすいですが、トリガーやギミックを色々使っていく以上、どうしても難しいところもあります。

  • 弾をPrefabにするところ。(操作方法も、なんでそうするのかもちょっとムズカシイ)
  • 「3.弾がぶつかる」でOn Collide Item TriggerCollidedItemOrPlayerが指定されていて、そこから「4.的の動き」のギミックが呼ばれるところ。
  • 的を動かすときのSet Animator Value Gimmickの部分。

↑この辺に関係してるとこは、特に気合いを入れて公式の的当てゲームの記事を読んでください。

(……というかUnityのアニメーションが全体的にムズカシイ……ぶっちゃけ最初は、的当てゲーム記事の、的が回るとこだけ無視してもOKかもしれません!?

トリガー・ギミックだけだと何がマズイのか?

やーっと本題のLogicに入れます。
的当てゲームを見ればわかるとおり、トリガー・ギミックだけでもちゃんとゲーム作れているように見えますね。
でも、それだけじゃ限界があるんです!

この的当てゲーム、連射しようと思えばいくらでも連射ができてしまいます
単純な的当てゲームならいいですが、もっとフクザツなゲームだと……

  • ワールド内に弾が増えすぎて、めちゃくちゃ重くなる
  • 連射スピードだけで勝負が決まるつまらないゲームになってしまう

みたいな問題が。

こんな風に弾を大量に撃てたら重くなったりゲームバランス崩壊したりしてしまいますね……

じゃあどうしよう

連射スピードが速すぎる問題を解決したい……どうすればいいでしょう?
問題は、「銃を使う」トリガー と 「弾が出る」ギミックが直結していることです。

「銃を使ったら、無条件で弾が出る」。

これを、

「銃を使って、しかも○○だったら、弾が出る」。

こうできればいい。

実際にやってみた

実際にやってみた例が、↓の動画です。

ボタンを押せばいくらでも音はなりますが、弾は0.5秒に1回しか出ないようになっています。

そろそろLogicに踏み込んでいこ〜

さて、何回も書いてますが……
Logic(オペレーション)は基本的に、トリガーとギミックの間にワンクッションはさんで流れを変えるためのものです。

Logicをはさんだ例

トリガー「使う」ボタンを押したぞ!
Logic 連射が速すぎないか? MPは足りてるか?
ギミック 弾を出したり、出さなかったり
トリガー「弾が当たったぞ!」
Logic その敵、HPがまだあるか?
ギミック 敵を消したり、消さなかったり
トリガー「正解と思うものにタッチしたぞ!」
Logic 答えが合っているか?
ギミック 正解エフェクトを出したり、ハズレエフェクトを出したり

どれもトリガーとギミックを直結させず、ワンクッションはさんで、処理を変えています。

(最初に挙げたねおりんさんのTweetを再掲します)

Logicを使うときは「メッセージ」も理解しないといけない!

ところで、今私が出した例……

「HP」とか「MP」とかどうやって作ればいいんでしょうか?
「連射が速すぎないか」も、前回弾を出したときから何秒たったとか、どうやってチェックすればいいんでしょうか?

これをやるには、「数字を(一時)保存しておく」機能が必要なはずです。

そういう機能がclusterにはあるんです。

ParameterTypeとは?

その機能の話の前に、「ParameterType」の話をしないといけません。

まず、「的当てゲーム」に出てきた、トリガーから送られる「メッセージ」ですが……

弾を撃てなら「fire」、弾を消せなら「destroy」、的に当たったら「hit」とか名前がついていました(名前はKeyってとこに書くんでしたね)。

で、こういう「メッセージ」にはKeyだけでなく「ParameterType」というのも設定されていました。

ただ、ぜんぶ、Signalでした。

cluster公式より引用、的当てゲームの記事の「トリガーを引いたら弾が出る」ギミックを作る

トリガー・ギミックだけ使っている場合は、ほとんど「ParameterType」がSignalでOKなことが多いです。

で、「ParameterType」とはなんだったか?
cluster公式によるとこうです。

Parameter Type
メッセージの型(値の種類)を指定します。ギミックによって、読み取れる型に制限があります。

で、↓の4種類があります。(公式の情報をまとめ直しました)

SignalBoolFloatInteger
値を持たない、一時的なものオン/オフ(フラグ)実数(要するに小数)整数

さっぱりわからん! という人も多いでしょう。
実際、トリガーとギミックを使うだけならSignalだけで十分なことが多いです。
BoolとかFloatとかIntegerなんて知らずにSignalを選んでいるだけで、割とどうにかなります。

が! Logicではこいつらが主役になるんです!

BoolとかFloatとかIntegerの「メッセージ」を送ると、送った先にその値が保存されます
これを使って、ヒジョーに色々なことができるんです。

銃の連射速度を制限したり、もちろんHPやMPを作ったりも!

Integer(整数)を使えば、HPが48で5ダメージ受けたからHPが残り43! とかできます。
Bool(オン/オフ フラグ)を使えば、カギを取ってフラグを立ててから閉まったドアの前にいったら開く、とかできます。

Logicを使えばこんなワールドも作れます(製作ワールド:カンヅメRPG

では、そろそろ具体的な話をしていきたいところですが……長くなってしまうので「本編」に続きます!

記事をシェアしてワールド制作を盛り上げよう!
ABOUT US
vins
clusterワールド製作者。数字やLogicが出てくるゲームワールドが好き。「クイズ・正解にタッチ!」ゲームワールド杯2020 Unity Japan賞、「カンヅメRPG」GameJAM2020冬 大賞、ほか大加速祭佳作 GameJAM2021夏 UnityJapan特別賞等。

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む