sharijyuのログ置場

最近はUnityで海戦アクションゲームを作っています。開発に限定されない随想ログ置場

Unity>Unity Netcode for GameObject

Netcode for GameObjectの導入

NetworkManager

  • Netcode for GameObjectを導入するにあたって、まず必要になるSingletonコンポーネント
  • PlayerPrefabの登録
    • PlayerPrefabに登録されたオブジェクトは端末の接続/切断時に、端末毎にインスタンス化される
  • Network Prefabs
    • その他ネットワークを通じて同期したいPrefabを登録する(例としてプレイヤーの発射した弾丸など)

      NetworkObject

  • オブジェクトが、RPCを利用したり、spawnしたりNetworkVariablesを利用できるようにするために必要(NetworkBehaviourクラスを継承することも機能を開放する上では必要)

    Network Transform

  • NetworkObjectが同期するのはSpawn/Despanのみだが、オブジェクトの位置(座標と回転量とスケール)を同期させたい場合は、NetworkTransfrom Classを追加する

    メッセージング/イベント通知

    RPC (=Remote Procedure Calls)

  • ServerRpc
    • NetworkBehaviourを継承したclass内のメソッド名を***ServerRpcとし、[ServerRpc]アトリビュートをつけることで有効化
      • デフォルトではオーナーシップと紐づいたinstanceに対するmethodコールを許可するが、[ServerRpc(RequireOwnership = false)]を付すことで任意のクライアントからの要求を受け入れることができる
    • クライアントからサーバーへのリクエス
  • ClientRpc
    • NetworkBehaviourを継承したclass内のメソッド名を***ClientRpcとし、[ClientRpc]アトリビュートをつけることで有効化
    • サーバーからクライアントへのリクエス
    • Netcode Transformをつけたオブジェクトのtransform情報やNetworkVariableの同期は自動でやってくれるので、臨時のイベントを特定のClientに向けて通知したいような場合が主だったユースケース
      • Serverでしか検出できない衝突イベントに伴う同期処理など