ゲームワールドなどで、特定の条件を満たしたときにプレイヤーに知らせる仕掛け、 いわゆる「実績システム」を実装することができる UdonSharp ギミックです。 ## 内容物 ### Example.prefab 実装サンプルです。 * インタラクト * ピックアップ * 領域に侵入(Player Trigger Enter) * 上記実績の獲得 をトリガーにして実績を獲得するようになっています。 ### Scripts/AchievementSystem.cs システム本体です。通知キャンバスの更新とSEを鳴らすのが仕事です。 実績の取得が被ったらタイミングをずらす仕組みが入っているので多少面倒なことをやっています。 ### Scripts/Achievement.cs 個々の実績です。実績キー・名前・アイコン等の保持と、実績獲得時に何が起こるべきかの定義が仕事です。 ### Animations/ 通知キャンバスのアニメーションです。サンプルの状態だとエルデンリング風味が強めです。 ### Example Assets/AchievementIcons/ 実績のアイコンのサンプルです。UnityとVRChatが許すなら実績アイコンの仕様は問いません。 サンプルに合わせる場合、achievement-base.png を土台として使えます。 未取得の実績のアイコンはグレースケールにして明度を60%に落としたものです (ImageMagick で `-type Grayscale -modulate 60` で加工) 元ファイルも入っていますが作者はKrita使いなので AchievementIcons.kra を開ける人向けです。 ## 前提 * VRChat Creator Companion `UdonSharp` テンプレート ## 使用方法 Example.prefab をシーンに配置して unpack prefab して、カスタマイズしてください。 AchievementSystem の Achievement SE に実績取得時の効果音を設定できます。 ### 実績の追加 新しい実績を作るのに必要なものは * 「Key; キー」(被らない内部的な名前) * 「Label; 名前」(プレイヤーに見せる名前) * 実績のアイコン * (取得状況を見せるUIなどがある場合)実績のアイコンが表示される場所 です。 UdonBehaviour Achievement.cs に上記を設定して、AchievementSystem の配列変数 Achievements[] に追加してください。 ### 実績の取得トリガー 実績を獲得させるためには、 個々の Achievement に対して `achievementUdonBehaviour.SendCustomEvent("FireAchievement");` もしくは AchievementSystem に対して `system.FireAchievement(int index);` もしくは AchievementSystem に対して ``` systemUdonBehaviour.SetProgramVariable(index); systemUdonBehaviour.SendCustomEvent("CustomEvent_FireAchievement"); ``` 相当の操作をしてください。 ### 前提実績 個々の実績の配列変数 Requirements[] に、前提実績のキーを書くことで、 条件が満たされるまで獲得されない実績を作ることができます。 (自前で同様の管理をしても大丈夫です) 前提実績が揃ったら即座に獲得してほしい場合、Auto Fire を true にしてください。
CC0
¥0
¥0
¥0
¥0
¥0
¥1,000~3,000