今回はUnityNetworkにプレイヤーキャラクターを登場させるところまでをやりたいと思います。
前回はオフラインで移動と攻撃アニメーションをするキャラクターを作成しました。
NetworkManagerを作成する
ネットワーク接続を管理するNetworkManagerゲームオブジェクトを作成します。
ヒエラルキー上で右クリック→Create Emptyで空のゲームオブジェクトを作成し、名前をNetworkManagerとします。
インスペクタのAdd ComponentからNetwork→NetworkManagerとNetwork→NetworkManagerHUDを取り付けます。
↑のようになります。
NetworkManagerコンポーネントはネットワークの状態を管理するコンポーネントで、NetworkManagerHUDはオンライン接続のテスト用のコンポーネントで、オンライン接続処理と簡単なUIを担当します。
NetworkManagerコンポーネントのSpawn InfoのPlayer Prefabにプレイヤーキャラクターのプレハブを設定しますが、まだプレイヤープレハブのオンライン対応をしていない為、対応が出来たら設定します。
プレイヤープレハブのオンライン対応
プレイヤーキャラクターをオンラインに登場させる為にキャラクターのインスペクタからAdd Component→Network→NetworkIdentityコンポーネントを設定し、
Local Player Authorityにチェックを入れます。
NetworkIdentityはネットワーク上でこのゲームオブジェクトの身元を判別する為に使用されます。
Local Player Authorityにチェックを入れる事でクライアント側でこのキャラクターを制御出来るようになります。
プレイヤーキャラクターをAssetsフォルダ内にドラッグ&ドロップしプレハブにします。
プレハブにしたら、ヒエラルキー上のUnityNetworkPlayerゲームオブジェクトは削除しておきます。
次にNetworkManagerに先ほどプレハブにしたプレイヤーキャラクターをドラッグ&ドロップし、オンラインに接続したらそのキャラクターを登場させるようにします。
ここまで出来たらシーンをビルドしておきます。
NetworkManagerHUDについて
NetworkManagerHUDコンポーネントを取り付けていると、Unity実行時にネットワーク処理と簡単なUIが表示されます。
UnityNetworkではサーバーにクライアントが接続してゲームが進行しますが、ホストはサーバーとクライアントを兼任します。
その為、自分のパソコンでオンラインの確認をする時はLAN HOSTボタンを押してサーバー兼クライアントとしてホスト接続した後、別のスタンドアロンを実行しLAN Clientボタンを押してクライアント接続をします。
他のボタンはとりあえず無視していきましょう・・・・(ーー;)
ビルドして確認
シーンをビルドしてスタンドアロン形式で出力し、2つのアプリケーションを実行します。
ひとつはLAN HOSTボタンを押してホストとして起動し、もうひとつはLAN Clientボタンを押してクライアントとして接続します。
↑のようになりました。
オンラインに接続するとそのクライアントのプレイヤーキャラクターが登場してますね。
しかし、自身のアプリケーション上の別のプレイヤーキャラクターも一緒に動いたり攻撃したりしてしまいます。
これは自身のアプリケーション上に登場したプレイヤーキャラクターにもCharacterControllerやUCharaスクリプトが取り付けられているので、キーボードで動かそうとすると他のプレイヤーキャラクターのスクリプトも有効な為、一緒に動いてしまいます。
次回は自身のキャラクターのみ動かせるように処理を改造していきたいと思います。