![見出し画像](https://assets.st-note.com/production/uploads/images/127191219/rectangle_large_type_2_b3dd145fda0a5c39afc164f89118ed07.png?width=1200)
5-3敵にHP追加する【Unityゲーム開発の基礎】作って学ぶブロック崩し
ブロック崩しを作りながらUnityを学んでいこう!
フェーズ1で「ブロック崩しの骨格」を作り
フェーズ2で「見た目をかっこよく」して
フェーズ3で「タイトル画面やゲームオーバーなどの画面」を作って
フェーズ4では「アニメーション」させることができました。
フェーズ5の目標は「ステージの作成」です。
複数のステージを作ったら敵にもバリエーションが欲しくなりますね。
今回は敵にHP(ヒットポイント)を追加して、何度かボールを当てないと倒せない仕組みを追加してみます。
敵のスクリプトでHPを制御
敵用のスクリプト EnemyBehaviour に最大HPと現在のHPを管理するメンバ変数を追加します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBehaviour : MonoBehaviour
{
public GameObject hitImpact;
public int maxHP = 1; //←コレを追加
private int currentHP; //←コレを追加
private EnemyUnitBehaviour enemyUnit;
public void Startup(EnemyUnitBehaviour unit)
{
currentHP = maxHP; //←コレを追加
this.enemyUnit = unit;
this.gameObject.SetActive(true);
}
void OnCollisionEnter2D(Collision2D collision)
{
if (null == enemyUnit) return;
if (collision.gameObject.tag == "Ball")
{
if (1 < currentHP) //←コレを追加
{
this.currentHP -= 1; //←コレを追加
}
else
{
GameObject hit = (GameObject)Instantiate(hitImpact);
hit.transform.position = this.transform.position;
this.gameObject.SetActive(false);
enemyUnit.OnEnemyDead();
}
}
}
}
最大HPを管理する maxHP はInspectorから値を変えられるようにpublic で宣言しています。現在のHPを管理するため変数が currentHP です。
そして、ステージ開始時に呼び出される Startupメソッドの中で cnrrentHP を初期化します。
さらに、ボールが当たった時の処理を少し改良します。currentHPが残っていたらHPを減らして0になったらこれまでの壊れる処理を行うようにします。
残りHPによって敵の色を変える
せっかくなので敵の残りHPが分かるように色を変える仕組みも追加してみましょう。
private void SetEnemyColor()
{
if (3 <= currentHP)
this.GetComponentInChildren<SpriteRenderer>().color = Color.magenta;
else if (2 == currentHP)
this.GetComponentInChildren<SpriteRenderer>().color = Color.yellow;
else if (1 >= currentHP)
this.GetComponentInChildren<SpriteRenderer>().color = Color.white;
}
EnemyBehaviour に↑こんな感じのメソッドを追加します。
GetComponentInChildrenで自身のコンポーネントへアクセスできます。 SpriteRendererコンポーネントのカラーを変更することで色を変化させます。
このメソッドをHPが変化するタイミングで呼び出すようにします。
public class EnemyBehaviour : MonoBehaviour
{
:
public void Startup(EnemyUnitBehaviour unit)
{
currentHP = maxHP;
SetEnemyColor(); //←コレを追加
:
}
:
:
void OnCollisionEnter2D(Collision2D collision)
{
if (null == enemyUnit) return;
if (collision.gameObject.tag == "Ball")
{
if (1 < currentHP)
{
this.currentHP -= 1;
SetEnemyColor(); //←コレを追加
}
else
{
:
:
}
}
}
}
これが今回の成果です。
Phase5-3の成果(敵にHPを追加する) https://t.co/ouCSAQYEmf#unity #indiedev #indiegame pic.twitter.com/eysSplZi5M
— をりはぅ@indiedev (@worihau__) January 12, 2024
つづく
次回:5-4ボールの動きをイイ感じにする (予定)