FROM mcr.microsoft.com/dotnet/core/runtime:2.2
WORKDIR /app
COPY . .
とエントリポイントを削除
あとサーバー側の実装で引数一個目で port 番号を受け取って利用するようにしておく。
using Grpc.Core;
using MagicOnion.Hosting;
using MagicOnion.Server;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;
namespace CubeWalk.Server
{
class Program
{
static async Task Main(string[] args)
{
if (1 > args.Length || !int.TryParse(args[0], outint port))
return;
GrpcEnvironment.SetLogger(new Grpc.Core.Logging.ConsoleLogger());
// for SSL/TLS connection//var config = new ConfigurationBuilder().AddEnvironmentVariables().Build();//var certificates = new List<KeyCertificatePair> { new KeyCertificatePair(File.ReadAllText("server.crt"), File.ReadAllText("server.key")) };//var credential = new SslServerCredentials(certificates);
await MagicOnionHost.CreateDefaultBuilder()
.UseMagicOnion(
new MagicOnionOptions(isReturnExceptionStackTraceInErrorDetail: true),
new ServerPort("0.0.0.0", port, ServerCredentials.Insecure))
// for SSL/TLS Connection//new ServerPort(config.GetValue<string>("MAGICONION_HOST", "127.0.0.1"), 12345, credential))
.RunConsoleAsync();
}
}
}
out フォルダをカレントにイメージをビルドして
docker build . -t cubewalkroom:1.0
次の run コマンドで port フォワードして、とりあえず 12000 ポートでサーバーを立てます。
個人ゲーム制作でも何百万人にも膨れ上がるユーザーを平気で捌ける順応性のあるバックエンドサービスを短期無料で作れる時代になりました。 Amazon の GameSparks, Google の Firebase, Microsoft の PlayFab, 富士通クラウドテクノロジーズのmobile backend など様々なところから mobile backend as a service (mBaaS)というものが、ウチが一番だ、これから成長するんだと宣伝している時代です。
中でも、ゲーム内に登場するアイテムを実際のお金(USDや日本円)で購入するシステムを提供している Microsoft の PlayFab を、今回は日本語の紹介が少ない中、実際に動かして解説していきたいと思います。
初見さんで PlayFab を Unity で使えるようにする手順が気になる方はこちらを一読してなぞってみましょう。 qiita.com
要約すると PlayFab のアカウントとゲームタイトルを作成して
PlayFab SDK 使うための Unity アセットをインポート後
タイトルIDをエディタ拡張で記入すれば
アカウント作成 or ログインのクライアント API 呼び出しが成功することを確認できます。(慣れてくると数十分の手作業)
以降は、上記のカスタムIDにリンクしたプレイヤーとしてゲームの API を叩くことを意識しておいてください。
(何このログイン、キモ!?と思う方は前の記事の「プレイヤー認証」を読んでね)
PlayFab の他に支払い処理をするアドオンとの連携が必須
Microsoft Store, Google Play や App Store などの配信サービスにアップロードせず、Windows 用のゲームとして審査いらずで課金システムを設けることができます。(そんな手段も取れます)
自身の Web サイトからゲーム本体をダウンロードできるような仕組みにしても良いですね。
ただしクレジットカード情報や実際のお金の移動はデリケートな処理です。そもそもカード会社が我々を信用しない…
そこで PlayFab のアプリ内課金を支援する3rdパーティ製のアドオンにその大事な情報を任せて、
金銭授受の結果だけをゲームに反映させることができる機能が PlayFab にはあります。(もちろん金の移動先はあなたの銀行口座です。)
プレイヤーを作成するのは最初のカスタムIDによるアクセス時で、それ以降はサーバー側でカスタムIDとリンクされた、別のプレイヤーID x 2 を参照する形で全てのクライアントAPIが実行されます。
ゲームを提供する我々をスタジオと見立てて、それぞれ
・マスタープレイヤーID
・タイトルプレイヤーID
をそれぞれスタジオに一意に、タイトル(ゲームごと)に一意に決定して管理します。
戦略的には、後々そのユーザーがミドル・ヘビーユーザーになってくれたときにアカウント連携して、カスタムIDからリンクを解けば、偶然カスタムIDを発見した第三者にアカウントを乗っ取られることもなく
複数デバイスを持つユーザーを一意に見分け、また、スタジオ内の複数のタイトル間をまたぐプレイヤー情報を管理してタイトル間の統計を取ったりと、考え込まれた枠組みでプレイヤーによるクライアント API 実行を実現できます。