Unityでシンプルなスキルツリーを作成。Part.2ボタンに連動して解放

当ページのリンクには広告が含まれています。

Unityでシンプルなスキルツリーを作成するPart2です。

はじめに

Part1は下記です。

今回やる事

Part1では「簡単なUIとボタンを押したらステータス上昇」を作成しました。

Part2では「ボタンを押すと次のスキルが解放」されるのを実装していきます。

作成開始

UIを作成

Part1で作成した「MaxHealthUP」を配下ごとコピーして、名前を「AttackDamageUP」に変更。位置とアイコンを変更して、繋ぐ線(line)も追加します。

繋ぐ線(line)は好きなものでOK、下記は白色の画像のサイズを変更して置いてあるだけです。

スクリプトの変更

「SkillPanel」スクリプトを下記に変更します。「nextSkillPanel」には開放するオブジェクトをセットします。UnityActionにパラメータを追加しています。

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

public class SkillPanel : MonoBehaviour
{
    public static UnityAction<SkillPanel> OnSkillPanelClick;

    public GameObject nextSkillPanel;
    private Image skillImageBackColor;
    private bool isLocked;

    private void Start()
    {
        skillImageBackColor = GetComponent<Image>();
        skillImageBackColor.color = Color.grey;
        isLocked = false;
    }
    public void ButtonClick()
    {
        if(!isLocked)
        {
            isLocked = true;
            skillImageBackColor.color = Color.white;
            OnSkillPanelClick?.Invoke(this);
        }
    }
}

パラメータを追加したので「TestScript」を下記の様に変更。

using UnityEngine;

public class TestScript : MonoBehaviour
{
    public int maxHealth = 50;

    private void OnEnable()
    {
        SkillPanel.OnSkillPanelClick += MaxHealthUP;
    }

    private void OnDisable()
    {
        SkillPanel.OnSkillPanelClick -= MaxHealthUP;
    }
    private void MaxHealthUP(SkillPanel skillPanel)
    {
        maxHealth += 10;
    }
}

スキルツリーを管理

スキルツリーを管理するスクリプトを追加するので「SkillTreeCanvas」に「SkillTreeScript」スクリプトを新規追加。また、「AttackDamageUP」は初期では非アクティブにしておきます。

「SkillTreeScript」スクリプトの中身は下記に変更します。次のスキルパネルをアクティブにしています。

using UnityEngine;

public class SkillTreeScript : MonoBehaviour
{

    private void OnEnable()
    {
        SkillPanel.OnSkillPanelClick += UnLockSkill;
    }

    private void OnDisable()
    {
        SkillPanel.OnSkillPanelClick -= UnLockSkill;
    }
    private void UnLockSkill(SkillPanel skillPanel)
    {
        if (skillPanel.nextSkillPanel != null)
        {
            skillPanel.nextSkillPanel.SetActive(true);
        }
    }
}

下記の様にパラメータをセットします。

実行して、下記の様に動けばOKです。

ボタンを押すと最大HPが上がるのみなので、「TestScript」を下記に変更。「StatusUP」の関数とデリゲート部分は「SkillTreeScript」に移動しても良さそう。

using UnityEngine;

public class TestScript : MonoBehaviour
{
    public int maxHealth = 50;
    public int attack = 10;

    private void OnEnable()
    {
        SkillPanel.OnSkillPanelClick += StatusUP;
    }

    private void OnDisable()
    {
        SkillPanel.OnSkillPanelClick -= StatusUP;
    }
    private void StatusUP(SkillPanel skillPanel)
    {

        switch (skillPanel.name)
        {
            case "MaxHealthUP":
                MaxHealthUP(10);
                break;
            case "AttackDamageUP":
                AttackDamageUP(5);
                break;
            default:
                Debug.Log("ErrorSkillName: " + skillPanel.name);
                break;
        }
    }

    private void MaxHealthUP(int amount)
    {
        maxHealth += amount;
    }

    private void AttackDamageUP(int amount)
    {
        attack += amount;
    }
}

とりあえずスキルツリーの原型は完成。気が向いたらPart3でスキルポイントの管理などを追加するかも。

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