エラーと対応法
Identity重複
Spawn scene object not found for xxxxxxxx. Make sure that client and server use exactly the same project. This only happens if the hierarchy gets out of sync. UnityEngine.Debug:LogError (object)
Could not spawn assetId=00000000-0000-0000-0000-000000000000 scene=xxxxxxxx netId=1
実行時にNetwork Identityが2つ以上存在している状態のため
Player Prefabに設定されているNetwork Identityコンポーネント以外を外す。
Network Behaviourを継承したScriptをアタッチすると
もれなくNetwork Identityが付いてくるので注意。
参考サイト:Unity Forums Spawn scene object not found for 1
アセットID重複
Failed to spawn server object, did you forget to add it to the NetworkManager? assetId=xxxx netId=x
参考サイトにはアプリケーションの再構築の必要を示唆しているが
私の場合はUnity再起動でエラーが解消された。
NetworkManagerのPlayer Prefabsに正しいオブジェクトが選択されているか
再度確認するのもエラー解消に繋がると思われます。
参考サイト:Client Error: Failed to spawn server object
PlayerControllerが既に追加されている
NetworkClient.AddPlayer: a PlayerController was already added. Did you call AddPlayer twice?
こちらは参考サイトが見つからなかったのですが、
NetworkManager.StartClient実行後に数秒だけconnecting状態に入るため
connecting状態の間にNetworkManager.StartHostを実行したことが原因と推測。
そのため、接続のタイミングをずらすと解決した。
Clientのプレイヤーが動かない
こちらは特にエラーメッセージが出ず、
ただClient側のプレイヤーが新Input Systemのコマンドに反応しない事象。
新Input Systemは入力を取得したいゲームオブジェクトに
「Player Input」コンポーネントをアタッチする必要がある。
このPlayer InputコンポーネントのEnabledするタイミングを調整する必要がある。
Player Inputコンポーネントの初期状態をDisabledにしておき
NetworkBehaviourが継承されているスクリプトに下記コールバック関数を用意しておく。
public override void OnStartAuthority()
{
base.OnStartAuthority();
PlayerInput playerInput = GetComponent<PlayerInput>();
playerInput.enabled = true;
}
結果、正しく権限取得したタイミングでPlayerのInput Systemが作動するようになる。
参考サイト:Networking Unity’s Third Person Character Controller – Mirror
(随時更新予定)
コメント