在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