📝 24.02.08
오늘로 유니티 숙련 주차 팀 과제를 시작했다. 우리 팀은 디펜스 게임을 만들기로 하였다.
나는 그 중 스킬 트리를 담당하여 만들기로 했다.
그래서 기본적인 틀을 짰다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkillTree : MonoBehaviour
{
public enum SkillType
{
DecreaseCool,
increaseAtk,
increaseAtkSphere
}
public SkillType type;
public int amount;
public bool isUnlocked = false;
public SkillTree prevTree;
public void CanOpen()
{
if(prevTree.isUnlocked)
{
//TODO: need GameManager gold check
if (!isUnlocked)
UnLock();
} else
{
Debug.Log("prevTree is locked");
}
}
public void UnLock()
{
switch((int)type)
{
case 0:
SkillManager.instance.decreaseCool(amount);
break;
case 1:
SkillManager.instance.increaseAtk(amount);
break;
case 2:
SkillManager.instance.increaseAtkSphere();
break;
}
isUnlocked = true;
}
}
모든 스킬 트리에서 동일하게 UnLock()
함수를 사용하기 위해 Enum
을 선언해서 각 스킬트리 종류마다 다른 기능이 실행되도록 구성했다.
스킬 트리는 대략 이렇게 구성되었다.
각 스킬트리 오브젝트별로 enum
을 선택하고 button 클릭 시 Unlock()
함수를 실행하도록 연결만 해주면 될 듯 하다...
열리지 않은 스킬 트리는 버튼을 비활성화해두고 싶은데, 씬이 시작되는 시점이 아닌 이전 스킬 트리가 오픈된 시점에 어떻게 Interactable
이 켜지게 할 지가 고민이다. 일괄적으로 모든 스킬 트리의 버튼 Interactable
을 조작할 함수를 구성해야 될 것 같다.