【Unity】UNETを使った通信のテスト


UNETの使い方に苦戦中。

サーバー↔クライアントとホスト↔プレイヤーが同じスクリプトで動くというのがいまいち理解しづらい。

解説もいくらか見つけたけど、同じようなFPSの作り方ばかりだったので基本的に公式マニュアルを参考にした。

Unity - マニュアル: NetworkBehaviour
Unity のマニュアルは、Unityの使い方を学ぶ手助けとなります。Unityを使って 2D や 3D ゲームを作成したり、ゲーム以外のアプリを作成したりして多くの経験を積みまし...

とりあえず分かったことのメモ。

 

テスト環境

まず新規プロジェクトからCreate EmptyでGameObjectを2つ作る。

1つ目は Network Manager(ネットワーク管理) と Network Manager HUD(テスト用UI) を追加したマネージャーオブジェクト。

2つ目は NetworkIdentity(ネットワークに必須) とテスト用スクリプトを追加したコントローラオブジェクト。

あと通信の確認用にInputFieldとボタンを配置した。

HUDのUI
テスト用スクリプト

あとはビルドしたものUnityの実行画面で動作確認する。

確認したこと

サーバー→クライアントはSyncVarで共有できる。

ClientRpcでもクライアントのメソッド呼び出しができた。

しかしクライアント → サーバーがうまくいってない。

というかローカルプレイヤー → ホストが動作しない。

この辺の関係はたぶんこんな感じだと理解してるけど自信はない。

コマンドを使えばクライアントからサーバーへリクエストを送ってサーバー上で実行するはずだけど、なぜかホストでないと実行されない。

 

そこで コントローラオブジェクトをプレハブ化してシーンから削除。

マネージャーの Player Prefab にプレハブをアタッチして、Auto Create Player をオンにするとローカルプレイヤーとして認識されコマンドが使えるようになった。

クライアントからサーバーではなく、ローカルプレイヤーからサーバーの流れになるみたいです。

所感

プレイヤーの概念がよくわからず苦労した。

プレイヤーが通信の核だったので、その部分をきちんと理解できないと辛い。

Network Messagesでも通信可能みたいだけど殊更情報が少なくてよくわからない。

とりあえず、ようやく第一歩を踏み出せました。

 


コメントを残す

メールアドレスが公開されることはありません。