UNET⑧ NetworkStartPositionでスポーン地点を指定

UNETのデフォルトでは、プレイヤーキャラクターオブジェクトは原点(0, 0, 0)に生成されます。このままでは、ゲーム開始時は全員が重なった状態となってしまいます。これではおかしいですよね。
今回は、NetworkStartPositionを使って、スポーン地点を指定してみましょう。

※「スポーン」とは、ゲーム開始時にキャラクターが生成されることを指すゲーム用語で、開始位置のことを「スポーン地点」と呼びます。死んだ後、別の場所に復活して再出撃することは「リスポーン」と呼んだりします。

準備作業

  1. キャラクターの3Dモデルをダウンロードしておく
  2. 新規で3Dのプロジェクトを作成する
  3. ダウンロードしておいた3Dモデルをインポートする
  4. インポートした3Dモデル(pacchi.fbx)をSceneへ設置する
  5. Sceneへ設置したpacchiのオブジェクト名を「Player」とする
  6. PlayerオブジェクトにNetworkIdentityコンポーネントをアタッチする
  7. Playerオブジェクトをプレハブ化し、Sceneからは削除する
  8. 空のオブジェクトを作成する。名前は「NetworkManager」としておく
  9. NetworkManagerオブジェクトにNetworkManagerコンポーネントとNetworkManagerHUDコンポーネントをアタッチする
  10. NetworkManagerのSpawn Info>Player Prefab欄にPlayerプレハブを登録する

ここまでは、NetworkStartPositionとは無関係な、UNETでネットワークゲームを作る際の典型的な作業になります。

NetworkStartPositionを使ってスポーン地点を指定

空のオブジェクトを生成します。オブジェクト名は「StartPosition」とかにしておきましょう。

作ったStartPositionオブジェクトにNetworkStartPositionコンポーネントをアタッチします。

NetworkStartPositionは、設定項目などが一切無い、極めてシンプルなコンポーネントです。

で、あとはこのStartPositionオブジェクトを、好きなだけ複製して、スポーン地点としたい場所に設置するだけです。
なお、このままだとSceneビューで見えなくて不便なので、アイコンを設定しておくと見やすくて良いかと思います。

f:id:motoyamablog:20171028225027g:plain

StartPositionオブジェクトを適当に複製して好きな場所に設置したら、ゲームを複数起動して動作確認してみましょう。

f:id:motoyamablog:20171028225048p:plain

 

f:id:motoyamablog:20171028225054g:plain

スポーン地点の決定方法

たくさんあるスポーン地点のどこにプレイヤーが生成されるのか、その決定方法を2種類から選べます。

NetworkManagerのSpawn Info>Player Spawn Method で選びます。

f:id:motoyamablog:20171028225113p:plain

Random

NetworkStartPositionが付いたオブジェクトの中からランダムに選ばれます。複数のプレイヤーが連続して同じ場所からスポーンすることもあります(その場合は重なります)。

Round Robin

順番にスポーンしていき、最後まで行ったら最初に戻ります。なお、順番は指定できません。

向きも指定できる

実はNetworkStartPositionで指定できるのは位置だけではありません。Rotationも反映されます。StartPositionオブジェクトを回転させておけば、このようになります。

f:id:motoyamablog:20171028225120g:plain

まあ・・・Y軸回転以外は、まず使わないと思いますが・・・💧

 

 

痒いところに手が届かない

NetworkStartPositionの使い方は以上です。
実のところ、誠に残念ながら、痒いところに手が届かない、あんまり使えない機能です・・・(今更言うな)

ネットワークゲームといえば、チーム対戦とかしたいと思いますが、NetworkStartPositionだと実現できないんですよね。チーム別にスポーン地点を登録できないので。

NetworkStartPositionが使えるのって「自分以外みんな敵」というバトルロイヤルなゲームだけじゃないですかね?

NetworkManagerを改造すれば、プレイヤーを好きな場所にスポーンさせることができるので、結局、大抵の場合はそうすることになります。NetworkStartPositionはそれまでのつなぎというか、簡易的な動作確認用というか、そんな位置付けです(少なくとも私の中では)。

 

次へ進む

目次へ