見出し画像

cluster:レベルギミックを思い出す

はじめに

この記事では、clusterでレベルギミックを実装する方法を記載しています。
過去実装したワールドを思い出しつつ自分用の備忘録としてまとめるつもりです。
あくまでも私の実現方法なのでもっとイケてて効率の良い方法があると思うので、こうしたらいいよー!というアドバイスめっちゃお待ちしております。

レベルアップギミック

1:レベルの表示

まず画面上にレベルを表示する部分を準備します。

  • プレイヤーの情報を集約するため「Player」という空のGameObjectを用意します。

  • その子要素としてUI→PlayerLocalUI を追加し、UIを表示できる場所を追加します。

右クリックで追加
  •  SafeAreaの子要素にテキストでレベルを表示するためのコンポーネントを追加します。

(よくしらんけど)Text-TextMeshProは使えなかったので LegacyのTextを使ってる
  • Textに「Set Text Gimmick」コンポーネントを追加します

  • Textで表示する中身を置き換えてくれるモノで以下の設定を済ませておきます

    • Target : LocalPlayer (ユーザ個別で表示するため

    • Key      :level (ここにセットされる数字を表示します

    • Parameter Type : Integer (レベルは整数なので整数

    • Format: Lv.{0}  ←{0}の部分が置き換わる

  • 今の時点で再生するとこんな感じ

  • 画面上にTextコンポーネントのに設定されている内容がそのまま見えてたらOK

  • 数値の設定とかはこのあとやっていきます

ここからはじめます

2:プレイヤーロジック:初期化

「On Join Player Trigger」はプレイヤーがワールドに入った瞬間(joinした瞬間)に発動されるトリガー
そのトリガーを利用してユーザ設定を初期化する「init」のシグナルを発するようにしておく。
さらに受ける側はPlayerLogicを使って、各種の初期設定を入れる

レベルと経験値を初期化してるけど、他の初期化処理もまとめておくとよいかも

ちなみに、値を保存するInitialize Player Trigger を使う場合は
ここに数値を入れちゃうと初期化されてしまうので
レベルや経験値を保存したい場合は初期化処理から外したほうがいい場合もある

3:経験値の加算

次に経験値の加算処理を追加します。
ちなみに、特に意味はないけど個人的にわかりやすいので処理単位でGameObjectを分けてみてます。プログラミングでいうところの関数で分けるようなイメージ?

PlayerLogicで「addExp」を呼ばれた際に処理をする
既存の「exp」に「expPoint」を足しています。
まだexpPointはこの時点では定義してないですが、ゲーム中からexpPointを渡すようにしておく必要があります(例えば敵を倒したとか、スコアが加算されたから とか

4:経験値を提供する元を用意する

次に経験値をプレイヤーに渡すモノを用意します。
今回は適当に触ったら経験値が加算されるCubeを用意します。

  • 単純なCubeの追加 isTriggerにチェックを入れておく

  • 「On Collide Item Trigger」コンポーネントを追加し以下の設定を行う

    • On Collide Item Trigger:アイテムが他のものに衝突したことを通知するトリガー

  • Triggersは以下の2つを設定

    • Target:Owner 「expPoint」加算する経験値を数値で渡します

      • value Integer で数値を渡す

    • Target:Owner 「addExp」2:経験値の加算で定時した加算処理を実行します

      • valuer Signal でシグナルを送る

同じアイテムで無限に経験値付与されても困るので
「Destory Item Gimmick」コンポーネントを追加し、「On Collide Item Trigger」の最後にdestoryを呼ぶようにしておきます

ですとろーい

5:経験値加算部分にレベル計算も追加する

addExpで呼び出している「PlayerLogic」の最後に「calcLevel」を呼び出すシグナルを追加

calcLevelでは以下の処理をしています
ゲームによってレベルの上がり方はデザインの幅のある部分かと思いますが
今回はexpを平方根(sqrt)で計算し整数部分のみをレベルとして利用します

返り値をIntegerにしてるので勝手に整数になる

6:完成

1つのCubeに接触すると exp100を得るようになっているので
exp 100 = Lv.10
exp 200 =Lv.14
exp 300 = Lv.17 となる

最後に

clusterにゲームワールドがもっと増えるといいなってこっそり思っています。
私もまだまだ勉強中の身で恐縮ですが少しでも誰かの参考になればと思っています。
次は会話ウィンドウのギミックの作り方を思い出しながら書いてみようと思います。

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