Unity 3D for Network game
@shinriyo
Android版もあります
自己紹介
!    杉田臣輔(すぎたしんすけ)
!    株式会社ワンオブゼムで勤務
!    エンジニアとしてUnity使ってます
Ninja Mkdir
https://bitbucket.org/shinriyo/ninja-mkdir/downloads

ZomBeat            つみんビ∼
Unity3Dとは?

!    ゲームエンジン
!    iOSやAndroid用のゲームに使用可能
!    モデリングツールではない
!    3Dのゲームが得意(2Dは苦手だけど出来ないことも
     ない)
!    ゲーム制作の民主化
使用できる言語
 !    C#・・・Javaっぽい言語(文字比較に=使える、親クラスのメソッ
      ドにvirtualを書くのが手間)

 !    Boo・・・Pythonっぽい言語(メソッドにself不要)
 !    UnityScript・・・JavaScriptっぽい言語(JavaScriptの殻を
      かぶったC#、むしろActionScript3.0っぽい)




http://www.amazon.co.jp/gp/product/1849690405?tag=noctushinrsdi-22
ネットワークゲームの種類
!    物理構造
 C/S型・・・サーバーとクライアントにそれぞれ特化
 P2P・・・ネットワーク上で対等な関係にある端末間を相互に直接接続し、デ
ータを送受信する通信方式。

論理的な構造
 MO(Mulltiplay Online)・・・2∼100人程度の同時プレイ
 MMO(Massively Mulltiplay Online)・・・数百、数千以上の同時プレイ
     2x2=4通りあるが、MMOかつP2Pは実際にはない
     ※Massively・・・ 【副詞】 どっしりと; 大規模に
準備
!    特にアセットストアでダウンロードする有料のアセ
     ット(Plug-in)は別途はいりません。
!    C#の基本的な文法
!    ProじゃなくてもOK
!    Unityの基礎知識
!    2.6以前のUnityはダメ
!    ※OnSerializeNetworkViewメソッドにバグがあるため
今回作るのは
!    おしくらまんじゅう式なP2P対戦ゲーム
 ※MMO的なことを期待していた方はすみません
 ※死亡処理などの
  作りこみは割愛します(Bitbacketに載せてます)
□Networking Example(MMO的なサンプル)
 http://unity3d.com/support/resources/example-
projects/networking-example
MonoBehavior


!    基本的にベースとなるクラス
!    継承するだけでUnityの基礎的なメソッドが使える
ネットワーク状態

!    Network.peerTypeで接続状態を判断NetworkPeerType
     の列挙型で比較する。
!    NetworkPeerType
!    Disconnected・・・切断中
!    Connecting・・・接続中(Connectedじゃない)
!    ※Server(サーバとして)、Client(クライアントとして)もある。
サーバの作成

!    サーバ側の処理
!    Network.InitializeServer(接続数, ポート番号);
!    ※引数は両方intです。
!    ※ 127.0.0.1(ループバックアドレス)
サーバへの接続

!    クライアント側の処理
!    Network.Connect(IPアドレス, ポート番号);
!    ※ポート番号の引数はintです。
!    ちなみに切断はNetwork.Disconnect(タイムアウトの
     ミリ秒)
サーバ側

!   OnServerInitialized()メソッド
 ・・・サーバ自体が作成された時に実行される

!   OnPlayerDisconnected()
 ・・・クライアントのプレーヤが切断した時に実行される
クライアント側

!   OnConnectedToServer()
 サーバに接続した時に実行される
!   OnDisconnectedFromServer()
 サーバから切断した時に実行される
プレイヤーの生成

!    Network.Instantiate() ※ staticメソッド
     今回は、Spawn(生成)をするメソッドを作り、そ
     の中に記載します。
     ※C#はUnityScriptのように暗黙のキャストが弱いの
     で注意
RPC(RemoteProcedureCall)



!    リモートのサーバで実行しているプログラムをクラ
     イアント側から呼び出せる。
Network View

!    RPCに必要。
!    transform情報(position, rotation, scale)を観測
     してくれる。
!    Component=>Miscellaneous=>NetworkView でプ
     レーヤにアタッチする
!    isMine変数でオブジェクトによって制御される、
     ネットワークビューかを判断できる

      ※豆知識・・Miscellaneous(mìsəәléɪniəәs)は分類が難しい時によく使われる。
        メソレイニアスのように発音。よく、 misc などと略される。
NetworkViewのメソッド

!   OnSerializeNetworkView()メソッド
 ネットワークビューで監視しているスクリプトの変
数の同期をとるために使用
 第1引数:BitStream・・・isReadingとisWritingが取れ
る。Serializeは参照を引数に取る
 第2引数:NetWorkMessageInfo・・・誰からかとか、
時間などの情報が取れる(今回使わない)
BitStream

•    isWriting・・ステータスの送信
       isWritingでなければ受信している


•    シリアライズはbool、char、short、int、float、
     Quotanion、Vector、NetworkPlayer、NetworkVieID型
     のみサポート。
プレイヤーの処理実装

!    方向キーの垂直、平面の移動
 Input.GetAxis(“Horizontal”)・・並行のキー取得
 Input.GetAxis(”Virtucal“) ・・垂直のキー取得
 Time.deltaTime・・前のフレームが呼び出されたとき
の、経過時間を示す(Readonly)
まとめ

•    アセットを買わずにUnityの基本のメソッドだけで
     P2Pゲームはできる
•    MMO的なものを作成するにはMasterServerを使いま
     す
•    Bitbacketにアップしています
 https://bitbucket.org/shinriyo/p2pnetgame/downloads

Unitynetwork

  • 1.
    Unity 3D forNetwork game @shinriyo
  • 2.
    Android版もあります 自己紹介 !  杉田臣輔(すぎたしんすけ) !  株式会社ワンオブゼムで勤務 !  エンジニアとしてUnity使ってます Ninja Mkdir https://bitbucket.org/shinriyo/ninja-mkdir/downloads ZomBeat つみんビ∼
  • 3.
    Unity3Dとは? !  ゲームエンジン ! iOSやAndroid用のゲームに使用可能 !  モデリングツールではない !  3Dのゲームが得意(2Dは苦手だけど出来ないことも ない) !  ゲーム制作の民主化
  • 4.
    使用できる言語 !  C#・・・Javaっぽい言語(文字比較に=使える、親クラスのメソッ ドにvirtualを書くのが手間) !  Boo・・・Pythonっぽい言語(メソッドにself不要) ! UnityScript・・・JavaScriptっぽい言語(JavaScriptの殻を かぶったC#、むしろActionScript3.0っぽい) http://www.amazon.co.jp/gp/product/1849690405?tag=noctushinrsdi-22
  • 5.
    ネットワークゲームの種類 !  物理構造  C/S型・・・サーバーとクライアントにそれぞれ特化  P2P・・・ネットワーク上で対等な関係にある端末間を相互に直接接続し、デ ータを送受信する通信方式。 論理的な構造  MO(Mulltiplay Online)・・・2∼100人程度の同時プレイ  MMO(Massively Mulltiplay Online)・・・数百、数千以上の同時プレイ 2x2=4通りあるが、MMOかつP2Pは実際にはない ※Massively・・・ 【副詞】 どっしりと; 大規模に
  • 6.
    準備 !  特にアセットストアでダウンロードする有料のアセ ット(Plug-in)は別途はいりません。 !  C#の基本的な文法 !  ProじゃなくてもOK !  Unityの基礎知識 !  2.6以前のUnityはダメ !  ※OnSerializeNetworkViewメソッドにバグがあるため
  • 7.
    今回作るのは !  おしくらまんじゅう式なP2P対戦ゲーム  ※MMO的なことを期待していた方はすみません  ※死亡処理などの   作りこみは割愛します(Bitbacketに載せてます) □Networking Example(MMO的なサンプル)  http://unity3d.com/support/resources/example- projects/networking-example
  • 8.
    MonoBehavior !  基本的にベースとなるクラス !  継承するだけでUnityの基礎的なメソッドが使える
  • 9.
    ネットワーク状態 ! Network.peerTypeで接続状態を判断NetworkPeerType の列挙型で比較する。 ! NetworkPeerType !  Disconnected・・・切断中 !  Connecting・・・接続中(Connectedじゃない) !  ※Server(サーバとして)、Client(クライアントとして)もある。
  • 10.
    サーバの作成 !  サーバ側の処理 ! Network.InitializeServer(接続数, ポート番号); !  ※引数は両方intです。 !  ※ 127.0.0.1(ループバックアドレス)
  • 11.
    サーバへの接続 !  クライアント側の処理 ! Network.Connect(IPアドレス, ポート番号); !  ※ポート番号の引数はintです。 !  ちなみに切断はNetwork.Disconnect(タイムアウトの ミリ秒)
  • 12.
    サーバ側 ! OnServerInitialized()メソッド  ・・・サーバ自体が作成された時に実行される ! OnPlayerDisconnected()  ・・・クライアントのプレーヤが切断した時に実行される
  • 13.
    クライアント側 ! OnConnectedToServer()  サーバに接続した時に実行される ! OnDisconnectedFromServer()  サーバから切断した時に実行される
  • 14.
    プレイヤーの生成 !  Network.Instantiate() ※ staticメソッド 今回は、Spawn(生成)をするメソッドを作り、そ の中に記載します。 ※C#はUnityScriptのように暗黙のキャストが弱いの で注意
  • 15.
    RPC(RemoteProcedureCall) !  リモートのサーバで実行しているプログラムをクラ イアント側から呼び出せる。
  • 16.
    Network View !  RPCに必要。 !  transform情報(position, rotation, scale)を観測 してくれる。 !  Component=>Miscellaneous=>NetworkView でプ レーヤにアタッチする ! isMine変数でオブジェクトによって制御される、 ネットワークビューかを判断できる ※豆知識・・Miscellaneous(mìsəәléɪniəәs)は分類が難しい時によく使われる。 メソレイニアスのように発音。よく、 misc などと略される。
  • 17.
    NetworkViewのメソッド ! OnSerializeNetworkView()メソッド  ネットワークビューで監視しているスクリプトの変 数の同期をとるために使用  第1引数:BitStream・・・isReadingとisWritingが取れ る。Serializeは参照を引数に取る  第2引数:NetWorkMessageInfo・・・誰からかとか、 時間などの情報が取れる(今回使わない)
  • 18.
    BitStream •  isWriting・・ステータスの送信        isWritingでなければ受信している •  シリアライズはbool、char、short、int、float、 Quotanion、Vector、NetworkPlayer、NetworkVieID型 のみサポート。
  • 19.
    プレイヤーの処理実装 !  方向キーの垂直、平面の移動  Input.GetAxis(“Horizontal”)・・並行のキー取得  Input.GetAxis(”Virtucal“) ・・垂直のキー取得  Time.deltaTime・・前のフレームが呼び出されたとき の、経過時間を示す(Readonly)
  • 20.
    まとめ •  アセットを買わずにUnityの基本のメソッドだけで P2Pゲームはできる •  MMO的なものを作成するにはMasterServerを使いま す •  Bitbacketにアップしています  https://bitbucket.org/shinriyo/p2pnetgame/downloads