UNITYで通信してみよう!
~5分では出来なかったNETWORKVIEW入門~
自己紹介
名前        コッペパン

所属        HAL大阪ゲーム制作学科3年
          ※絶賛就職活動中


Twitter   @pepa_696

使用言語 C/C++,C#

Unity歴    約3か月
UNITY同士で通信 その1
NetworkViewってなんぞや?
UNITY同士で通信 その1
NetworkViewってなんぞや?

 Unityのネットワーキングの技術で、
 Script、アニメーション、Transform、RigidBody
 のいずれか一つを同期する仕組み。
UNITY同士で通信 その1
NetworkViewってなんぞや?

 Unityのネットワーキングの技術で、
 Script、アニメーション、Transform、RigidBody
 のいずれか一つを同期する仕組み。

 リモートプロシージャコール(RPC)でネットワーク上
 にあるオブジェクトのメソッドを呼び出すこともでき
 る。
UNITY同士で通信 その1
NetworkViewってなんぞや?

 Unityのネットワーキングの技術で、
 Script、アニメーション、Transform、RigidBody
 のいずれか一つを同期する仕組み。

 リモートプロシージャコール(RPC)でネットワーク上
 にあるオブジェクトのメソッドを呼び出すこともでき
 る。

 1つのObjectにいくつでもNetworkViewを積むことも可
 能。
 ※ ネットワークの負荷とかは知らないよ
UNITY同士で通信 その2
NetworkViewの使い方
UNITY同士で通信 その2
NetworkViewの使い方


   通信したいObjectに
   NetworkViewを追加する。
   (Component->miscellaneous->Network View)
UNITY同士で通信 その2
NetworkViewの使い方


   通信したいObjectに
   NetworkViewを追加する。
   (Component->miscellaneous->Network View)




                          以上
UNITY同士で通信 その2
実際に使って見る(準備編)
UNITY同士で通信 その2
実際に使って見る(準備編)
 Serverを立てる(host)
• Network.InitializeServer(int, int, boolean);
    • 第1引数 : 接続可能人数
    • 第2引数 : 接続を受け入れるポート番号
    • 第3引数 : NATのパンチスルー機能を設定
             (正直よく分かってないのでfalseで問題なし)
UNITY同士で通信 その2
実際に使って見る(準備編)
 Serverを立てる(host)
• Network.InitializeServer(int, int, boolean);
    • 第1引数 : 接続可能人数
    • 第2引数 : 接続を受け入れるポート番号
    • 第3引数 : NATのパンチスルー機能を設定
             (正直よく分かってないのでfalseで問題なし)

Serverに接続する(client)
• Network.Connect(string, int );
    • 第1引数 : hostのIPアドレス
    • 第2引数 : hostが接続を受け入れているポート番号
UNITY同士で通信 その3
Objectを生成する
UNITY同士で通信 その3
Objectを生成する

 Network.Instantiate(
      prefab,           // オブジェクト
      Vector3,          // 初期位置
      Quaternion,       // 初期角度
      int               // グループNo
 );
 ネットワーク内の全てのPCでインスタンス化さ
れる。
UNITY同士で通信 その4
生成する場所
UNITY同士で通信 その4
生成する場所
 Server側
• void OnServerInitialized()
                {}
    サーバー立ち上げ時に呼ばれるメソッド
UNITY同士で通信 その4
生成する場所
 Server側
• void OnServerInitialized()
                {}
    サーバー立ち上げ時に呼ばれるメソッド

Client側
• void OnConnectedToServer() {}
    サーバーに誰かが接続してきた時に呼ばれるメソッ
ド

    この辺でNetwork.Instantiateを実行すると良い。
UNITY同士で通信 その5
切断時の処理
UNITY同士で通信 その5
切断時の処理
 Server側
• void OnPlayerDisconnected(NetworkPlayer p)
   {
       Network.DestroyPlayerObjects(p);
   }

  クライアントが切断されたときに呼ばれるメソッド。
  そのクライアントだけをゲーム内から消す。
UNITY同士で通信 その5
切断時の処理
Client側
• void OnDisconnectedFromServer()
   {
       Application.Quit();
   }

  サーバーに誰かが接続してきた時に呼ばれるメソッド。
  簡単なゲームならサーバーが落ちたらクライアントも
  落としてしまって良いと思います。
UNITY同士で通信 その6
カクカクする原因は
UNITY同士で通信 その6
カクカクする原因は
  NetworkViewには1秒間に
  何回通信するかの設定があるからです。
UNITY同士で通信 その6
カクカクする原因は
  NetworkViewには1秒間に
  何回通信するかの設定があるからです。


  Network.sendRate

 デフォルトだと15回に設定されていま
す。
UNITY同士で通信 その6
カクカクする原因は
 対策案
UNITY同士で通信 その6
カクカクする原因は
 対策案
 1. 位置を中間補正する。
UNITY同士で通信 その6
カクカクする原因は
 対策案
 1. 位置を中間補正する。
 2. 全力で通信する。
UNITY同士で通信 その6
カクカクする原因は
 対策案
 1. 位置を中間補正する。
 2. 全力で通信する。

  Network.SendRate = 60;
 とかやると秒間で60回通信します。
 ※ネットワークの負荷とかは知らないよ。
UNITY同士で通信 その7
キャラクターのスクリプトの注意点
UNITY同士で通信 その7
キャラクターのスクリプトの注意点
 networkView.isMine
 これはスクリプトを実行するオブジェクトが自分かど
うか
 を判断するプロパティ。
UNITY同士で通信 その7
キャラクターのスクリプトの注意点
 networkView.isMine
 これはスクリプトを実行するオブジェクトが自分かど
うか
 を判断するプロパティ。
   if(networkView.isMine == true)
   {
         // キャラクター操作
   }
 と、しておかなければ自分以外まで動いてしまいま
ご静聴
ありがとうございました

Unityで通信してみよう!