【Unity】体力ゲージの作り方。Sliderを用いれば簡単に実装可能です。
どうも、だらはです。
今回は体力ゲージの作り方を紹介したいと思います。
Unity標準の機能であるSliderを用いて簡単に実装できるのが本手法のメリットです。
体力ゲージの作り方
では早速作り方を記載していきます。
- [Hierarchy -> UI -> Input Field]からInputFieldを作成。
- [Hierarchy -> UI -> Slider]からSliderを作成。
- SliderのHand Slide Areaを削除。(Sliderのハンドルは体力ゲージには不要)
- SliderのFill AreaおよびFillのLeft, Rightを0に変更。(上下限まで色を塗るために必要)
- FillのImageのColorを黄色、BackgroundのImageのColorを赤色に変更。
- [Hierarchy -> Create Empty]から空のオブジェクトを作成して「Score」と命名後、ScoreGauge.cs(後述)をアタッチ。
- public変数に、手順1と手順2のオブジェクトを割り当てる。(下図1参照)
以上です。
今回は体力ゲージを増減させるためのイベントをボタンを用いることで実現します。
ボタンにButtonPM.cs(後述)をアタッチし、ButtonコンポーネントからButtonPlus()およびButtonMinus()を実行します。(下図2)
実行結果は下図2の通りです。
◆下図1
◆下図2
無事、ボタン押下で体力ゲージが模擬できました。
ビバ、ノンノン!
◆ScoreGauge.cs
using UnityEngine;
using UnityEngine.UI;
public class ScoreGauge : MonoBehaviour
{
int countMin; //体力ゲージ最小値
int countMax; //体力ゲージ最大値
int count; //体力ゲージ現状値
public InputField inputTextField; //カウント表示用
public Slider gauge; //ゲージ表示用
void Start()
{
countMin = 0;
countMax = 10;
count = 10;
gauge.minValue = countMin;
gauge.maxValue = countMax;
gauge.value = count;
inputTextField.text = count.ToString() + "/" + countMax;
}
public void Damage(int x)
{
if (x > 0)
{
if (count < countMax) { count = count + x; if (count > countMax)
{
count = countMax;
}
gauge.value = count;
}
}
else
{
if (count > countMin)
{
count = count + x;
if (count < countMin)
{
count = countMin;
}
gauge.value = count;
}
}
inputTextField.text = count.ToString() + "/" + countMax;
}
}
◆ButtonPM.cs
using UnityEngine;
public class ButtonPM : MonoBehaviour
{
public void ButtonPlus()
{
GameObject.Find("Score").GetComponent<ScoreGauge>().Damage(1);
}
public void ButtonMinus()
{
GameObject.Find("Score").GetComponent<ScoreGauge>().Damage(-1);
}
}
最後に
いかがでしたでしょうか。
今回は体力ゲージ実装の基礎を紹介しました。
需要があれば体力ゲージを生成するなどの機能をまとめたいと思います!
以上、だらはでした。
追記(2024.7.28)
3Dオブジェクトのすぐ付近に体力ゲージを表示する方法をまとめました!
以下を読んでいただけると嬉しいです。
ディスカッション
コメント一覧
GetComponent()とは何でしょうか?
記事の通りに設定してスクリプトを作成しましたが、そこの部分でエラーが出ました
間違えました、GetComponent();です
コメントありがとうございます!
ごめんなさい、一部手順が漏れていました。。(画像では対応済みですが文字起こしできていない)
以下が修正点になります。
誤:[Hierarchy -> Create Empty]から空のオブジェクトを作成しScoreGauge.cs(後述)をアタッチ。
正:[Hierarchy -> Create Empty]から空のオブジェクトを作成して「Score」と命名後、ScoreGauge.cs(後述)をアタッチ。
補足:().Damage(1);
以下のスクリプトでは、「Score」という名前のゲームオブジェクトをFind関数で検索し、
アタッチされている「ScoreGauge.cs」を取得し、「ScoreGauge.cs」で定義されているDamage()を実行しています。
GameObject.Find(“Score”).GetComponent
コメント欄だと、やまカッコが消えてしまいますね。。
以下、半角に読み替えてください。
GameObject.Find(“Score”).GetComponent<ScoreGauge>().Damage(-1);
教えていただきありがとうごさいます!
早速修正して、無事エラーが消えました!
二回もスコアゲージの部分が消えてしまっていましたが、私の言いたいことを察していただいて助かりましたw
いえいえ、解決できて良かったです(^o^)
また分からないことありましたら気軽にコメントください:)