PUN Classic (v1)、PUN 2 和 Bolt 處於維護模式。 PUN 2 將支援 Unity 2019 至 2022,但不會添加新功能。 當然,您所有的 PUN & Bolt 專案可以用已知性能繼續運行使用。 對於任何即將開始或新的專案:請切換到 Photon Fusion 或 Quantum。

Frequently Asked Questions

哪一種 Photon 產品適合我?

The answer to this depends mostly on your project 這個問題的答案主要取決於您的專案和團隊。
一般來說,我們建議使用FusionQuantum,這是我們最先進的客戶解決方案。

為了快速概覽,兩個產品表都包含產品選擇器 "Quadrant":

如有任何問題,請隨時與我們聯絡。

Photon Cloud

Photon Cloud 宕機了嗎?

您可以在 這裡確每個產品的目前和過去狀態。
我們也在 Discord 伺服器上發布狀態更新。

是否有預設的 Photon Cloud 區域?

實際上,沒有預設區域。客戶端知道 Photon Cloud 的名稱伺服器位址。它們是全域的,用於為給定的 AppId 提供最新的區域清單。

客戶端將 ping 每個區域並識別延遲最低的「最佳區域」。

如果無法成功 ping 通任何區域,則使用清單中的第一個區域。

是否可以停用某些區域?

是的。
它的工作原理是定義一個沒有“禁用”區域的“區域允許列表”。
閱讀更多關於「儀表板區域過濾」的資訊。

我們可以取得所有雲端伺服器/IP 的清單嗎?

這樣的列表並不存在,因為光子雲變化太頻繁。伺服器會被新增或刪除,甚至有時會出現新的區域。這意味著不可能將 Photon Cloud(作為一個整體)添加到允許清單中。

對於企業雲來說這是一個不同的主題。我們會透過電子郵件討論這個問題。

Photon Industries Circle 內的應用程式可以依賴主機名稱進行允許清單:*.photonindustries.io。確保使用 ns.photonindustries.io 作為要連接的「伺服器」。

Photon Bolt

什麼是Strict comparison?

Strict comparison 是 (a.x != b.x) || (a.y != b.y) || (a.z != b.z) 而不是 a != b 向量比較來進行近似。如果您需要複製非常小的更改,它會很有用。

有沒有辦法建立可再發行的 Bolt 伺服器?

是的,Bolt 支援建立無頭伺服器,因此您將能夠在任何您想要的電腦上運行它。
如果您使用的是使用Photon Cloud 的Bolt Free,這只會發布一個房間以便其他玩家可以加入,如果您使用的是Bolt Pro,您仍然可以在本地或任何雲端服務上運行它,只需要一個傳輸到的方式要連接到的 IP 上的其他玩家。

我們也提供了一個簡單的無頭伺服器範例此處

我需要對火箭等彈頭進行滯後補償嗎?

對於發射彈丸的武器來說,滯後補償的問題更大。
例如,如果彈丸自主生活在伺服器上,那麼彈丸應該生活在什麼時空?
每次彈體準備好由伺服器模擬和移動時,是否所有其他玩家都需要「向後移動」?
如果是這樣,其他玩家應該向後移動多遠的時間?這些都是值得考慮的有趣問題。
在《半條命》中,我們避開了它們;我們只是不延遲補償彈丸物件(這並不是說我們不預測您在客戶端上發射彈丸的聲音,只是實際的彈丸沒有以任何方式進行延遲補償)。
更多資訊此處

如何清除專案上的所有 Bolt Assets?

所有 Bolt 資產都被序列化到project.json檔案中,因此要清除:

  1. 關閉 Unity;
  2. 刪除 <Project Folder>/Assets/Photon/PhotonBolt/project.json 文件;
  3. 打開 Unity;
  4. 編譯 Bolt, Bolt/Compile Assembly 菜單;

在 EC2 上的無頭伺服器上使用 Bolt Free 的建議設定是什麼?

>Firewall Configuration
Firewall Configuration.

Snippets

以下是可以幫助您開發遊戲的小程式碼片段的清單。

如何傳送?

預設情況下,當 Bolt 移動的距離小於實體中指定的Teleport Threshold時,Bolt 會自動對實體進行內插/外插。
任何超過這個值的東西都會強制傳送跳過平滑,並且這是自動發生的。
您可以使用Bolt.IState.SetTeleport(NetworkTransform transform)強制傳送,它實質上會將發送到客戶端的下一個位置更新請求排隊,以強制傳送,無論設定如何(對於一次發送標記- 標誌被設定回來)發送後為 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 window視窗中未公開的更多設定。

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");
    }
}

若要檢查您是否因缺少 Internet 連接而斷開連接,請查看透過 Unity API 提供的Application.internetReachability屬性。

計費

您是否為學生、業餘愛好者或獨立開發者提供特別優惠?

我們所有的產品都有免費套餐和一次性入門方案。
我們通常也會參加Unity的資源商店銷售活動,偶爾也會贈送代金券給幸運兒。

我可以為單一 Photon 應用程式組合多個 100 CCU 方案嗎?

不可以。

每個AppId只能申請一個。
它們可以與付費訂閱相結合,並在有效期內使用。

如果您的單一應用程式需要更多 CCU,下一個更高的方案是 500 CCU 方案。
如果您訂閱月度或年度方案,那麼除了月度/年度方案中的 CCU 之外,您仍將保留 100 個 CCU 12 個月。

我的 Photon 計畫包含多少流量?

Photon Cloud 和 Premium Cloud 方案包括每個 CCU 3GB。

例如, 1,000 個 CCU 的月度方案每月包含 3 TB 的流量。

如果您的應用程式產生超用流量,我們將自動透過電子郵件發送提醒。您將在月底透過您的 Photon 帳戶電子郵件收到超額使用通知。該內容金額基於以下計算:

總流量 - 包含流量 = 超額流量(以 GB 為單位)

流量以每 GB 2.38台幣/4.75台幣計算,具體取決於所使用的 Photon Cloud 區域。該費用會追加到下個月費用清單裡。

如果峰值 CCU 超過我的 Photon Cloud 方案預訂的 CCU,會發生什麼情況?

如果您訂閱了 500 CCU / 1,000 CCU / 2,000 CCU 方案,則會自動為您的應用程式啟動「CCU Burst」。 Photon Cloud 將允許比您預訂的更多的 CCU,以便為您的用戶提供最佳體驗。

但是一旦Burst啟動,您有義務根據商定的條款在 48 小時內升級到所需的訂閱等級。

如果您不升級,我們將向您的 Photon 帳戶電子郵件發送“超額通知”,並收取超出您訂閱方案的每個 CCU 按 32.4台幣/33台幣/43.2台幣(基於所使用的 SDK)的費用。該費用會自動追加到您的下個月費用清單裡。

Photon 以「峰值 CCU」收費,即給定月份內每個區域的峰值 CCU 的總和。即使達到高峰後使用量減少,也請務必升級,以免產生超額費用。

Back to top