はじめに
キャラクターや装備、スキルの育成要素としてスキルツリーが用いられることが一般的です。
これまで GS2 にはスキルツリーを実現するために適切なマイクロサービスがない状態がつづていました。
今回、はスキルツリーを実現するための専用のマイクロサービスを追加することで、より様々な仕様に対応できるようにしました。
追加された機能の詳細
依存関係のあるノードをマスターデータとして定義し、ノードを解放するために必要なコストを設定します。
ノードを解放した際にゲーム内で得られる効果については、ノードのメタデータに格納できます。
ノードの解放APIを呼び出すと、コストを消費しノードを解放状態に変更します。
ゲーム内では解放済みノードのメタデータからステータスの補正を行えます。
解放したノードを未解放に戻す機能も有しています。
この場合、ノードごとに個別に設定可能な返却率に基づいてコストとして設定したリソースの返却を行えます。
Unity からの使用例
ノードの解放状態を取得
var domain = gs2.SkillTree.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Status( ); var item = await domain.ModelAsync();
ノードを解放
var domain = gs2.SkillTree.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Status( ); var result = await domain.ReleaseAsync( nodeModelNames: new string[] { "node-0001", } );
ノードを未解放に戻す
var domain = gs2.SkillTree.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Status( ); var result = await domain.RestrainAsync( nodeModelNames: new string[] { "node-0001", } );
ノードの解放状態をリセットする
var domain = gs2.SkillTree.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Status( ); var result = await domain.ResetAsync( );