入室するたびに異なるメッセージを表示してみよう【セーブ機能を使う】

Cluster Creator Kitの「セーブ機能」を利用すると、ワールドを退出してもプレイヤーごとの情報を保存することができます。
今回はこの機能を使ってプレイヤーの入室回数をカウントし、初入室とリピーターで異なるメッセージを表示するようにしてみます。
例えば、カフェのようなワールドでお客さんごとに出すメッセージを変えることができます。

まずはセーブ機能を使って、ワールドへの入室回数をカウントする仕組みをつくります。

セーブ機能を実装するには「Initialize Player Trigger」コンポーネントを、入室回数のカウントには「On Join Player Trigger」「Player Logic」コンポーネントを使います。
空のGame Objectに各コンポーネントを設定していきましょう。

  • Hierarchyを右クリック、または上部メニューのGameObjectから「Create Empty」を選択して、空のGame Objectを作成します。名前を「Player」としてください。
  • PlayerのInspectorで「Add Component」から「Initialize Player Trigger」コンポーネントを検索して追加します。
    • Initialize Player Triggerの+ボタンを押して項目を追加し、Keyを「joinCount」、Initial Valueを「Integer」に変更して値を「0」にします。
  • これでjoinCountの値がセーブされるようになりました。

続いてワールドに入室するごとにjoinCountの値を1ずつ増やすようにします。

  • 先ほどと同様にPlayerのAdd Componentから「On Join Player Trigger」を追加してください。
    • +ボタンで項目を追加し、Targetを「Player」、Keyを「Join」、Valueを「Signal」に設定します。
  • これで、プレイヤーが入室した瞬間にそのプレイヤーに対してSignalが通知されるようになります。
  • 同じくAdd Componentから「Player Logic」コンポーネントを追加してください。
    • Targetを「Player」、Keyを「Join」としてから、+ボタンで項目をひとつ追加し、Keyを「joinCount」、Typeを「Integer」にします。
    • 演算子に「=Add」を選択し、画像のように引数のひとつめを「Roomstate」「Integer」「Player」「joinCount」、ふたつめを「Constant」「Integer」「1」と設定します。

これで入室するたびにjoinCountが1ずつ増え、セーブされるようになりました。

joinCountが増えていくことを確認できるようにしましょう。
Set Text Gimmick」でjoinCountの値を表示してみます。

  • Hierarchyを右クリックか上部メニューのGameObjectから、「UI>PlayerLocalUI – cluster」を追加します。
    • ※UIはシーン上に非常に大きく表示されるため、見づらい場合はHierarchyで選択してからシーン上で「F」キーを押してフォーカスしてください。
  • PlayerLocalUI>SafeAreaを右クリックして、子オブジェクトとして「UI>Legacy>Text」を追加します。
    • 追加された「Text (Legacy)」を選択し、InspectorのAdd Componentから「Set Text Gimmick」を追加してください。
      • Set Text GimmickのTargetを「LocalPlayer」、Keyを「joinCount」、Parameter Typeを「Integer」としましょう。またFormatは「{0}」としておきます。

再生ボタンを押してプレビュー、またはアップロードして確認してみましょう。プレビューを実行するたび、またはアップロードしたワールドに入室するたびに表示される数字が増えていきます。

セーブデータをリセットする場合は、プレビューでは上部メニューの「Cluster>Preview>Settings」から、アップロードしたワールドではWebページのマイコンテンツで「状態をリセット」からリセットすることができます。リセットは非公開状態のワールドにしか実行できず、また実行するとそのワールドのすべてのプレイヤーのセーブデータがリセットされてしまうことに注意してください。

入室回数によって異なるメッセージをUI上に表示してみましょう。はじめての入室なら「はじめまして」、2回目以降の常連には「おかえりなさい」のように切り替えます。

  • まずは表示するメッセージをそれぞれ用意します。
    • PlayerLocalUI>SafeAreaの子に空のGameObjectをふたつ作成し、それぞれ「FirstMessage」「RegularMessage」という名前にしましょう。
      • FirstMessageの子にははじめて入室したときのメッセージ、RegularMessageの子には常連向けのメッセージを、TextやImageなどを使って作成します。
  • FirstMessageとRegularMessageのInspectorでそれぞれ「Set Game Object Active Gimmick」コンポーネントを追加し、Targetを「LocalPlayer」に変更します。
    • FirstMessageのKeyは「firstMessageIsActive」、RegularMessageでは「regularMessageIsActive」としてください。
  • これでそれぞれのメッセージの表示・非表示を切り替えられるようになりました。

次に、入室回数によってこれらの表示・非表示を切り替える仕組みをつくります。Player Logicなどを設定した「Player」オブジェクトを選択し、Inspectorを確認してください。

  • Player Logicに項目をふたつ追加し、それぞれ以下のように設定します。
    • Key「firstMessageIsActive」、Type 「Bool」、演算子「=Equals」
      • 引数1「RoomState」「Integer」「Player」「joinCount」
      • 引数2「Constant」「Integer」「1」
    • Key「regularMessageIsActive」、Type「Bool」、演算子「=GreaterThanOrEqual」
      • 引数1「RoomState」「Integer」「Player」「joinCount」
      • 引数2「Constant」「Integer」「2」

これで、joinCountが1のときはfirstMessageIsActiveが、2以上のときはregularMessageIsActiveがTrueになり、対応するメッセージが表示されます。

最後に、表示されたメッセージが一定時間で消えるようにしておきましょう。

  • Playerに「Player Timer」コンポーネントを追加し、Targetを「Player」、Keyを「Join」、Delay Time Secondsを「5」とします。
    • +ボタンで項目をふたつ追加して、それぞれKeyを「firstMessageIsActive」「regularMessageIsActive」とし、Valueを「Bool」にしてチェックを外してください。これで入室から5秒後にメッセージが消えるようになります。

完成したらプレビュー、またはアップロードして確かめてみましょう。初めて入室したときと2回目以降で表示されるメッセージが変化します。

On Join Player Triggerの代わりに、例えば「Interact Item Trigger」を使ってアイテムをクリックした回数を保存したり、「On Collide Item Trigger」である場所に入った回数をカウントしたりといったこともできます。
またメッセージを表示するだけでなく、例えば「Warp Player Gimmick」と組み合わせて初入室のときだけチュートリアルの部屋にワープさせたり、10回以上訪れた常連にしか入れない秘密の部屋をつくったりといったこともできます。
ワールドで何度も遊んでくれた人向けの隠しコンテンツなど、面白い使い方を考えてみましょう!

記事をシェアしてワールド制作を盛り上げよう!

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

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

続きを読む