在Photon Fusion 中有許多事件諸如
在Fusion中提供INetworkRunnerCallbacks,來對這些事件做相關處理
public class CallBacksProvider : MonoBehaviour, INetworkRunnerCallbacks
{
    
    public void OnEnable(){
        var myNetworkRunner = FindObjectOfType<NetworkRunner>();
        myNetworkRunner.AddCallbacks( this ); //向NetworkRunner註冊輸入
    }
    
    public void OnDisable(){
        var myNetworkRunner = FindObjectOfType<NetworkRunner>();
        myNetworkRunner.RemoveCallbacks( this ); ////向NetworkRunner移除輸入
    }    
    //玩家加入時觸發
    public void OnPlayerJoined(NetworkRunner runner, PlayerRef player)
    {
        //相關處理
    }
    
    // 輪詢輸入
    public void OnInput(NetworkRunner runner, NetworkInput input)
    {
        // 相關處理
    }
    
    // 更新連線,僅有SessionLobby可用
    public void OnSessionListUpdated(NetworkRunner runner, List<SessionInfo> sessionList)
    {
        // 相關處理
    }
    
    // 其他事件
    // ......
}
要使用INetworkRunnerCallbacks請務必註冊輸入,儘管當INetworkRunnerCallbacks掛在與NetworkRunner相同物件時會自動註冊輸入,避免產生不必要的誤判。
// 設定NetworkButtons列舉,重要提示: 必須明確定義它並從0開始
public enum NetworkInputState
{
    SpawnBuilding = 0,
    SpawnAnimal = 1
}
// 輸入結構
public struct NetworkInputData : INetworkInput
{
    public NetworkId selectObjectId; 
    public NetworkButtons states; 
    public Vector3 selectDirection; 
    public NetworkPrefabRef spawnPrefab;
}
public NetworkInputData inputData = new NetworkInputData();
public void OnInput(NetworkRunner runner, NetworkInput input)
{
    buttons.states.Set(NetworkInputState.SpawnBuilding, true); // 設置按鈕
    
    input.Set(inputData); // 設定輸入
    inputData = default; // 重置輸入
}
在Fusion中使用INetworkRunnerCallbacks.OnInput取代原生的輸入,來控制聯網物件,NetworkInput所設定的input需要設定輸入結構,輸入結構必須繼承INetworkInput,倘諾需要透過UI或其他方式控制,還有NetworkButtons能夠使用,只須設定相應需求的列舉即可,要注意INetworkInput能新增的資料型態有些許限制。
https://doc.photonengine.com/zh-tw/fusion/current/manual/data-transfer/player-input