위에 조건처럼 [어떤 동작을해도 같은 목적을 취함 + 동작이 다름] 이라는 조건하에 전략패턴 및 커맨드패턴의 디자인패턴을 자주 사용할 것이다. 하지만 UI의 버튼이나 규모가 작은 경우에는 전략패턴을 구조로 설계하기에 리소스 낭비적인 부분이 있다.
이런 경우에는 <매핑 테이블 활용>을 하여 각 기능을 정의한뒤 인자값을 다르게 설정하는 것이다.
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections.Generic;
using Unity.Burst.Intrinsics;
public class UpgradesController : MonoBehaviour
{
[SerializeField] private SlimeTowerStatUpgradeData[] _upgradeDatas;
[SerializeField] private Button[] buttons;
private Dictionary<Button, TowerGrade> upgradeButtonMappings;
private void Awake()
{
upgradeButtonMappings = new Dictionary<Button, TowerGrade>
{
{ buttons[0], TowerGrade.Common},
{ buttons[1], TowerGrade.Normal},
{ buttons[2], TowerGrade.Epic},
};
foreach(KeyValuePair<Button, TowerGrade> pair in upgradeButtonMappings)
{
pair.Key.onClick.AddListener(() => UpgradeTowerByGrade(pair.Value));
}
}
//버튼 누르면 해당 등급에 따라 강화
public void UpgradeTowerByGrade(TowerGrade grade)
{
foreach (var data in _upgradeDatas)
{
if (data.Grade == grade)
{
data.OnUpgrade();
break;
}
}
}
}
위 예제 코드는 버튼이 3개가 있고 , 해당 버튼들은 해당 등급의 유닛들을 강화해주는 기능이있다.
목적은 강화기능이기에 등급이라는 인자값을 받아서 적용시켜주어야한다.
초기화시 사용할 데이터를 Inspector를 통해서 초기화한뒤(스크립트 코드로 적용시켜도 됨)
버튼의 onClick.AddListener로 람다식을 이벤트로 초기화 하여 사용하는 방식을 취한다.
이런식으로 테이블매핑을 한뒤 각 기능에 맞춰 이벤트를 적용시켜주면 전략패턴을 사용하지않고
간단히 사용 할 수 있다.
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-12-20(금) :: 모의면접 자기소개 및 질문 준비 (0) | 2024.12.20 |
---|---|
TIL : 2024-11-22(금) :: Unity 3D 모바일 타워디펜스게임 팀프로젝트 개발 - 심화프로젝트에 대한 회고 (0) | 2024.11.22 |
TIL : 2024-11-18(월) :: Unity 에서 CSV 파일 로드해서 사용하기 (0) | 2024.11.18 |
TIL : 2024-11-15(금) :: 유니티,C# 코드 작성시 최적화를 위해 지켜야 되는것 (0) | 2024.11.15 |
TIL : 2024-11-14(목) :: ScriptableObject 는 불변 데이터를 사용하는것이 좋다. (0) | 2024.11.14 |