Unityで通信してみよう!

27,252 views

Published on

2/2に大阪で行われたUnity勉強会のLT枠でプレゼンしたNetworkViewのプレゼン資料です。
実際に動くものがこちら「https://github.com/koppepan/NetworkView」

0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
27,252
On SlideShare
0
From Embeds
0
Number of Embeds
4,286
Actions
Shares
0
Downloads
77
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

Unityで通信してみよう!

  1. 1. UNITYで通信してみよう!~5分では出来なかったNETWORKVIEW入門~
  2. 2. 自己紹介名前 コッペパン所属 HAL大阪ゲーム制作学科3年 ※絶賛就職活動中Twitter @pepa_696使用言語 C/C++,C#Unity歴 約3か月
  3. 3. UNITY同士で通信 その1NetworkViewってなんぞや?
  4. 4. UNITY同士で通信 その1NetworkViewってなんぞや? Unityのネットワーキングの技術で、 Script、アニメーション、Transform、RigidBody のいずれか一つを同期する仕組み。
  5. 5. UNITY同士で通信 その1NetworkViewってなんぞや? Unityのネットワーキングの技術で、 Script、アニメーション、Transform、RigidBody のいずれか一つを同期する仕組み。 リモートプロシージャコール(RPC)でネットワーク上 にあるオブジェクトのメソッドを呼び出すこともでき る。
  6. 6. UNITY同士で通信 その1NetworkViewってなんぞや? Unityのネットワーキングの技術で、 Script、アニメーション、Transform、RigidBody のいずれか一つを同期する仕組み。 リモートプロシージャコール(RPC)でネットワーク上 にあるオブジェクトのメソッドを呼び出すこともでき る。 1つのObjectにいくつでもNetworkViewを積むことも可 能。 ※ ネットワークの負荷とかは知らないよ
  7. 7. UNITY同士で通信 その2NetworkViewの使い方
  8. 8. UNITY同士で通信 その2NetworkViewの使い方 通信したいObjectに NetworkViewを追加する。 (Component->miscellaneous->Network View)
  9. 9. UNITY同士で通信 その2NetworkViewの使い方 通信したいObjectに NetworkViewを追加する。 (Component->miscellaneous->Network View) 以上
  10. 10. UNITY同士で通信 その2実際に使って見る(準備編)
  11. 11. UNITY同士で通信 その2実際に使って見る(準備編) Serverを立てる(host)• Network.InitializeServer(int, int, boolean); • 第1引数 : 接続可能人数 • 第2引数 : 接続を受け入れるポート番号 • 第3引数 : NATのパンチスルー機能を設定 (正直よく分かってないのでfalseで問題なし)
  12. 12. 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が接続を受け入れているポート番号
  13. 13. UNITY同士で通信 その3Objectを生成する
  14. 14. UNITY同士で通信 その3Objectを生成する Network.Instantiate( prefab, // オブジェクト Vector3, // 初期位置 Quaternion, // 初期角度 int // グループNo ); ネットワーク内の全てのPCでインスタンス化される。
  15. 15. UNITY同士で通信 その4生成する場所
  16. 16. UNITY同士で通信 その4生成する場所 Server側• void OnServerInitialized() {} サーバー立ち上げ時に呼ばれるメソッド
  17. 17. UNITY同士で通信 その4生成する場所 Server側• void OnServerInitialized() {} サーバー立ち上げ時に呼ばれるメソッドClient側• void OnConnectedToServer() {} サーバーに誰かが接続してきた時に呼ばれるメソッド この辺でNetwork.Instantiateを実行すると良い。
  18. 18. UNITY同士で通信 その5切断時の処理
  19. 19. UNITY同士で通信 その5切断時の処理 Server側• void OnPlayerDisconnected(NetworkPlayer p) { Network.DestroyPlayerObjects(p); } クライアントが切断されたときに呼ばれるメソッド。 そのクライアントだけをゲーム内から消す。
  20. 20. UNITY同士で通信 その5切断時の処理Client側• void OnDisconnectedFromServer() { Application.Quit(); } サーバーに誰かが接続してきた時に呼ばれるメソッド。 簡単なゲームならサーバーが落ちたらクライアントも 落としてしまって良いと思います。
  21. 21. UNITY同士で通信 その6カクカクする原因は
  22. 22. UNITY同士で通信 その6カクカクする原因は NetworkViewには1秒間に 何回通信するかの設定があるからです。
  23. 23. UNITY同士で通信 その6カクカクする原因は NetworkViewには1秒間に 何回通信するかの設定があるからです。 Network.sendRate デフォルトだと15回に設定されています。
  24. 24. UNITY同士で通信 その6カクカクする原因は 対策案
  25. 25. UNITY同士で通信 その6カクカクする原因は 対策案 1. 位置を中間補正する。
  26. 26. UNITY同士で通信 その6カクカクする原因は 対策案 1. 位置を中間補正する。 2. 全力で通信する。
  27. 27. UNITY同士で通信 その6カクカクする原因は 対策案 1. 位置を中間補正する。 2. 全力で通信する。 Network.SendRate = 60; とかやると秒間で60回通信します。 ※ネットワークの負荷とかは知らないよ。
  28. 28. UNITY同士で通信 その7キャラクターのスクリプトの注意点
  29. 29. UNITY同士で通信 その7キャラクターのスクリプトの注意点 networkView.isMine これはスクリプトを実行するオブジェクトが自分かどうか を判断するプロパティ。
  30. 30. UNITY同士で通信 その7キャラクターのスクリプトの注意点 networkView.isMine これはスクリプトを実行するオブジェクトが自分かどうか を判断するプロパティ。 if(networkView.isMine == true) { // キャラクター操作 } と、しておかなければ自分以外まで動いてしまいま
  31. 31. ご静聴ありがとうございました

×