よくある質問
どのPhoton製品を使用するべきでしょうか?
対象となるゲームやプロジェクトの特性によって異なります。
通常、弊社はFusion または
Quantumの使用を推奨しています。これらは、弊社のもっとも高度なクライアントソリューションです。
概要について、どちらの製品シートにも製品選びのための「Quadrant」が記載されています:
また、Photon CloudとPhoton Serverのどちらを選択すべきかは、こちらを参照ください。
ご不明点はお気軽にお問合せください。
Photon Cloud
Photon Cloudのステータスを確認する方法は?
Photon Cloudのステータスを確認するには、こちらを参照するか、Twitterで@photon_statusをフォローしてください。
最新のステータスについてお知らせします。
デフォルトのPhotonリージョンは?
少なくとも1つのリージョンが利用できる場合、クライアントはPhoton Cloudに接続可能となるべきです。
この点を保証するため、ディベロッパーが明示的に設定しない場合や「ベストリージョン」オプションを選択しない場合には、デフォルト値を設定するか、
またはデフォルト値を使用する必要があります。
デフォルト値はクライアントSDKによって異なります。
ネイティブSDKでは、OpGetRegions
でサーバーによって返されるリージョンリストのインデックス0の値です。
UnityおよびDotNet SDKでは、デフォルトのリージョンは「EU」とする必要があります。
一部のリージョンを無効にすることは可能ですか?
はい。
許可されたリージョンのリストを定義することにより、別の方法で機能します。
詳細は、Dashboardリージョンのフィルタリングを参照してください。
Photon Bolt
厳密な比較とは?
厳密な比較は、ベクトルに対しておおよその比較を行う組み込みのa != b
を使用する代わりに(a.x != b.x) || (a.y != b.y) || (a.z != b.z)
を行います。複製が必要な非常に小さな変更がある場合に役立ちます。
再配布可能なBolt Serverビルドを作成する方法はありますか?
はい、Boltはヘッドレスサーバーの作成に対応しているため、任意のコンピューターで実行できます。
Photon Cloudを使用するBolt Freeを使用している場合、他のプレイヤーが参加できるようにルームを公開するだけです。Bolt Proを使用している場合でも、ローカルまたは任意のクラウドサービスで実行できます。IPが接続する他のプレイヤーに送信する方法が必要です。
また、こちらに単純なヘッドレスサーバーのサンプルも用意されています。
ロケットのような発射物のラグを補償する必要がありますか?
発射体を発射する武器の場合、遅れ補償は問題になる可能性が高くなります。
たとえば、発射物がサーバー上で自律的に存在する場合、発射物はどの時間空間に存在する必要がありますか?
発射物をサーバーでシミュレートして移動する準備ができるたびに、他のすべてのプレイヤーを「後退」させる必要がありますか?
必要な場合、他のプレイヤーをどれだけ時間的に後方に移動させるべきですか?これらは考慮すべき興味深い質問です。
単に発射物オブジェクトを遅らせることはありません(つまり、クライアントで発射物を発射する音を予測しないということではなく、実際の発射物が遅れ補償されないというだけです)。
詳細はこちら
プロジェクトのすべてのボルトアセットをクリアする方法は?
すべてのBoltアセットは project.json
ファイルにシリアル化されているため、以下をクリアします:
- Unityを閉じる。
<Project Folder>/Assets/Photon/PhotonBolt/project.json
ファイルを削除する。- Unityを開く。
- Boltのコンパイル。
Bolt/Compile Assembly
メニュー。
EC2のヘッドレスサーバーにBolt Freeを使用する場合の推奨構成は何ですか?
スニペット
ゲームの開発に役立つ小さなコードのリストを次に示します。
テレポートする方法は?
デフォルトでは、Boltは、移動する距離がエンティティで指定されたTeleport Threshold
よりも短い場合、エンティティを自動的に補間/補外します。
これを超えると、スムージングをスキップするテレポートが強制され、これは自動的に行われます。
Bolt.IState.SetTeleport(NetworkTransform transform)
を使用してテレポートを強制することができます。これは、クライアントに送信される次の位置更新のリクエストを本質的にキューに入れ、設定に関係なくテレポートを強制します(1つの送信ティックに対して-フラグは送信後にfalseに戻ります)。
C#
void Teleport(Vector3 newPosition)
{
state.SetTeleport(state.transform);
player.transform.position = newPosition
}
その場合、SessionListUpdatedが呼び出されないときに検索時にセッションが存在しないことをどのように確認しますか?
たとえば、1.2.9より前に、ルームリストの更新を5秒に設定した場合、コールバックを受信するには5秒待つ必要があります。
その後、使用可能なセッションがないことがわかります。
これで、Photon Bolt 1.2.9以降では、同じ5秒間待機するように接続したときにコルーチンプロセスを開始できます。
Getting Started
サンプルに付属する基本メニュースクリプトに実装例を含めました。
主な部分は次のとおりです。
C#
public class Menu : Bolt.GlobalEventListener
{
private Coroutine _timerRoutine;
// ...
public override void BoltStartDone()
{
// ...
if (BoltNetwork.IsClient)
{
// This will start a server after 10secs of wait if no server was found
_timerRoutine = StartCoroutine(ShutdownAndStartServer());
}
}
public override void BoltShutdownBegin(AddCallback registerDoneCallback)
{
registerDoneCallback(() =>
{
BoltLauncher.StartServer();
});
}
public override void SessionListUpdated(Map<Guid, UdpSession> sessionList)
{
// Stop background routine if a server was found
if (_timerRoutine != null)
{
StopCoroutine(_timerRoutine);
_timerRoutine = null;
}
}
}
ゲームサーバーの起動時に特定のポートを設定する方法は?
Photon Boltインスタンスをゲームサーバーとして実行する場合、ピアがバインドを試行するIP/ポートを構成できます。
これは、たとえばクラウドサービスでゲームをホストしていて、使用するポートの範囲が限られている場合に便利です。
デフォルトでは、Boltはオペレーティングシステムに内部ソケットをバインドするポートを選択させますが、以下に示すように、 BoltLauncher.StartServer
の適切なオーバーロードを呼び出すことで上書きできます。
C#
public static class BoltLauncher
{
// ...
public static void StartServer(int port = -1);
public static void StartServer(UdpEndPoint endpoint, string scene = null);
public static void StartServer(UdpEndPoint endpoint, BoltConfig config, string scene = null);
// ...
}
したがって、この方法でサーバーを起動できます:
C#
void StartBoltServer()
{
// Custom Port number
BoltLauncher.StartServer(<custom port>);
// OR
// Custom IP and Port number
BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Parse("<custom IP>"), <custom port>))
}
Boltのデフォルトの設定をコードを使用して変更する方法は?
サーバーまたはクライアントを起動する前にコードでBoltの設定をカスタマイズしたい場合には、
BoltRuntimeSettings.GetConfigCopy
を呼んでください。これによって、返されたオブジェクトが修正され、StartClientまたはStartServerへの最後の引数として渡されます。
コードを使用すれば、Bolt Settings ウィンドウに表示されていない詳細設定にもアクセスできます。
C#
BoltConfig config = BoltRuntimeSettings.instance.GetConfigCopy();
// change any settings you want on the config object here,
// be aware that bolt will not verify/limit any settings when you do
// it directly in code, so you can break things completely by supplying
// incorrect/invalid config values.
BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Any, 27000), config);
Boltでインターネット接続が失われたことを検出するにはどうしたらいいですか?
デフォルトで、インターネットの接続が失われるとBoltがPhoton Cloudサービスやリモートサーバー、またはクライアントとの接続不良を検出します。すべての場合において、タイムアウトが発生した後にローカルのインスタンスがシャットダウンされます。これは主に接続サイド(サーバなのかクライアントなのか)および接続タイプによります。
シャットダウンにあたり、現在シーンで実行されている次のコールバックをいずれかのBolt.GlobalEventListener
で受信します。:
C#
public override void BoltShutdownBegin(AddCallback registerDoneCallback, UdpConnectionDisconnectReason disconnectReason)
{
registerDoneCallback(() =>
{
// Will show disconnect reason.
Debug.LogFormat("Shutdown Done with Reason: {0}", disconnectReason);
// Show the current connectivity of the peer
ConnectivityCheck();
// Lods the Scene at index 0
SceneManager.LoadScene(0);
});
}
void ConnectivityCheck()
{
if (Application.internetReachability == NetworkReachability.NotReachable)
{
Debug.Log("NotReachable");
}
else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
{
Debug.Log("ReachableViaCarrierDataNetwork");
}
else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
{
Debug.Log("ReachableViaLocalAreaNetwork");
}
}
インターネット接続不良により切断されたかどうかを確認するには、Unity APIから閲覧可能なApplication.internetReachability
プロパティを確認します。
請求
学生、趣味でおこなっているディベロッパー、インディー向けの割引はありますか?
弊社の製品にはすべて、無料プランとワンショットのプランがあります。
また弊社は通常、Unityアセットストアのセールに参加し、また当選者にはクーポンを提供しています。
1つのPhotonアプリケーションに、複数の100CCUプランを組み合わせることはできますか?
いいえ。
100CCUプランは1つのAppIDにつき1回のみ適用でき、複数の100CCUプランを使用することはできません。
複数のPUN+アセットシートを購入している場合には、各AppIDに対して個別の無料100CCUを適用する必要があります。
1つのアプリに対してさらに多くのCCUが必要な場合、次の上位プランは500CCUです。
月額または年額プランをご利用の場合には、その月額/年額プランのCCUに加えて、12ヶ月間有効の100CCUを使用できます。