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) //HPが0を下回ったら
{
Destroy(); //Destroy()関数発動
}
}
void OnTriggerEnter2D(Collider2D collision) //❹
{
if(collision.tag== "Enemy")
{
SubHP(1); //HPを1減らす
}
}
void OnCollisionEnter2D(Collision2D collision) //❺
{
if (collision.gameObject.tag == "Asteroid")
{
SubHP(2); //HPを2減らす
collision.gameObject.GetComponent<Asteroid>().DestroyAsteroid();//記述済み
}
}
これで今回の処理は完成です。
今回は前回の復習でした。ちょっと物足りなかったかもしれませんが、また次回ご期待ください!
教室では実際に通って頂いての授業の他、ちょっとしたお困りごとに対するオンライン授業やオンラインサポートも行っております。お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。
体験授業のお申込みは こちら から。