Discord Activities

Discord Activitiesを使用すると、WebAssemblyゲームを直接Discordに統合できます。この環境では、マルチプレイヤーゲームの必須条件が追加されております。以下をご覧ください。ここで説明されていないことに関してはDiscordの開発ガイドをご参照ください。

Photonに関していうと、PhotonのアドレスにURL Mappingをセットアップすること、そしてクライアントがそれに応じてサーバーURLを書き換えることが最も重要です。

本機能は、Photon Realtime .Net SDKおよびUnity SDKs v4.1.8.11以降、そしてv5.1.1以降で対応しています。

必須条件とセットアップ

Applications running as "Discord Activity"として実行されるアプリケーションは安全なページ(https)でホスティングさて、通信できるサーバー(アドレス)が限られます。全ての通信は必ずdiscordsays.comに向かいます。

Discordはこれを"URL Mapping"で解消し、discorsays.com上に自分の好きなアドレス(URLやサブドメイン)を設定できるようになります。

DiscordアクティビティのためのURLマッピングは、次のようになっています(未完成):

Discord URL Mapping
Discord URL Mapping

Photonサーバーが動いているドメインはexitgames.comおよびphotonengine.ioです。Industries Circleのアプリは*.photonindustries.ioを使用している可能性があります。

各マシンにはそれぞれ固有のサブドメインがあります(例:ネームサーバー用の ns.photonengine.io)。場合によっては、Photonではパス(通常は「Master」や「Game」)を使用しており、それは維持する必要があります。

Photon Cloudで使用される数多くのアドレスに対応するため、マッピングで「Parameter Matching」を使用してください。
プレフィクスが/photonengine/{subdomain}であれば、{subdomain}.photonengine.ioをターゲットにしてマッピングできます。

Address Rewriter

PhotonにURL Mappingを設定するとdiscordsays.com経由のルートが開かれますが、クライアントは全てのサーバーに足して引き続き通常のPhoton URLを受け取ります。クライアント上でコードを使用しAddress Rewritingを行い、Photon URLからマッピングされたURLに切り替える必要があります。

Photonクライアント上でのサーバーアドレス修正には、client.AddressRewriter関数を使用します。登録が済むと、接続が行われる前にFunc<string, ServerConnection, string>が呼び出され、必要に応じてアドレスを修正できるようになります。

Discord Activitiesでは次のような書き換えになります。

C#

string clientId = "12345678"; // your app's discord client id

private string AddressRewriterDiscord(string address, ServerConnection serverType)
{
    bool isUri = Uri.TryCreate(address, UriKind.Absolute, out Uri uri);
    if (isUri)
    {
        string host = uri.Host;
        string[] hostSplit = host.Split('.');
        if (hostSplit.Length != 3)
        {
            Debug.LogError($"Host address could not be split into 3 parts (subdomain, domain and tld).");
            return address;
        }

        string subdomain = hostSplit[0];
        string domain = hostSplit[1];

        string discordAddress = $"{uri.Scheme}://{clientId}.discordsays.com/.proxy/{domain}/{subdomain}{uri.path}";
        //Debug.Log($"discordAddress: {discordAddress}");
        return discordAddress;
    }

    return address;
}

アドレスの書き換えを適用するには、クライアントの接続前に下記のようにメソッドを登録してください。
client.AddressRewriter = this.AddressRewriterDiscord;

こちらはDiscord Activitiesのビルドでのみ使用するようにしてください。

関連トピック

Discord Activityとしてアプリを問題なく実行するには、Unityが生成したHTMLファイル内のデータパス(ファイルやリソースの場所を示すパス)を、「.proxy」アドレスを使うように調整する必要があります。

Discord Data Paths
Discordのデータパス
Back to top