Classic/VPC環境で利用できます。
プラグインサーバは、ゲーム開発者がゲームをより豊かで多彩なものにするためのさまざまな機能を提供します。本紹介書を通じて、プラグインサーバの主な機能とメリットを理解することができます。
この機能はデフォルトで提供されるものではありません。お申し込みの場合にのみご利用できます。サポートセンターからお申し込みください。
主な機能は次の通りです。
- 統計照会
- リーダーボード
- 友達管理
- プッシュ
- データストア
- 外部決済(Xsolla、PlayUs、MyCard、Danalなど)
- 外部決済アイテム管理
- 本人確認 PASS(韓国)
- API使用量照会
SWAGGER API文書
SWAGGER APIをご参照ください。

Authorizeをクリックして API KEYと PROJECT IDを入力すると使用可能になります。これにより、すべての機能をテストできます。
統計を照会
プラグインサーバを通じてゲーム内のさまざまな統計情報を照会できます。これにより、開発者はユーザーの行動分析やゲームの進行状況のモニタリングなど、さまざまな分析を行うことができます。
リーダーボード
リーダーボードは、ゲーム内でユーザー間の競争を促進し、達成感を高める重要な機能です。ユーザーはリーダーボードを通じて自分の成績を他のユーザーと比較したり、ゲーム内での順位を確認することができます。これはユーザーのモチベーションを高め、ゲームへの没入感を高めるのに大きな役割を果たします。
主な機能とメリット
- 成績比較: ユーザーはリーダーボードを通じて、自分のゲーム成績を他のユーザーと比較できます。これにより、自分の実力や進行状況を客観的に評価できます。
- 競争促進: リーダーボードはユーザー間の競争を促進します。上位にランクインするために、ユーザーはより多くの時間と労力をゲームに費やすことになります。
- 目標設定: リーダーボードは、ユーザーに達成すべき具体的な目標を提示します。例えば、次の順位のユーザーを追い越すことや、最高スコアを更新することなどが目標となり得ます。
- コミュニティ形成: 共通の目標を持つユーザーの間には、自然とコミュニティが形成されます。ユーザーはお互いの成績を祝ったり、ゲーム戦略を共有したりするなどして関係を強化することができます。
- リワードとインセンティブ: リーダーボードの上位にランクインしたユーザーには、ゲーム内のリワードや証明書などのインセンティブを提供できます。これにより、ユーザーの達成感を高め、ゲームへの継続的な関心を誘発します。
実装方法
- データの収集: ユーザーのゲームプレイデータ(例: スコア、達成レベルなど)を収集します。
- ソートと順位決定: 収集されたデータに基づいてユーザーの成績をソートし、順位を決定します。この過程でさまざまなソートアルゴリズムを使用できます。
- リーダーボード更新: 決められた周期(例: 毎日、毎週、毎月)でリーダーボードを更新します。リアルタイムで更新するシステムを構築することもできます。
- ユーザーインターフェース: ユーザーが簡単にリーダーボードを確認し、自分の順位を知ることができるように直感的なユーザーインターフェースを提供します。
- セキュリティと不正の防止: リーダーボードシステムには不正行為を防止するためのセキュリティ対策が必要です。例えば、異常なスコア獲得を検知して排除する機能などが挙げられます。
リーダーボードシステムは、ゲームの競争要素を強化し、ユーザー間の相互作用を促進する効果的な方法です。開発者は、リーダーボードを通じてゲームの楽しさを最大化し、ユーザーの長期的な参加を誘導することができます。
友達管理
ユーザーがゲーム内で友達を追加したり管理したりする機能を提供します。これにより、社会的相互作用を促進し、ゲーム内コミュニティの形成をサポートします。
プッシュ
プッシュはゲーム内でユーザーに通知を配信する機能を提供します。これにより、ユーザーはゲーム内で発生する重要なイベントをリアルタイムで確認できます。プッシュは、ゲーム内通知、イベント通知、警告メッセージなどさまざまな形で使用できます。
データストア
データストアは、ゲーム内で作成されるさまざまなデータを保存、管理、検索する機能を提供するシステムです。これはゲーム開発過程で非常に重要な役割を果たし、ゲームの進行状況、ユーザー設定、成績記録などさまざまな情報を包括的に扱います。データストアの効率的な活用は、ゲームの安定性とユーザーエクスペリエンスを大幅に向上させます。
主な機能とメリット
-
データの保存と管理: ユーザーのゲームの進行状況、設定、アイテム保有状況などを保存・管理します。これにより、ユーザーがゲームを中断して再開する際、以前の進行状況を正確に復元できます。
-
リアルタイムデータ同期: マルチプレイヤーゲームでは、複数のユーザー間のデータ同期が重要です。データストアはリアルタイムでデータを同期し、すべてのユーザーに一貫したゲーム環境を提供します。
-
データの分析と統計: ゲーム内で発生するさまざまなデータを分析することで、ユーザーの行動、ゲーム内経済システムの効率、アイテムの人気度などが把握できます。これにより、ゲームの改善点を見つけ、ユーザーエクスペリエンスを向上させることができます。
-
セキュリティと安定性: データストアは、ユーザーデータの安定性とセキュリティを保証します。データは暗号化されて保存され、不正アクセスから保護されます。さらに、データ消失防止のためのバックアップと復旧システムを提供します。
-
柔軟なデータモデリング: 開発者はゲームの要件に合わせてデータモデルを設計することができ、必要に応じて簡単に修正・拡張することができます。これにより、ゲームの発展に合わせてデータストアを柔軟に管理できます。
-
効率的なリソース管理: クラウドベースのデータストアサービスを使用する場合、サーバリソースを効率的に管理できます。使用量に応じて自動的にリソースが調整され、コスト効率とパフォーマンスの最適化を同時に達成できます。
使用事例
- 進行状況の保存: ユーザーがゲームを中断して再開する際に、以前獲得したアイテム、レベル、位置などを正確に復元します。
- 設定の保存: 各ユーザーのゲーム内設定(例: サウンドレベル、グラフィック設定など)を保存し、ゲームの再起動時にこれを適用します。
- リーダーボード: ユーザーの成績をデータストアに保存し、それを基にユーザー全体または友達間のリーダーボードを作成します。
- ゲーム内経済: ユーザーのアイテム購入、取引履歴を管理し、ゲーム内経済システムのバランスをモニタリングします。
データストアは、ゲームの品質とユーザーエクスペリエンスを向上させるために不可欠な要素です。ゲーム開発者はデータストアを通じてゲームデータを効果的に管理し、ユーザーにシームレスなゲームプレイ体験を提供できます。
データの保存
データストアにデータを保存するには、以下のコードを使用します。
データは namespaceと keyの値を持ち、Map形式で保存します。
- C#:
// サンプルデータ作成
var data = new Dictionary<string, object>();
data["key1"] = "value1";
data["key2"] = "value2";
NBase.putDatastore(
[NAMESPACE: String],
[KEY: String],
[DATA: Dictionary<string, object>],
(datastore, error) => {
if (error != null)
{
// failed
}
else
{
// success
}
});
- Kotlin:
// サンプルデータ作成
val data = MutableMapOf<String, Any?>()
data["key1"] = "value1"
data["key2"] = "value2"
NBase.putDatastore([NAMESPACE: String], [KEY: String], [DATA: MutableMapOf<String, Any?>]) { datastore, e ->
if (e != null) {
// failed
} else {
// success
}
}
- Java:
// サンプルデータ作成
Map<String, Object> data = new HashMap<>();
data.put("key1", "value1");
data.put("key2", "value2");
NBase.INSTANCE.putDatastore([(String)NAMESPACE], [(String)KEY], [(Map<String, Object>)DATA]) { datastore, e ->
if (e != null) {
// failed
} else {
// success
}
return null;
});
- Swift:
// サンプルデータ作成
var data: [String: Any] = [:]
data["key1"] = "value1"
data["key2"] = "value2"
NBase.putDatastore(namespace: [NAMESPACE: String], key: [KEY: String], data: [data: [String: Any]]) { result in
switch result {
case let .success(data):
if let data = data {
// success
} else {
// data is nil
}
case let .failure(error):
// failed
}
}
- Objective-C:
// サンプルデータ作成
NSMutableDictionary *data = [NSMutableDictionary dictionary];
data[@"key1"] = @"value1";
data[@"key2"] = @"value2";
[NBaseBridge.shared putDatastore:[NAMESPACE: String] key:[KEY: String] data:[data: NSDictionary] :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (error) {
// failed
} else {
// success
}
}];
データの照会
複数の一致するデータストアを照会するには、以下のコードを使用します。
- C#:
NBase.getDatastores(
[NAMESPACE: String],
(datastores, error) => {
if (error != null)
{
// failed
}
else
{
// success
}
});
- Kotlin:
NBase.getDatastores([NAMESPACE: String]) { datastores, e ->
if (e != null) {
// failed
} else {
// success
}
}
- Java:
NBase.INSTANCE.getDatastores([(String)NAMESPACE], (datastores, e) -> {
if (e != null) {
// failed
} else {
// success
}
return null;
});
- Swift:
NBase.getDatastores(namespace: [NAMESPACE: String]) { result in
switch result {
case let .success(data):
if let data = data {
// success
} else {
// data is nil
}
case let .failure(error):
// failed
}
}
- Objective-C:
[NBaseBridge.shared getDatastores:[NAMESPACE: String] :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (error) {
// failed
} else {
// success
}
}];
特定の一致する namespaceと key値を持つデータストアを照会するには、以下のコードを使用します。
- C#:
NBase.getDatastore(
[NAMESPACE: String],
[KEY: String],
(datastore, error) => {
if (error != null)
{
// failed
}
else
{
// success
}
});
- Kotlin:
NBase.getDatastore([NAMESPACE], [KEY]) { datastore, e ->
if (e != null) {
// failed
} else {
// success
}
}
- Java:
NBase.INSTANCE.getDatastore([NAMESPACE], [KEY], (datastore, e) -> {
if (e != null) {
// failed
} else {
// success
}
return null;
});
- Swift:
NBase.getDatastore(namespace: [NAMESPACE: String], key: [KEY: String]) { result in
switch result {
case let .success(data):
if let data = data {
// success
} else {
// data is nil
}
case let .failure(error):
// failed
}
}
- Objective-C:
[NBaseBridge.shared getDatastore:[NAMESPACE: String] key:[KEY: String] :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (error) {
// failed
} else {
// success
}
}];
データ削除
データストアに保存されているデータを削除するには、以下のコードを使用します。
- C#:
NBase.deleteDatastore(
[NAMESPACE: String],
[KEY: String],
(datastore, error) => {
if (error != null)
{
// failed
}
else
{
// success
}
});
- Kotlin:
NBase.deleteDatastore([NAMESPACE: String], [KEY: String]) { datastore, e ->
if (e != null) {
// failed
} else {
// success
}
}
- Java:
NBase.INSTANCE.deleteDatastore([(String)NAMESPACE], [(String)KEY], (datastore, e) -> {
if (e != null) {
// failed
} else {
// success
}
return null;
});
- Swift:
NBase.deleteDatastore(namespace: [NAMESPACE: String], key: [KEY: String]) { result in
switch result {
case let .success(data):
if let data = data {
// success
} else {
// data is nil
}
case let .failure(error):
// failed
}
}
- Objective-C:
[NBaseBridge.shared deleteDatastore:[NAMESPACE: String] key:[KEY: String] :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (error) {
// failed
} else {
// success
}
}];
外部決済用アイテムの管理
外部決済で購入したアイテムの管理機能を提供します。この機能により、開発者は外部決済アイテムの購入、リリース、管理を便利に行うことができます。
本人確認 PASS(韓国)
韓国内で提供されるゲームの場合、法律要件に基づく本人確認機能を提供します。これにより、ユーザーは安全にゲームを利用することができ、開発者は規制遵守を保証することができます。
この機能はウェブビューの形で提供されます。Danalから発行された本人確認キーをダッシュボードに追加し、SDKまたはウェブでアクセスすると利用できます。
Unityでの本人確認方法
NBaseSDK.NBase.openIdentity((status, error) => {
Debug.Log("result: " + status);
}
ウェブでの本人確認方法
既存の JavaScript SDKと連携し、以下のように使用します。
GP.Identity('61d075b0aa289337e4c71e89',{userId: "userId"},function(resp) {
if(resp.success) {
alert(resp.orderId); // orderIdを利用して Server To Serverで認証結果を取得できます。
} else {
alert(resp.error);
}
})
API使用量照会
プラグインサーバを利用した API呼び出しと使用量を照会する機能を提供します。これにより、開発者はシステムのパフォーマンスをモニタリングし、必要に応じて最適化を行うことができます。