入室している人を数える部屋2

ワールド全体を覆うコライダーで, 1秒ごとにプレイヤーを数える仕組みを作ったよ.
(厳密にはワールド内の接触判定のあるものを全部数えて, プレイヤー以外のものの数を引く仕組みだけども)

とりあえず使いたい人向け

Unityのプレビュー上だと正しく動きません. 動作確認はClusterアプリの実環境で行ってください.

  1. counter prefabをシーンにドロップしてください. (counter+text prefabをドロップすると, 人数を表示するtextも付きます.)

  2. シーン内のRididbodyがついたオブジェクト全てに, CollidedItemOrPlayerにsubtract signalを送るOn Collide Item Trigger (Enter, Everything)を貼り付けてください. (testシーンのsampleitemからコピペできます)

  3. Global 変数 Number にcounterのコライダー内にいるプレイヤーの数が入ります.

仕組み解説

使用するコンポーネント

On Create Item Trigger
オブジェクト生成時に発動するトリガー
Set Game Object Active Gimmick
設定したBoolがFalseになるとオブジェクトが見えない, 触れない状態になるギミック.
BoolがTrueになると元に戻る.
On Collide Item Trigger (Enter)
コライダーを持つものが触れた時発動するトリガー
接触したもの同士のいずれかがRigidbodyを持っている必要がある.
Global Logic
以下を参照されたし

Set Text Gimmick (Integral)
設定したIntegralの値を表示するギミック
補足
それぞれのコンポーネントについてより詳しく知りたい方は公式ドキュメントへどうぞ!

シーンとヒエラルキー

オブジェクト

counter

on Bool:
counterのアクティブ, 非アクティブを切り替えるBool.
count signal:
来場者を数える処理を開始させるsignal.
add signal:
counterにプレイヤーやRigidbodyのついたオブジェクトが触れたときに, 
numberの数を1増やすsignal.
subtract signal:
counterにカウントさせたくないものが触れたときに,
numberの数を1減らしカウントされなかったことにするsignal.
変数 number:
来場者の数を表す変数.
countfinish signal:
来場者を数える処理の仕上げをさせるsignal:
変数 Number:
来場者の数を表す変数.
変数 numberは処理の過程で数字が変動するため,
最終的なカウント数だけを表すために用意したもの

sampleitem

counterはRigidbodyがついたオブジェクトも検知してしまうため,
それらはcounterにsubtract signalを送るOn Collide Item Trigger コンポーネントを持っている必要がある. 
以後, このコンポーネントを持たせたオブジェクトを数えないオブジェクトと呼ぶ

トリガー, ギミック, オペレーションの流れ

Global にcount signalが通知された時, number0になり, on BoolがTrueになってcounterアクティブ化する.
アクティブ化したcounterがワールド内のプレイヤーとRigidbodyがついたオブジェクトに触れる. On Collide Item TriggerによってGlobalにadd signalが送られ, プレイヤーRigidbodyがついたオブジェクトの数だけnumber増える.
On Collide Item Triggerによって, 数えないオブジェクトはcounterにsubtract signalを送り, counterからGlobalにsubtract signalが送られ, 数えないオブジェクトの数だけnumber減る.
結果, プレイヤーの数だけnumber増える.

Globalにcountfinish signalが通知された時, on BoolがFalseになってcounter非アクティブ化する. numberの数を1減らした上で(※理由不明だがcounterのOwnerだけ2人分カウントされるため) Numberにカウント結果number代入する

メモ
来場者に特別な操作を一切要求せずに人数をカウントできるのが魅力.
ワールド内のRigidbody全てにOn Collide Item Triggerコンポーネントを貼る手間がかかるのが難点.
来場者にボタンを押させて人数をカウントするタイプはこちら

こっちは純粋にプレイヤーのみをカウントするため他のオブジェクトをどうこうする手間はかからない.

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