[C#] Delegate(대리자) 정리(2)
본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
Delegate(대리자) 정리는 1탄에 이어서 쓰겠습니다.
.NET은 자주 사용되는 대리자 형식을 미리 정의해 놓았음:
| 대리자 | 설명 |
|---|---|
Action | 반환값이 없는 메서드 |
Action<T> | T 매개변수를 받고 반환값이 없는 메서드 |
Func<TResult> | 반환값이 TResult인 메서드 |
Func<T, TResult> | T 매개변수를 받고 TResult를 반환하는 메서드 |
Predicate<T> | T 매개변수를 받고 bool을 반환하는 메서드 |
우선 플레이어의 공격 시스템을 구현하는데 버프 상황에 따라 공격 데미지가 다르도록 간단하게 구현해보겠다
SkillSystem.cs
using System;
using UnityEngine;
public class SkillSystem : MonoBehaviour
{
public void ExecuteSkill(float baseDamage, Action<float> Damage)
{
Damage(baseDamage);
}
}
기본 데미지와 Damage를 어떻게 처리할지 Action을 매개변수로 받는다
GameManager.cs
using UnityEngine;
public class GameManager : MonoBehaviour
{
private SkillSystem skillSystem;
private void Awake()
{
skillSystem = GetComponent<SkillSystem>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
// 기본 공격
skillSystem.ExecuteSkill(30f, (damage) => Debug.Log($"기본공격: {damage}"));
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
// 버프 공격
skillSystem.ExecuteSkill(30f, (damage) => Debug.Log($"버프공격: {damage * 2f}"));
}
}
}
실행 결과

여기서 Action을 Func로 바꿔서 직접 데미지를 계산해서 return해주는 형식으로 바꿔도 되고
Predicate를 사용하여 특정 값 이상일 때만 데미지를 입는 형식으로 구현도 할 수 있다.