2025.03.08
강의 43,44,45,46강 수강
강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding
43. Generic Take Action (11:23)
예상대로 액션 메서드와 유효성 검사 메서드를 일반화
public abstract class BaseAction : MonoBehaviour
{
public abstract void TakeAction(GridPosition gridPosition, Action onActionComplete);
public virtual bool IsValidActionGridPosition(GridPosition gridPosition)
{
List<GridPosition> validGridPositionList = GetValidActionGridPositionList();
return validGridPositionList.Contains(gridPosition);
}
public abstract List<GridPosition> GetValidActionGridPositionList();
}
액션 실행 코드도 매우 간결해짐
if(selectedAction.IsValidActionGridPosition(mouseGridPosition))
{
SetBusy();
selectedAction.TakeAction(mouseGridPosition, ClearBusy);
}
좀 더 개선할 수 있을 것 같긴 한데, 강의에서도 추후 계선할 것이라고 하니 기다려보기로.
44. Selected Action UI (07:57)
현재 선택된 액션을 UnitActionSystem 에 저장해두고, 액션이 바뀔 때마다 UnitActionSystemUI 의 모든 버튼을 순회하면서 저장해둔 액션과 동일한 액션을 들고 있는 버튼에 활성화 표시를 해준다.
45. Action Busy UI (06:46)
액션 중에는 UnitActionSystemUI 를 사용하지 못하도록, 새로운 UI 인 ActionBusyUI 를 만들어서 해당 UI 로 UnitActionSystemUI 를 가려버리는 기능을 구현. 이 강의에서 드디어 파라미터를 전달하는 이벤트 핸들러 코드가 등장.
46. Action Points (13:20)
액션마다 포인트를 부여하고 액션을 사용하면 포인트를 소모하는 로직 구현
각 액션 클래스에서는 자신이 몇 포인트가 필요한 액션인지 알려줄 메서드 작성
public virtual int GetActionPointCost()
{
return 1;
}
Unit 은 자신의 액션 포인트를 소유하고 있고, 특정 액션에 대해 해당 액션을 실행할 수 있는 액션 포인트가 있는지 확인하고 소모하는 메서드들을 작성
public bool TrySpendActionPointsToTakeAction(BaseAction baseAction)
{
if(CanSpendActionPointsToTakeAction(baseAction))
{
SpendActionPoints(baseAction.GetActionPointCost());
return true;
} else
{
return false;
}
}
public bool CanSpendActionPointsToTakeAction(BaseAction baseAction)
{
return actionPoints >= baseAction.GetActionPointCost();
}
private void SpendActionPoints(int amount)
{
actionPoints -= amount;
}
UnitActionSystem 에서는 액션을 실행하기 전 액션 포인트를 확인하고 소모하는 로직을 추가. 그리고 UI 를 업데이트하는 로직도 추가
if(!selectedUnit.TrySpendActionPointsToTakeAction(selectedAction))
{
return;
}
SetBusy();
selectedAction.TakeAction(mouseGridPosition, ClearBusy);
OnActionStarted?.Invoke(this, EventArgs.Empty);
코드 마지막줄에 나온 OnActionStarted 콜백을 통해 UnitActionSystemUI 가 업데이트 됨