top of page

Unityで「シューティングゲーム」をつくろう!Vol.16

Unityで作る「シューティングゲーム」。前回は「敵2」の弾と攻撃を作ってみました。弾には「Enemy」タグをつけているので、敵の攻撃に当たるとダメージを受けるはずですね。今回の課題は次の2つ。

1,「敵2」にもHPを持たせた上で倒せるようにする

2,「敵2」が画面外に出てしまわないように移動制限をかける

それでは早速作っていきましょう。

 

まずは「Enemy2Controller.cs」を立ち上げて以下のコードを追加します。

❶~❻は「敵1」の作り方とほぼ一緒、❶❷❹❺はVol.10 を❸❻はvol.12 で詳しく説明しています。そちらもご参考にしてみてください。

 

int hp; //❶ヒットポイント

[SerializeField] GameObject explosion; //❷爆発エフェクト

GameManager gameManager; //❸GameManagerを入れる変数


void OnTriggerEnter2D(Collider2D collision) //❹//侵入判定

{

if (collision.gameObject.tag == "Projectile" && IsMove)

{

Destroy(collision.gameObject); //弾の削除

hp--; //hp の減算

if (hp == 0) //hpが 0 になったら

{

Destroy(gameObject); //Enemyの削除

gameManager.AddScore(200); //スコアを200追加

GameObject effect = Instantiate(explosion, transform.position, transform.rotation); //爆発のエフェクトを生成

Destroy(effect, 1.5f); //爆発エフェクトの削除

}

}

}


void Start()

{

hp = 5; //❺hpに初期値5を代入

shot_speed = 300; //記述済み

enemyRb2d = GetComponent<Rigidbody2D>(); //記述済み

StartCoroutine(Move()); //記述済み

StartCoroutine(Shot()); //記述済み

//❻gameManagaer を探してきて変数に代入

gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();

}


void Update()

{

//❼移動制限

transform.position = new Vector3(Mathf.Clamp(transform.position.x, -18f, 18f), transform.position.y, 1);

}

 

では解説です。


❶敵2にもHPを持たせるために整数型の 変数:hp を宣言します。

❷敵2を倒したときに発生させる、爆発エフェクトを使うためのGameObject型の変数: explosion を宣言。

❸スコア加算させる関数を呼びだすために、GameManager にアクセスします。そのための変数:gameManager を宣言


❹ではプレイヤーの攻撃を受けたときの侵入判定と、その後の処理をプログラミングしています。ほとんど「敵1」と同じですね?倒したときは AddScore(200); と引数に「200」を代入して200点加算しています。


❺❶で宣言したhpの初期値は5にしています。「敵1」よりもちょっとだけ強くしています。


❻では❸で宣言した「gameManager」に「GameManager」を探してきて、そこに追加されている「GameManager」クラスを取得、代入しています。


今回初めて学習するのが❼です。

transform.position = new Vector3(Mathf.Clamp(transform.position.x, -18f, 18f), transform.position.y, 1);

ゲームオブジェクトが画面外に出ないようにするには、いろいろな方法があります。Playerについては、if 文を使って座標管理をしました。今回利用するのは「Mathf.Clamp()」という便利な関数です。

Mathf.Clamp( value , min , max); 

value には制限対象となるパラメーターを指定します。今回は敵2の「X座標」を指定したいので、「transform.position.x  を指定します。

min は最小値。「-18f」 を指定します。

max は最大値。「18f」 を指定します。

また、y座標には「敵2」がもともと持っている値を、z座標には1を指定しておきます。

これで「敵2」のx座標方向(横方向)の動きは、-18~18 に制限されます。


今回のプログラムはこれで完成。

最後はこのプログラムで宣言した「explosion」という変数に「Explosion」プレハブをセットしておきましょう。


 

今回はここまでです。


教室では実際に通って頂いての授業の他、ちょっとしたお困りごとに対するオンライン授業やオンラインサポートも行っております。

お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。


お問い合わせは こちら から。

体験授業のお申込みは こちら から。


過去の作品はこちらから。

Vol.01~Vol.10 は下のVol.11 文末のリンクからどうぞ

Comments


bottom of page