こんにちは。【2Dシューティング】Unity公式チュートリアルをやってみるシリーズの6回目です。前回は背景の作成とスクロールの実装でした。
【2Dシューティング】Unity公式チュートリアルをやってみる5回目。背景をつくる。
今回は敵の軍隊をつくっていくのですが、コードが結構難しそうです。(コピペで問題なしではある)
敵の軍隊を作ろう
ここでやること
- 空のゲームオブジェクトをWaveという名前で作成
- Waveの子要素に敵を波型に3体配置する。これをPrefabにしオブジェクトは消す
- Waveを呼び出すEmitterScriptを実装する
- 空のゲームオブジェクトEmitterを作成してWavePrefabとEmitterScriptをアタッチ
空のゲームオブジェクトを作って敵を波型に配置しよう
空のゲームオーブジェクトの名前をWaveにして子要素に敵を3体作成し、波型に配置する。ちっちゃくてみにくいかもしれないが座標は画像のとおりだ。
こちらを作成したらPrefab化してhierarkhy上のオブジェクトは消す。
WavePrefabをスクリプトから作成しよう
新たにWaveを呼び出すスクリプトを生成する。名前はEmitterScriiptにした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EmitterScript : MonoBehaviour {
//WavePrefabを格納する変数
public GameObject[] waves;
//現在のWave
private int currentWave;
//コルーチン
IEnumerator Start(){
//Waveが存在しなければコルーチンを終了する
if(waves.Length == 0) yield break;
while(true){
//Waveを作成する
GameObject wave = (GameObject)Instantiate(waves[currentWave],
transform.position, Quaternion.identity);
//WaveをEmitterの子要素にする
wave.transform.parent = transform;
//Waveの子要素のEnemyが全て削除されるまで待機する
while(wave.transform.childCount != 0) yield return new WaitForEndOfFrame();
//格納されているWaveを全て実行したらcurrentWaveを0にする(最初からループ)
if(waves.Length <= ++currentWave) currentWave = 0;
}
}
}
コードのほうは分からんです。しいて書くならWaitForEndOfFrame()はwhileの条件がfalseになるまで待機させる。間違ってるかもしれないけどたぶんあってる。
空のゲームオブジェクトを作ってスクリプトとPrefabをアタッチしよう
空のゲームオブジェクトEmitterを作成してEmitterScirptとWavePrefabをアタッチする。
sizeは1にしておかないとWavePrefabがアタッチできない。
ここまでの状態
敵を倒すと敵がでてくる。コードがわからないのでなぜそうなるのかわからない。でもチュートリアルなのにコードの解説が一切ないので学びが一切ない。なんなんだこのクソさ加減は。気にしても仕方がないので先にすすむ。
いろいろな敵フォーメーションを作ってみよう
こちらの件ほんとはUnity公式チュートリアルの最後のWaveを複製する作業になります。Waveを複製したら敵が無限にでるので、今回は敵の陣形(フォーメーション)に焦点をあてています。
フォーメーションといっても敵をコピーして座標を変えるだけだが、ここで強いてなにか書くとすればCtrl-dを使った複製テクニックだ。これがあれば、楽に複製できるだろう。敵フォーメーションの作成はチュートリアルを最後まですすめていればできるようになっているだろう。
敵フォーメーションはべつに作らなくてもよいが、もし作るならフォーメーションの名前づけに困るかもしれないので以下を参考にしてほしい。
シューティングゲームでフォーメーションの名前づけに困ったら見てほしい【画像あり】

コメント