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

Unityで作る「シューティングゲーム」。前回はスコアを表示するUIを作成しました。これでスコアが加算されて表示される仕組みができましたね。この流れで今回はプレイヤーの「ヒットポイント」を表示させる仕組みを作ってみます。

 

1,UIテキストの準備

前回同様、まずはHPを表示させる素材を準備します。スコアテキストと同じように1から作ってもいいのですが、せっかく前回作った素材があるので、それを複製してしまいましょう。


①前回作成した「Score_Text」を右クリック、「Duplicate」を選択して複製します。

「Score_Text」はCanvas の中にありますよ。


②同じ場所に「HP_Text(2)」という複製が生成されます。ファイル名を「HP_Text」と名前を変更しておきます。

③ほとんど変更なしですが、PosX の値を「-300」に変更します。

④同様にText を「HP:99」と変更します。この値はスタート直後にプログラミングによって変更します。現段階では大きさを確認するためだけに使用します。

現段階では下のように表示されます。


 

2,UIをコントロールするプログラムの作成

ここからは「HP」、及び「HPテキスト」を管理するプログラムを作っていきます。

[PlayerController.cs] をひらいて、以下のコードを追加、改造します。


①まずは 上で作成した HPを表すUIテキストを操作するための「変数:HPText」を作ります。Playerの Inspector からセットしたいので[SerializeField] を指定します。


②Start関数では宣言した 変数:HPText に文字列を渡しています。

変数:hp はint型の数字なので、ToString()関数で文字列に変換しています。

頭に"HP:"という言葉をつけて「+」で結合して、それを「変数:HPText」に代入しているというわけですね。


今まで、敵の攻撃を受けたとき、隕石に衝突したとき、それぞれにHPを減算させるコードを記述していましたが、一つの関数にしてしまいましょう。

③ではその関数を作成しています。

SubHP(int h) として、ダメージを整数型の引数:h として受けとっています。

hp -= h; で、今のHPから受け取った引数:h分だけ引き算しています。

HPText.text = "HP:" + hp.ToString(); はスタート関数で指定したものと同じですね。

if (hp <= 0) Destroy();  HPが0になったとき Destroy 関数を発動する役目もここで引き受けます。


後は関数を使うだけです。

すでに記述済みのイベント関数、OnTriggerEnter2D、OnCollisionEnter2D、それぞれの中身を修正していきましょう。


OnTriggerEnter2D では敵の攻撃、もしくはデブリに当たった時のダメージを指定しています。③で作成した関数の引数に1を渡して、HPを1減らします。

記述済みの HPを減らすコード、HPが0になった時にDestroy関数を発動するコードは削除します。


OnCollisionEnter2D ではいん石に衝突したときのダメージでしたね。SubHP(int h) に 2 を渡してHPを2ずつ減算しています。④と同じように、重複してしまう2つのコードは削除しましょう。

 

[SerializeField] Text HPText; //①HPテキスト


void Start()

{

shot_speed = 800; //記述済み

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

transform.position = new Vector3(0, -5, 0); //記述済み

hp = 10; //記述済み

HPText.text = "HP:" + hp.ToString(); //②HPテキスト更新

}


void SubHP(int h) //③ダメージ時の処理

{

hp -= h; //HP減算

HPText.text = "HP:" + hp.ToString(); //HPテキスト更新

if (hp <= 0) Destroy(); //HPが0になったら Destroy()関数発動

}


void OnTriggerEnter2D(Collider2D collision) //④

{

if(collision.tag== "Enemy")

{

SubHP(1); //HPを1減らす

}

}


private void OnCollisionEnter2D(Collision2D collision) //⑤

{

if (collision.gameObject.tag == "Asteroid")

{

SubHP(2); //HPを1減らす

collision.gameObject.GetComponent<Asteroid>().DestroyAsteroid();//記述済み

}

}

 

これで今回の処理は完成です。


 

今回は前回の復習でした。

ちょっと物足りなかったかもしれませんが、また次回ご期待ください!


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

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


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

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


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

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

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

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


最新記事

すべて表示

ファイブボックス 上田教室