プレイヤーを作成して、複数のプレイヤーが画面に登場するようにしてみましょう。
プレイヤーを作成する
- Unityに切り替えます。
- [Hierarchy]ビューから[Create]>[3D Object]>[Sphere]を選択して球を生成します。
- 作成した[Sphere]の名前を「Player」に変更します。
- 当たり判定のためにリジッドボディを組み込みます。
- [Hierarchy]ビューから[Player]を選択します。
- [Inspector]ビューの[Add Component]を押して、[Physics]>[Rigidbody]を選択します。
- [Use Gravity]のチェックを外します。
- 操作用のスクリプトを作ります。
using UnityEngine; using System.Collections; public class CPlayer : MonoBehaviour { private Rigidbody myRigidbody; public float fSpeed = 10f; // Use this for initialization void Start () { myRigidbody = GetComponent<Rigidbody>(); } // Update is called once per frame void Update () { Vector3 move = new Vector3( Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); myRigidbody.velocity = fSpeed * move.normalized; } }
- 上書き保存をしたら、Unityに切り替えて実行してください。カーソルキーで球が操作できます。
まだネットワークに対応させていないので、サーバーとクライアントで動かしてもキーに反応して移動するだけです。ネットワーク上で出現するようにしましょう。
キャラクターをネットワークに登場させる
マルチプレイヤーゲームでは、新しいプレイヤーが参加したら、全てのプレイヤーの画面に新しいプレイヤーを登場させなくてはなりません。これをやるには通常のInstantiate()ではなく、ネットワークに対応したNetwork.Instantiate()を利用します。
それではネットワーク上にプレイヤーを登場させてみましょう。
- プレイヤーをスクリプトで生成できるようにプレハブ化します。
- [Hierarchy]ビューの[Player]オブジェクトをドラッグして、[Project]ビューにドロップしてプレハブ化します。
- プレハブができたら、[Hierarchy]ビューに残っている[Player]オブジェクトは不要なので削除します。
- [NetConnector]スクリプトにネットワーク上にプレイヤーを生成するスクリプトを追加します。
- [Project]ビューの[NetConnector]スクリプトをダブルクリックしてエディターで開きます。
- 変数isConnectedの定義の下に、以下を追加します。
// プレイヤーのプレハブ public GameObject prefPlayer = null;
-
- procConnect関数にネットワーク上にキャラクターを生成するコードを追加します。Network.Connect()を呼び出した直後だと、まだサーバーに接続ができていないことがあり、キャラクターの生成が失敗することがあります。接続が完了すると、ゲームサーバーであればNetwork.isServerが、クライアントであればNetwork.isClientがtrueになるので、コルーチンでこれらのいずれかがtrueになるまで待機してからキャラクターを登場させることにします。
private void procConnect() { isConnected = true; // プレイヤーを出現させる StartCoroutine("instantiatePlayer"); } private IEnumerator instantiatePlayer() { // 接続が完了するまで待つ while (!Network.isServer && !Network.isClient) { yield return null; } // 接続したので出場 Vector3 pos = new Vector3(Random.Range(-5f, 5f), Random.Range(-2.5f, 2.5f)); Network.Instantiate(prefPlayer, pos, Quaternion.identity, 0); }
- 上書き保存をして、Unityに切り替えます。
- [Hierarchy]ビューの[SimpleNet]オブジェクトを選択したら、[Project]ビューの[Player]プレハブをドラッグして、[Inspector]ビューの[Pref Player]欄にドロップします。
以上ができたら、サーバーとクライアントでログインしたときにキャラクターが登場するかを試してみましょう。
- [File]メニューから[Build & Run]を選択します。
- ビルドが終わってプログラムが起動したら、[Windowed]にチェックを入れて[Play!]を押します。
- [ゲームサーバーになる]を押します。プレイヤーが表示されるはずです。
- 次にUnityを実行します。
- [上のゲームサーバーに接続]ボタンを押します。
クライアントがゲームサーバーに接続すると、両方の画面にプレイヤーが登場するはずです。これでネットワーク上にキャラクターを登場させることができました。これらのキャラクターは通信するための機能を持ち、お互いにデータをやりとりすることができます。
ただし、まだゲームオブジェクトを登場させただけで、操作をしてみると両方のプレイヤーが同時に動いてしまい、それぞれのプレイヤーがそれぞれのキャラクターを操作できるようにはなっていません。次は、自分のキャラクターを操作できるようにして、それが他のプレイヤーと共有される仕組みを作りましょう。