ミッション機能パッケージは、プレイヤーが完了することで報酬を得たり、体験を進めたりできるミッションを作成するための即時利用可能な機能を提供します。すべてのミッションにはID、カテゴリ、およびプレイヤーがミッションを完了するために完了しなければならないタスクのリストが必要です。ただし、タスクリストは空にすることもでき、ミッションの報酬を即座に受け取ることが可能です。
このパッケージのカスタマイズオプションを使用すると、次のように独自のゲームプレイ要件を満たすためにすべてのミッションをパーソナライズできます。
- 新しいプレイヤーがあなたの体験に参加し、D1保持率を向上させるミッションを作成する。
- 中長期的な目標と進行感を追加して、D7およびD30保持率をターゲットにする。
- ゲーム内のさまざまなシステムを表に出し、プレイヤーがそれらと対話することで報酬を得られるようにしてエンゲージメントを高める。

パッケージの取得
クリエイターストアはツールボックスのタブであり、あなたのプロジェクトで使用するためのRobloxとRobloxコミュニティによって作成されたすべてのアセット(モデル、画像、メッシュ、音声、プラグイン、ビデオ、フォントアセット)を見つけるために使用できます。クリエイターストアを使用して、機能パッケージを含む1つ以上のアセットを直接オープンな体験に追加できます。
すべての機能パッケージは正常に機能するためにコア機能パッケージを必要とします。コアとミッション機能パッケージのアセットがインベントリにあると、プラットフォーム上の任意のプロジェクトで再利用できます。
インベントリから体験にパッケージを取得するには:
次のコンポーネントのセットのインベントリに追加リンクをクリックして、Studio内でコアとミッションをインベントリに追加します。
Studioのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開きます。
ツールボックスウィンドウで、インベントリタブをクリックします。マイモデルの並べ替えが表示されます。

フィーチャーパッケージコアタイルをクリックし、次にミッション機能パッケージタイルをクリックします。両方のパッケージフォルダがエクスプローラウィンドウに表示されます。
パッケージフォルダをReplicatedStorageにドラッグします。
ミッションの定義
各完了可能なミッションには、ミッションを完了するために終了しなければならないタスクのセット、設定オプション、およびオプションの表示メタデータが含まれ、すべてReplicatedStorage.Missions.Configs.Missions内で定義でき、同じフォルダ内のTypesスクリプトからエクスポートされるタイプで指定されます。
必須フィールド
各ミッションに必要なフィールドは次のとおりです。
| 名前 | タイプ | 説明 |
|---|---|---|
| missionId | string | メインのミッションテーブルキー。すべてのミッションは、独自のユニークな文字列によって識別されます。 |
| categoryId | string | ミッションはカテゴリーに属し、UIでカテゴリーによってグループ化されます。 |
| tasks | table | プレイヤーがミッションを完了するために終了しなければならないタスクのリスト。 |
アンロック条件
デフォルトでは、ミッションは自動的にプレイヤーにアンロックされ、正確に1回だけ完了できます。ただし、次のオプションの設定オプションを使用してこの動作を変更できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| prerequisites | table | ミッションがアンロックされる前に完了しなければならない他のmissionIdのリスト。 |
| manualOnly | bool | ミッションの自動アンロックを無効にします。その代わりに、ミッションをアンロックするために関数を呼び出す必要があります。他のアンロック条件もすべて満たされている必要があります。 |
| availableAfterUtc | bool | 指定されたUTC時間より前にミッションはアンロックできません。 |
| availableBeforeUtc | bool | 指定されたUTC時間の後にミッションはアンロックできません。この時間の前にアンロックされているが完了していない場合、ミッションは失敗したことになります。 |
| repeatable | bool | ミッションは完了後に再度アンロックされます。 |
| repeatLimit | number | ミッションがリピート可能な場合、この回数を超えてリピートすることはできません。 |
| repeatCooldownSeconds | number | ミッションがリピート可能な場合、アンロックされるまでに遅延があります。 |
| expireSeconds | number | ミッションがアンロックされ、指定された秒数内に完了しない場合、ミッションは失敗します。 |
| expireCountOffline | bool | ミッションにexpireSecondsがあり、expireCountOfflineがtrueに設定されている場合、プレイヤーが実際に体験にいない間の時間もミッションの期限にカウントされます。 |
メタデータ
ミッションには、ミッションのユーザーインターフェースでの表示方法を指定するメタデータがあります。次のオプションフィールドを使用して、メタデータをカスタマイズできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| displayName | string | ユーザーインターフェースでmissionIdの代わりに表示するミッションの名前。 |
| description | string | ミッションについての追加情報や文脈を提供する長いテキストブロック。 |
| visibleAfterComplete | bool | trueに設定されている場合、ミッションは完了後もリストに表示されますが、完了済みとしてマークされます。 |
| visibleAfterFailed | bool | trueに設定されている場合、ミッションは失敗後もリストに表示されますが、失敗としてマークされます。 |
| visibleBeforeUnlocked | bool | trueに設定されている場合、ミッションは完了可能になる前に表示されますが、ロックされた状態です。 |
| invisibleWhileActive | bool | trueに設定されている場合、ミッションは進行中でも見えません。 |
| rewards | table | 報酬表示情報のリスト。
|
タスクの定義
各ミッションには、ゼロまたはそれ以上のタスクを設定できます。ミッションにタスクがゼロの場合は、アンロック後すぐに受け取ることができます。タスクが1つ以上の場合、タスクが完了すると、プレイヤーはそのミッションに関連付けられた報酬を受け取ることができます。それぞれのタスクには、ミッションに関連付けられたタスクのtaskIdがあります。
タスクには2つのタイプがあります:
- タイムタスク - タスクの開始と停止を異なる時点で行うことができます。タスクのタイマーが動いている間に一定の時間が経過する必要があり、その後タスクが完了します。
- カウントタスク - タスクの進行を追加または設定できます。進行が設定された値に達すると、タスクが完了します。
両方のタスクタイプには、次のフィールドが共有されています:
| 名前 | タイプ | 説明 |
|---|---|---|
| taskType | string | タスクタイプがカウントまたはタイムであるかを指定します。 |
| counter | object | (オプション) このタスクが追跡するカウンター。カウンターは、数値またはタイマーのためのプレイヤー固有の永続ストレージです。複数のタスクが単一のカウンターを追跡できます。例えば、プレイヤーが集めたコインの数を追跡するタスクが複数ある場合、それらはすべて同じ「コイン」カウンターを共有することができます。これらのタスクは、新しいコインが集められるのを独立して追跡することも、カウンター値から続けてカウントすることもできます(すでに集めたすべてのコイン)。
|
| metadata | object | (オプション) タスクがUIに表示される方法に関する情報。
|
| callToAction | object | (オプション) コールバック関数をトリガーするボタン。
|
カウントタスクのフィールド
カウントタスクには必須の値があります。タスクの進行がこの量に達すると、タスクは完了と見なされます。
| 名前 | タイプ | 説明 |
|---|---|---|
| goalCount | number | (オプション) タスクを完了するために必要な進行。 |
タイムタスクのフィールド
タイムタスクには、目標の時間が設定されており、開始と停止が可能です。目標の時間に達すると、タスクは完了します。
| 名前 | タイプ | 説明 |
|---|---|---|
| goalSeconds | number | タスクを完了させるために経過させなければならない秒数。 |
| startImmediately | bool | タスクがアンロックされるとすぐに時間のカウントを開始する必要があるかどうか、タスクが開始された後だけにするかです。 |
| includesOfflineTime | bool | プレイヤーが体験に実際にいない間にかかる時間を含むべきかどうかです。 |
カテゴリの構成
カテゴリは明示的に定義する必要はありませんが、ミッションのカテゴリにはデフォルト値が使用されます。ただし、ReplicatedStorage.Missions.Configs.Categories内でこれらの値を構成することで、カテゴリに追加の効果を加えることができます。カテゴリはユニークなCategoryIdsで識別され、これはミッション設定でも参照されています。
| 名前 | タイプ | 説明 |
|---|---|---|
| repeatDelaySeconds | number | (オプション) 設定されている場合、指定された時間が経過するたびにカテゴリ内のすべてのミッションがリセットされ、再度アンロック、完了、報酬の受取が可能になります。これは、指定されたカテゴリ内で繰り返し可能なミッションとは別です。 |
サーバーロジックの統合
ReplicatedStorage.Missions.Server.Examples.MissionsExampleを見てみてください。これには、サーバーがミッション機能パッケージとどのように相互作用するかが示されています。
ミッション機能パッケージを体験にドラッグした後、主に4つのことを接続する必要があります。
ミッション設定内でミッションを定義します。
タスクの進行や進行に結びつけられたカウンターの更新ロジックを体験に追加します。
README-- ジャンプタスクを伴うミッションJumpingの進行を増加させるMissions.addProgressToTask(player, "Jumping", "Jumps", 1)-- 時間タスクTimeInBattleを伴うミッションBattlingTimeのタイマーを開始するMissions.startTimedTask(player, "BattlingTime", "TimeInBattle")-- 時間タスクTimeInBattleを伴うミッションBattlingTimeのタイマーを停止するMissions.stopTimedTask(player, "BattlingTime", "TimeInBattle")-- Jumpsカウンターに関連付けられたすべてのタスクの進行を増加させるCounterSystem.addCounter(player, "Jumps", 1)-- TimeInBattleタイマーカウンターに関連付けられたすべてのタイムタスクのタイマーを開始するCounterSystem.startTimer(player, "TimeInBattle")-- TimeInBattleタイマーカウンターに関連付けられたすべてのタイムタスクのタイマーを停止するCounterSystem.stopTimer(player, "TimeInBattle")ミッション完了ハンドラーを設定し、オプションでロック解除または失敗ハンドラーを設定します。完了ハンドラーを使用して、体験内でミッションからの報酬を授与します。
READMElocal function completeHandler(player: Player, missionId: Types.MissionId)print(`{player}がミッション{missionId}を完了しました`)-- プレイヤーに報酬を授与します。endMissions.setCompletionHandler(missionId, completeHandler)自動的にアンロックされないミッションをアンロックします。ミッション機能パッケージのロジックは、ミッションが完了する前にすべてのミッション要件が満たされていることを確認します。その後、報酬を受け取ることができます。
READMEMissions.unlockMission(player, "Manual")
定数の構成
コア機能パッケージの定数は2か所にあります:
共有定数はReplicatedStorage.FeaturePackagesCore.Configs.SharedConstantsにあります。
パッケージ固有の定数、ここではミッション機能パッケージに関するものは、ReplicatedStorage.Missions.Configs.Constantsにあります。
さらに、翻訳用の文字列は1か所に分けて見つけることができます:ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings。
UIコンポーネントをカスタマイズ
パッケージオブジェクト(色、フォント、透明度など)を変更することで、ミッションUIの視覚的なプレゼンテーションを調整できます。たとえば、ReplicatedStorage.Missions.Configs.Constants内でSingleTaskModeを有効にすると、単一のタスクを持つミッション自身にタスクの進行状況を表示するプログレスバーを表示できます。
さらに、あなたの体験に既存のUIがあり、それをミッション機能パッケージと統合したい場合、クライアントのModuleScriptであるMissionsClientには、サーバーからプレイヤーのミッションに関する情報を取得するために必要なすべての機能が含まれています。