Menu
CoddyTech

ヘルスバー

Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 16/18。

各敵の上には、残りの体力を示すバーがあります。敵のプレハブには、暗い背景とその手前にある緑色の塗りつぶし部分という、2つの細いキューブがあります。塗りつぶし部分の幅は、残りの体力を最大体力で割った値、つまり0から1までの数値です。その値を使って塗りつぶし部分のx方向のスケールを変更すると、幅が短くなります。ただし、キューブは中心を基準に拡大縮小するため、塗りつぶし部分は両端から中央に向かって縮みます。塗りつぶし部分はバーの左端にある空のpivotオブジェクトの下に置き、スクリプトでは代わりにpivotのスケールを変更します。そうすると、その下にあるすべてのものが左端に向かって縮み、バーは右側から減っていきます。

この割合はfloatで計算する必要があります。health / data.maxHealthは2つのintを割るため、C#ではintの除算で小数部分が切り捨てられます。6 / 9は0になるので、最初の攻撃を受けた後にバーが空になってしまいます。片方を先にキャストする(float)health / data.maxHealthなら、0.67になります。底にあるpivotから上に向かって水位が上がる水槽の場合:

float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);

満タンのバーではプレイヤーに何も伝わらないので、バーは非表示の状態で始まります。プレハブでは非アクティブになっており、最初に攻撃を受けたときに表示されます。非アクティブなオブジェクトではUpdateは実行されませんが、そのメソッドを呼び出すことはできます。各敵はプレハブの個別のコピーで、それぞれに専用のバーがあります。

challenge icon

チャレンジ

難しい
  1. HealthBarに、シリアライズされたTransform fill(InspectorでバーのFillPivotを設定します)と、バーのGameObjectを有効にし、fillをx方向にfractionの値までスケールするpublic void Show(float fraction)を追加します。
  2. Enemyに、シリアライズされたフィールドhealthBar(HealthBar)を追加します。TakeDamageで体力が減るたびに、残りの体力をmaxHealthに対する割合で表示します。

各敵のプレハブにはバーがあります。バーは非アクティブにし、HealthBarスクリプトを付け、左端のピボットの下にFillを配置します。Playを押して、タワーが発射する間のバーの変化を確認し、それからCheckを押します。

自分で試してみよう

using UnityEngine;

// 後で登場:敵の頭上に表示され、残りの体力を示すバー。
public class HealthBar : MonoBehaviour
{
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityゲーム:タワーディフェンスのすべてのレッスン