【戦略シミュゲー制作】ユニットの上に部隊数を表示する【Unity】

ユニットの残存機数を表示するやつを実装したので書き残します。

UnitPrefabをダブルクリックし、直下にTextMeshProを作ります。
Unit(clone)-TextMeshPro(clone)となればOKです。

TextMeshProはTextNumと名前を変更します。

UnitPrefabへUnit.cs、TextNumへTextNum.csをそれぞれアタッチします。

Unit.cs、TextNum.csへそれぞれ下記scriptを記述します。

   public class Unit : MonoBehaviour
{
    
    [SerializeField] int num;
    [SerializeField] int maxNum;


    public int Num { get => num; set => num = value; }
    public int MaxNum { get => maxNum; }

     private TextMeshPro textNum;

  void Start()
    {

        textMeshPro = GetComponentInChildren<TextMeshPro>();
        changeTextNum(MaxNum);
    }

    public void changeTextNum(int num)
    {
        textNum.text = num.ToString();
    }
}
public class TextNum : MonoBehaviour
{

    // Start is called before the first frame update
    void Start()
    {
        transform.position = transform.parent.gameObject.transform.position;
    }

}

あとは既に書いてある戦闘処理ロジックにてNumを変更する際に
changeTextNumを呼び出せばOKです。

 //戦闘処理
    public void CalcBattle(Unit own, Unit enemy)
    {
        int ownHp = own.Num * own.Df;
        int enemyHp = enemy.Num * enemy.Df;


        int damage = own.At * own.Num;
        int givenDamage = enemy.At * enemy.Num; //反撃ダメージ
        givenDamage = (givenDamage < 0) ? 0 : givenDamage;

        //ダメージ結果
        float ownNum = (ownHp - givenDamage) / own.Df;
        float enemyNum = (enemyHp - damage) / enemy.Df;

        if (ownNum > 1)
        {
            own.Num = (int)(ownNum);
            own.changeTextNum(own.Num); //追加部分
        }
        else
        {
            own.DestoroyThis();
        }

        if (enemyNum > 1)
        {
            enemy.Num = (int)(enemyNum);
            enemy.changeTextNum(enemy.Num); //追加部分

        }
        else
        {
            enemy.DestoroyThis();
        }

        DeletePints(pints);

        return;
}

解説1)
ユニットに連動させて動かすために親子構造にします。その際Canvasがあると1層増えて面倒なためCanvasが不要なTextMeshProを使います。

解説2)
TextMeshProは初期状態だと裏に回ってしまい見えないため、
AddComponentからSorting Layerを追加→Unitと同様のレイヤーを選びましょう。

コメント

タイトルとURLをコピーしました