Unityの公式チュートリアル「マルチプレイヤーネットワーキング」の実習の模様をお送りしております。前回の記事はこちらからどうぞ
公式サイトのチュートリアルページ 非プレイヤーオブジェクトをハンドルする
今回は敵キャラクターの作成を行います。
完成したオブジェクトEnemy Spawner の[Inspector]を見るとこのようになっています。
修正したスクリプトのコードにコメントを加えたものがこちら。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// ネットワークコンポーネント関数を使用するため名前空間の追加
using UnityEngine.Networking;
// NetworkBehaviour から派生するクラス
public class EnemySpawner : NetworkBehaviour
{
// 敵オブジェクトを格納する変数
public GameObject enemyPrefab;
// 敵オブジェクトの数を格納する変数
public int numberOfEnemies;
// サーバー開始時の処理(仮想関数)
public override void OnStartServer()
{
// 敵オブジェクトの発生処理
// 敵オブジェクト数が numberOfEnemies より少なければ繰り返す
for (int i = 0; i < numberOfEnemies; i++)
{
// 敵オブジェクトの発生位置
var spawnPosition = new Vector3(
// X座標:-8~8までのランダム値
Random.Range(-8.0f, 8.0f),
// Y座標:0
0.0f,
// Z座標:-8~8までのランダム値
Random.Range(-8.0f, 8.0f));
// 敵オブジェクトの発生角度
var spawnRotation = Quaternion.Euler(
// X角度:0
0.0f,
// Y角度:0~180までのランダム値
Random.Range(0, 180),
// Z角度:0
0.0f);
// 敵オブジェクトのインスタンス作成
var enemy = (GameObject)Instantiate(
// 引数 1:インスタンスオブジェクト
enemyPrefab,
// 引数 2:発生位置
spawnPosition,
// 引数 3:発生角度
spawnRotation);
// すべてのクライアントにオブジェクト enemy を生成
NetworkServer.Spawn(enemy);
}
}
}
完成したスクリプト EnemySpawner を[Inspector]ウィンドウで見るとこのようになっています。
オブジェクト Enemy の子オブジェクト Visor に Default-Material を割り当てるには、[Project]ウィンドウのプレハブPlayer を選択し、[Inspector]ウィンドウの Default-Material を[Scene]ビューのオブジェクト Visor に直接ドラッグ&ドロップするとOKです。
完成した敵オブジェクトを[Scene]ビューで見るとこのようになっています。
NetworkManager の[Inspector]ウィンドウで NetworkManager コンポーネントはこのようになっています。
Enemy Spawner の[Inspector]ウィンドウで見るとこのようになっています。
このステップを終えてゲームを実行。ビルドしたゲームを2つ実行してウィンドウを並べました。画面右側がホスト(サーバー&クライアント)で画面左がクライアントです。同じ位置に敵キャラクターが4体表示されています。
チュートリアルの解説にある通り、敵に弾を当てると体力ゲージは減少し、体力がゼロになると体力ゲージがリセットされ、敵キャラクターはそのままです。