ミッション機能パッケージは、プレイヤーが報酬を獲得し、ゲーム内で進行するために完了できるミッションを作成するための即時機能を提供します。すべてのミッションにはID、カテゴリ、およびプレイヤーがミッションを完了するために完了しなければならないタスクのリストが必要です。ただし、タスクリストは空にすることができ、ミッションの報酬をすぐに獲得できるようにすることができます。
パッケージのカスタマイズオプションを使用すると、次のようなユニークなゲームプレイ要件に合わせてすべてのミッションをパーソナライズできます。
- 中期から長期の目標と進行感を追加することで、D7およびD30リテンションをターゲットにする。
- ゲーム内のさまざまなシステムを表面化し、プレイヤーがそれらと対話することで報酬を得ることで、エンゲージメントを高める。

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

機能パッケージコアタイルをクリックし、次にミッション機能パッケージタイルをクリックします。両方のパッケージフォルダがエクスプローラーウィンドウに表示されます。
パッケージフォルダをReplicatedStorageにドラッグします。
ミッションを定義する
各完了可能なミッションには、ミッションを完了するために終了しなければならないタスクのセット、構成オプション、およびオプションの表示メタデータが含まれ、これらはすべてReplicatedStorage.Missions.Configs.Missions内で定義できます。タイプは同じフォルダ内のTypesスクリプトからエクスポートされます。
必須フィールド
各ミッションには次のフィールドが必要です。
| 名前 | タイプ | 説明 |
|---|---|---|
| missionId | string | メインのミッションテーブルキー。すべてのミッションは独自のユニークな文字列で識別されます。 |
| categoryId | string | ミッションはカテゴリに属し、UIでカテゴリごとにグループ化されます。 |
| tasks | table | プレイヤーがミッションを完了するために終了しなければならないタスクのリスト。 |
アンロック条件
デフォルトでは、ミッションはプレイヤーに自動的にアンロックされ、正確に1回完了できます。ただし、次のオプションの構成オプションを使用してこの動作を変更できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| prerequisites | table | ミッションをアンロックする前に完了しなければならない他のmissionIdsのリスト。 |
| 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)-- タイムインバトルタスクでミッションBattlingTimeのタイマーを開始するMissions.startTimedTask(player, "BattlingTime", "TimeInBattle")-- タイムインバトルタスクでミッションBattlingTimeのタイマーを停止するMissions.stopTimedTask(player, "BattlingTime", "TimeInBattle")-- Jumpsカウンターに結びついたすべてのタスクの進行状況を増加させるCounterSystem.addCounter(player, "Jumps", 1)-- タイムインバトルタイマーカウンターに結びついたすべてのタイムタスクのタイマーを開始するCounterSystem.startTimer(player, "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には、サーバーからプレイヤーのミッションに関する情報を取得するために必要なすべての関数が含まれています。