++UNETとは
ネットワーク対戦を実装したりするときに使うUnityの機能
++UNETはdepricated予定であり、2021年以降はサポートされない。
ただ現状、UNETの代替となる次期機能?はアルファ版しかないっぽく、ドキュメントも少ないので、それを使うのは時期尚早っぽい。
UNet を乗り越え、マルチプレイヤーゲームはさらなる進化へ – Unity Blog
++自作サンプル
https://arumogina.hatenadiary.com/entry/2019/04/08/044159
++Photonという外部のネットワークサービスを利用する例もけっこうあるっぽい
https://qiita.com/iriya0624/items/898e78158ded1fa09c5e
というか、UNETの評判は悪いらしく、Photonを使う方がメジャーっぽい
http://izm-11.hatenablog.com/entry/2018/03/05/133956
++UNETの基本を把握できる
【Unity】インべーダ作りで学ぶUnet超入門3 - おもちゃラボ
UNETを使ってネットワーク間で処理を同期する - e.blog
++ホスト、クライアント、サーバーについて
UNETはネットワーク内のユーザーのどれかがサーバーの役割を担う。これをホストと呼び、ホスト上のアプリはサーバーとクライアント両方の性質を持つ。サーバーとクライアントのアプリが別々に動いてるわけではない(多分。なので、サーバー上でのデバッグはサーバーのデバッグとクラインとのデバッグ両方が出る。
++[client]等のシグネチャについて
https://docs.unity3d.com/ja/current/Manual/class-NetworkBehaviour.html
++Syncvar
UNET⑨ SyncVarで変数を同期する - MOTOYAMA BLOG
SyncVarを付けた変数はCommand等でサーバーで値を変更するとクライアント側にその変更が伝達する
++手動操作関連
UNET⑩ Spawnで敵キャラなどを生成 - MOTOYAMA BLOG
UNET⑭ NetworkManagerをカスタマイズして、プレイヤー生成処理などを独自のものにする - MOTOYAMA BLOG
override可能なコールバックメソッドはNetworkManagerのコードを読む
++NetworkTransformではなく、TargetRPCを使った自前の実装
http://motoyama.hateblo.jp/entry/unet-sync-position
++UNETのソース
Unity-Technologies / Networking — Bitbucket
++情報が多い
https://hiyotama.hatenablog.com/entry/2015/07/06/153000
++公式
https://docs.unity3d.com/jp/current/Manual/UNetClientServer.html
削除予定なせいか、2018.3以降はところどころリファレンスが抜けている。2018.2を見るのが良い
Networking.NetworkManager - Unity スクリプトリファレンス
Networking.NetworkBehaviour - Unity スクリプトリファレンス
++その他断片情報
デフォルト設定だと、NetworkTransformの同期は1秒間に9回だし、補間もしてくれないので、このようにカクカクとなります。対策としては次のいずれかが考えられます。
NetworkTransformのNetworkSendRateを上げる
NetworkTransformのTransformSyncModeをSyncCharacterControllerにする(補間してくれるようになります。CharacterControllerが必要です)
NetworkTransformを使わずに自力実装して補間などを頑張る
UNET⑩ Spawnで敵キャラなどを生成 - MOTOYAMA BLOG
Server、ServerCallback、Client、ClientCallback、この4つのAttributeを利用することでそれを実現します。
それぞれの意味は以下のようになります。Server ... サーバ側でのみ実行される処理。クライアント側では空実装になる。
Client ... サーバの逆、クライアント側のみで実行される処理になる。
ServerCallback ... Serverと似ていますが、UpdateメソッドのようにUnityのシステムから呼ばれるメソッドに対して記述します。
ClientCallback ... こちらもServerCallbackの逆ですね。
UNETを使ってネットワーク間で処理を同期する - e.blog
++Command,TargetRPCのメソッドはコール元のクライアントではなく、コールすると、Commandならサーバー、TargetRPCならターゲットに設定したクライアント上で実行される。
++NetworkManagerクラス、及びそれを継承したクラスがプロジェクト内に複数あると不具合を起こすっぽい
++NetworkIdentifyを付加されてるオブジェクトは実行時に勝手にアンアクティブになってしまう
=>(ちょっと違う)
ゲームが起動後、未接続の時点では、自動的に非アクティブになります。で、接続が完了すると自動的にアクティブになります。
http://motoyama.hateblo.jp/entry/unet-10
++NetworkConnection.IsConnectedは接続されていてもFalseを返す
++
OnServerAddPlayerは常にホストでコールされる。
これはClientScent.AddPlayerコール時にコールバックされる。
++
NetworkBehaviourとNetworkIdentity
両方ともSpawn可能なプレハブのルートであるゲームオブジェクトにアタッチする必要がある。
https://qiita.com/su10/items/516ddd4a08429be9c42b
++NetworkIndetityのServerOnlyを付けたオブジェクトはサーバーでしか機能しなくなる。例えば、NetworkServer.Spawnしてもクライアントで生成されなくなる