본문 바로가기
Unity/TIL

TextRPG 팀플 마무리

by 김차루 2024. 5. 3.
스파르타 내배캠 15일차 TIL
C2조_💖 코딩(인줄 알았지 하드코딩 이지롱)

 

 

 

    왜 프로젝트는 마무리가 될수록 지저분해 보이는가... 아직 뉴비라서 그러겠지라는 생각으로 비쥬얼 스튜디오를 닫았다. 지금 그보다 아쉽게 느껴지는 부분은 따로 있기 때문이다. 아침 회의에서 분명 퀘스트는 일일이 선언하는 것보다 델리게이트로 구현하는게 훨씬 좋을 것 같다는 윤화님의 의견에 좋은 의견 같다며 자신있게 나섰지만 결국 하지 못했다. 다른 클래스처럼 GameScene에서 퀘스트 클래스를 호출해서 사용했다... 머리로는 어디 부분이랑 어디랑 연결하면 되겠지 싶었지만 막상 코드에 적용하려니 처음부터 내가 쓴 코드도 아니었고 고친다고 해도 프로젝트 구조를 고치게 생겨서 오전 시간을 고민만 하며 날려버렸다. 다음에는 꼭 델리게이트를 염두하고 구조를 짜면 좋을 것 같다. 그래서 오늘은! 델리게이트를 집고 넘어가려고 한다.

 

 

Delegate (델리게이트)

메서드를 참조하는 타입
  • 다른 프로그래밍 언어에서는 함수 포인터라는 용어를 사용하기도 한다.
  • 델리게이트를 이용하면 메서드를 매개변수로 전달하거나 변수에 할당할 수 있다.
  • C++의 함수포인터와 같이 '메서드'를 참조하는 대리자라고 볼 수 있다.
[지정자] delegate [반환형][델리게이트이름](매개변수 타입 매개변수 이름);
delegate void dele(int a);

 

1) 델리게이트 구현

  • 하나 이상의 메서드 등록하기
delegate void MyDelegate(string message);

static void Method1(string message)
{
    Console.WriteLine("Method1: " + message);
}

static void Method2(string message)
{
    Console.WriteLine("Method2: " + message);
}

class Program
{
    static void Main()
    {
        // 델리게이트 인스턴스 생성 및 메서드 등록
        MyDelegate myDelegate = Method1;
        myDelegate += Method2;

        // 델리게이트 호출
        myDelegate("Hello!");

        Console.ReadKey();
    }
}
  • 공격 콜백 받기
// 델리게이트 선언
public delegate void EnemyAttackHandler(float damage);

// 적 클래스
public class Enemy
{
    // 공격 이벤트
    public event EnemyAttackHandler OnAttack;

    // 적의 공격 메서드
    public void Attack(float damage)
    {
        // 이벤트 호출
        OnAttack?.Invoke(damage);
				// null 조건부 연산자
				// null 참조가 아닌 경우에만 멤버에 접근하거나 메서드를 호출
    }
}

// 플레이어 클래스
public class Player
{
    // 플레이어가 받은 데미지 처리 메서드
    public void HandleDamage(float damage)
    {
        // 플레이어의 체력 감소 등의 처리 로직
        Console.WriteLine("플레이어가 {0}의 데미지를 입었습니다.", damage);
    }
}

// 게임 실행
static void Main()
{
    // 적 객체 생성
    Enemy enemy = new Enemy();

    // 플레이어 객체 생성
    Player player = new Player();

    // 플레이어의 데미지 처리 메서드를 적의 공격 이벤트에 추가
    enemy.OnAttack += player.HandleDamage;

    // 적의 공격
    enemy.Attack(10.0f);
}

'Unity > TIL' 카테고리의 다른 글

Unity 게임 개발 입문 시작  (0) 2024.05.08
2주차 팀플 마무리  (0) 2024.05.07
시험 돌아보기  (1) 2024.05.02
시험 대비 C# 정리  (0) 2024.05.01
C# List<T> Find, FindIndex  (0) 2024.04.30