見出し画像

スタンプカード

スタンプカードとは読んで字のごとくスタンプを押すカードです。
お店を利用すると1つずつ押してくれるアレです。
clusterでも主に運動系イベントで参加した回数を記録するために採用していることもあります。
毎回参加するたびに1つずつスタンプを押していくのが楽しくなりますよね!
ここではそのスタンプカードの作り方を紹介していきます。
機能としては
プレイヤーに数を付与する
プレイヤーに付与された数を保存する
スイッチを押すと数が1増える
数を数字として表示する
数に応じて絵(スタンプ)が表示される
数字や絵は本人のみに見える(ローカル)


こんなところで使ってます!!

Homu-Room for Stamp

イベント専用のスタンプ会場として採用しています。
機能としては上記の他に
イベントに参加1回でスタンプが1個だけ押せる
スタンプがカードに全部溜まったら2枚目以降に続く
イベントに参加しないで入室したときは数の確認だけできる。
スタンプの個数によって特定の絵柄が表示される

というのが追加となっています。

実験場(test3)

実験場にも置いてあります。実際に操作してみてください。
stampを押すと数値が1加算され、少し離れた場所にワープします。

ロジックについて

この記事では今までの記事では少しだけ使用していたロジックというものを多用します。(むしろそれがメイン)
この記事を参考に作ってもらえると同じような機能はできますが、それ以外の独自の機能を持たせたいとなるとそれなりに知識が必要となってきます。
ロジックについてはクリエイターズガイドで基礎をある程度学んでから取り組むのがおすすめです。
ざっくり説明するとギミックを発動させるのに条件をつけるものです。
なお、筆者はロジックについてはこの記事に書いてあることをようやく理解している程度です。めちゃくちゃ精通しているわけではないので内容に間違いがあるかもしれません。そのときはこっそり教えていただけると助かります。

こちらの記事も参考になります!

スタンプカード作成

キーについて

ロジックの基本的なことは前述の記事を読んでもらった前提で話を進めていきます。
最初にロジックを作るのに必要なキーをいくつか決めていきます。
キーの役割や意味については簡単に説明します。

※キーについている数字は実験場にて試作スイッチをいくつか作ったので、区別するためにつけています。なくても大丈夫ですし、他のキーを割り当ててもいいです。ここでは以下のキーを使用して進めていきます。

num3 … プレイヤーに保存される数値。変数とも言います。
addnum2 … num3に与える数値。
applynum2 … num3の数値を変化させるためのロジックを発動させる信号
stamp … num3の数値をスタンプカードに表示させるための信号
stampwarp … スタンプを押したときにプレイヤーをワープさせる信号

使うのはこれだけです。num3というのが中核となって、他のキーはそれを操作するためのキーということになります。
なんかわけわからん!と思うかもしれませんが、まずはひとつずつ作っていきましょう。
ある程度ロジックが組めたら図で解説もしようと思います。

スイッチの作成

まずはスタンプを押すスイッチを作成していきます。
任意の場所に空オブジェクトを作成してください。名前はstampとしてください。
さらに同じ場所に空のオブジェクトともう一つと、3DオブジェクトでCubeを作成し、前述のstampの子に配置してください。
2つ目の空のオブジェクトの名前はItem2とします。これがスイッチの本体となります。 (実験場の試作で他と区別するために番号がついています。Itemのみでもかまいません)
Cubeは名前をSW+1とします。これは実際に押すボタンの役割を果たします。

このように配置

スイッチボタン

まずはスイッチボタンを作ります。
前項で作ったSW+1にコンポーネントを追加します。
Interact Item Trigger 掴めないアイテムに「使う」機能を追加し、使われたことを通知するトリガーです。Itemも自動で追加されます。

これに写真のように設定していきます。
TargetはすべてOwner(ボタンを押した人)です。
このボタンを押すことで「1を足す」という信号を本体に送ります。
スイッチボタンの設定は以上です。
これ以降、このオブジェクトはSWと表記します。

スイッチ本体

Item2がスイッチ本体となります。SWから送られた信号をここで計算したり、プレイヤーに保存したりします。
以下のコンポーネントを追加してください
Initialize Player Trigger プレイヤーの初期状態を決めるトリガーです。
プレイヤーがそのワールドに初めて入室した時には設定された値を通知します。このトリガーに設定されたKeyのメッセージは保存され、2回目以降の入室時には前回の退室時の最終状態を復元します。
Player Logic メッセージを読み取り、計算した結果をプレイヤーへメッセージとして通知するオペレーションです。

Initialize Player Triggerの設定をします。
ここにプレイヤーに付与する数値の設定をします。
また、このコンポーネントを使用することで数値を保存し、次回入室したときにも数値が継続するようにできます。

このように設定します。num3がプレイヤーの持つ数値となり、スタンプを押した数となります。この数値を変更することでスタンプ数を数えていくことができるようになります。
num3、addnum2どちらも0にしてるのは、プレイヤーが入室した時点での数値の変更はないことを意味します。

Player Logicはこのように設定します。

これが「1を足す」という計算をするところです。
SWからapplynum2という信号が送られたらnum3にaddnum2の数値を足して結果をnum3にする、という命令です。

これでスイッチ本体の設定は終わりです。

必要なら文字を表示してなんのSWかわかるようにするといいでしょう。以下の記事を参考にしてください。

ちなみに、このSWはaddnum2の数値を変更することで1以外の数値を加算することができます。
-1を設定すると1が減算されます。0設定すると数値はそのままで信号だけ送られます(現在の数値を表示だけしたいときに便利)
表示も数値の内容にあわせるとなんのSWかわかりやすいと思います。

数値を表示する

前項までのロジックで計算したnum3はワールド内にはある数値なのですが、このままではいったいいくつなのか見えません。
それを表示して見えるようにします。

まず、テキストを用意します。
こちらの記事を参考にしてください。

任意の位置に設置して、Textには0と入力します。
文字の大きさなども好みの大きさでいいでしょう。

Textに次のコンポーネントを追加します。
※Canvasではありません!注意!

Set Text Gimmick Textにメッセージの内容を設定するギミックです。

このように設定します。
プレイヤーが持ってるnum3を数字で表示する、というギミックです。
ちなみにこの数値はTargetがLocalPlayerとなっています。
なので、操作した本人にのみこの数字が見える、という仕様になってます。
なお、これはローカルUIとしても表示可能です。(後述)

スタンプカード

num3の数値をスタンプカードに表示する方法です。
3DオブジェクトのPlaneとCylinderを使ってこのように作成します。
Planeの名前はstampcard、Cylinderの名前は青はBlue、赤はredです。
色や大きさは任意でかまいません。
お試しならblueは2個、redは10個でいいでしょう。
stampcardの子にstamproot(空オブジェクト)さらにその子にblue、redを配置します。

写真ではかなりの数を配置してますが、必要な数でかまいません
構成としては以下のようになっています。
stampcard … スタンプカードの土台です。
stamproot … スタンプカードの本体です。ここにロジックが入ります。
blue … 一定の個数で表示する絵柄です。(無くてもかまいません)
red  … num3が1つ増えるごとに1つ表示される絵柄です。

スタンプカードはローカル表示にするので、次の記事を参考にローカル化してワールドに固定してください。

ここまでの手順でPlayerLocalUIの子にstampcardが配置さてれると思います。ここからはその設定をしていきます。
stampcardには特に追加するコンポーネントはありません。
stamprootに以下のコンポーネントを追加します。
Player Logic メッセージを読み取り、計算した結果をプレイヤーへメッセージとして通知するオペレーションです。

内容がたくさんあるように見えますが、num3が1増えるごとにスタンプが1増えるという内容になります。
num3が1より大きい時に01onを通知する。
num3が2より大きい時に01onと02onを通知する。
num3が3より大きい時に01onと02onと03onを通知する。
以下4,5,6…と同じ感じで通知が増えていきます。
これを先ほど配置したredの個数ぶん作っていきます。(10個配置したなら10まで)
stamprootの設定はこれで終わりです。

redの設定です。
以下のコンポーネントを追加してください。
Set Game Object Active Gimmick GameObjectのアクティブ状態を切り替えるギミックです。

このときのキーは1個目には01on、2個目には02onというように個数に対応したキーを設定していきます。
設定後は一番上にあるチェックを外して非アクティブにします。

チェックを外して非アクティブに

続いてblueの設定です。
こちらはredとほぼ変わりません。
1個目のblueにはなにも追加しません。
2個目のblueにredと同じコンポーネントを追加し、キーは10onにします。

最後に2個目のbuleを非アクティブにしましょう。

これで完成です!実際にプレビューで試してみましょう。

ロジック解説

作ったSWを押すと0という数字が1になり、赤いマークが増えたと思います。もう1度押すと数字が2になり赤いマークも増えます。
数値が10になると青いマークも追加されます。
設定ミスがなければこのような動きになると思います。

ではこれはいったいどうなってるのでしょうか。
最初に入室したときにnum3という数値がプレイヤーに付与されます。
これは当初は0になっています。
SWを押すことでapplynum2という信号がItem2に送られ、num3にaddnum2の数値を足すという計算をします。
と同時に表示されている数字がnum3を読み取り数値を表示します。
SWからはもうひとつstampという信号が送られ、スタンプカードにnum3の数値のぶんblueとredの絵柄を表示するという動作をします。
文章ではなかなか伝えるのは難しいので、概念図を書いてみました。

ロジック概念図

このようにSWが発端となってItem2がnum3を変更し、数字やカードがそれを読み取る、という構造になっています。
(概念図には2とか3は入れてません)
なお、numberについては後述します。

さらに機能を追加

上記のものはスタンプカードの機能の基本となるものです。
イベント等で実際に使うにはさらにいくつかの機能があると便利です。

数字をローカルUIにする

数字をローカルUIにすることでワールド内にいるときは常に見えるようにすることができます。
以下の記事のプレイヤーローカルUIという項目を参考にしてください。

かなり大きくしないと表示されてもなかなか見えにくいかもしれません。

減算スイッチ

先ほど作ったスイッチは1を加算するものでした。
これは1を足すことはできても減らすことができません。
なんらかの理由で1を減算したいときは、先ほど作成したSW+1のaddnum2の数値を-1にすればOKです。
+1と-1のスイッチを両方用意しておくことで数値を自由に変更することができます。

1回しか押せないようにする

じつはこれがイベントで使用するときに必須な機能だったりします。
何回も連打で増やされるとスタンプカードの意味がなくなってしまいますね!
機能としてはこのようになります。
スイッチを壁で囲み外からは押せないようにする。
他のワールドからのワールドゲートでのみ壁の中に入れるようにする。
スイッチを押した瞬間1が加算され、壁の外にワープする。

まずはスイッチを壁で囲みましょう。場合によってはガラス風のマテリアルで半透明にしたり、Mesh Rendererのチェックを外して完全に透明にしましょう。

Homu-Room for StampのスタンプSW
半透明の壁で囲っています

別のワールドから壁の中に来るにはspawn pointを使用します。
これは出現位置なのですが通常はワールドに入ったときに最初に立っている場所になっています。clusterではこれがないとアップロードすることができません。
最初に立つ位置のspawn pointの他にもう一つ用意して壁の中に設置します。
すでにあるspawn pointをコピーしてもいいですし、空のオブジェクトにコンポーネントでSpawn Pointを追加してもいいです。
Spawn Point ワールドに入った際とリスポーンした際の位置と回転を決めるコンポーネントです。

壁の中のspawn pointのSpawn TypeWorld Gete Destinationに変更します。
World Gate Keyは任意のもので大丈夫です。(写真のキーは例です)

次にワープ元となるワールドにワールドゲートを設置します。
ワールドゲートの設置方法はこちらを参照してください。

ワールドのidは先ほどスタンプカードを設置していたワールドにします。
keyは先ほどspawn pointに設定したキーを入力します。

移動元のワールドゲート

このように設定することで、別のワールドからこのワールドゲートを使用したときにだけ壁の中に入ることができます。
必要ならワールドゲートは特定のタイミングのみで使うことができるようにスイッチで出し入れするようにしてもいいでしょう。

スイッチを押したら壁の外にワープするようにします。
スイッチを押したプレイヤーをワープさせるには以下の記事を参考にしてください。

このように設定することで、他のワールドから特定のワールドゲートを使用したときにだけ、1回のみ押すことができるスイッチができました。
簡単に図にしてみたのでイメージしやすいかと思います。

1回しかSWを押せない図

数字を他の人にも見えるようにする

ここで作ってきたスタンプカードのスタンプ数は自分のみに見える仕様でした。これをローカルといいますがこれを他の人にも見えるようにすることができます。

先ほど作ったSWのInteract Item Triggerに項目を追加します。

Item2のオブジェクトにitemという信号を飛ばします。

Item2のほうには以下のコンポーネントを追加します。
Item Logic メッセージを読み取り、計算した結果をアイテムへメッセージとして通知するオペレーションです。

このように設定します。
いちばん下の行の左から3つ目をOwnerとするのがポイントです。

次に表示する数字を作成します。
先ほど作った数字をコピーし、名前をnumberとします。
Set Text Gimmickはこのように設定します。

これがなにを意味するかというと、SWを押すとItem2にitemという信号が出されnum3をitemnumに変えてnumberに送る、結果数値が表示されるという構造です。
Plyer Logicの数値は基本的に本人しか見えませんが、Item Logicの数値にすることで他の人にも見えるようになります。
ただし、1つの数字には1人分しか表示できません。
スイッチを押した人の数字だけが表示されます。
数値を変えずに表示する人を変更するには0を加算するSWを用意するといいでしょう。
0を加算するSWはワールドに入室したときにカードを表示させる方法をしても便利です。

0を加算するSW

よりスタンプカードっぽくする

ここまででスタンプカードを作る機能を紹介してきました。
しかし、真っ白な板に単色のスタンプではなんとも味気ないです。
カードやスタンプそのものを絵や図形でカラフルにしたスタンプカードにすると毎回スタンプを押すのが楽しみになりますね!

自衛隊体操イベントのスタンプカード

この記事は過去に書いてきたものよりもかなり長く複雑な内容となりました。
過去に書いた記事を参考にする場面も多く、今までの知識の総動員と言っても過言ではありません。
少し練習や実験が必要かもしれませんがこのような仕掛けが作れるとワールド作成も楽しいものになると思います!
自由な発想で自分の世界を表現してみましょう!

<<前の記事
★番外編★ライドアトラクション制作話

実験場解説トップページへ

この記事が気に入ったらサポートをしてみませんか?