반응형
Delegate - 델리게이트 ?
👉 "대행자" 라는 뜻임
델리게이트는 함수에 대한 참조 타입의 일종
하나의 델리게이트로 여러 함수들에 접근이 가능함
또한, 함수를 파라미터로 전달 할 수도 있음
0️⃣ 기본형
delegate 반환타입 델리게이트명(매개변수);
using UnityEngine;
public class Delegate : MonoBehaviour
{
//델리게이트 선언 해주기
delegate void BasicDelegate();
private void Start()
{
//델리게이트 타입의 변수를 만들어주고
//함수를 넣어줘서 참조하게 만들어줌
BasicDelegate basicDelegate = new BasicDelegate(PrintMyName);
//델리게이트 호출
basicDelegate();
}
//사용할 메서드
void PrintMyName()
{
Debug.Log("MY Name Is Min!");
}
}

정상적으로 델리게이트가 호출된다.
1️⃣ 파라미터를 가진 델리게이터
delegate 반환타입 델리게이트명(매개변수, 매개변수);
using UnityEngine;
public class ParameterDelegateExample : MonoBehaviour
{
//인스펙터에서 받을 변수 값
public float valueX;
public float valueY;
//매개변수가 존재하는 존재하는 델리게이트 선언
delegate float ParameterDelegate(float X, float Y);
private void Start()
{
//델리게이트 타입의 변수를 만들어준다.
ParameterDelegate parameterDelegate = new ParameterDelegate(CalculateSum);
//new를 생략하고 바로 메서드를 넣을 수도 있음
//ParameterDelegate parameterDelegate = CalculateSum;
//매개변수를 넣어주면서 델리게이트 변수 호출해주기
float result = parameterDelegate(valueX, valueY);
//결과 값을 디버그로 찍어줍니다.
Debug.Log($"result : {result}");
}
//계산 메서드
float CalculateSum(float X, float Y)
{
return X + Y;
}
}

유니티에서 원하는 값을 입력해준다.

정상적으로 합산한 값이 나온다.
2️⃣ 델리게이터 체인
델리게이트 변수 += 참조 할 것
델리게이트 변수 -= 참조 할 것
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChainDelegateExample : MonoBehaviour
{
//인스펙터에서 받을 변수 값
public float valueX;
public float valueY;
//델리게이트 선언
delegate float ChainDelegate(float X, float Y);
private void Start()
{
//델리게이트 타입 변수를 선언해준다.
ChainDelegate parameterDelegate;
//델리게이트를 + 또는 - 연산자로 넣어준다. (new 입력)
//parameterDelegate = new ChainDelegate(CalculateSum);
//parameterDelegate += new ChainDelegate(CalculateMultiply);
//parameterDelegate += new ChainDelegate(CalculateSubtract);
//델리게이트를 + 또는 - 연산자로 넣어준다. (new 생략)
parameterDelegate = CalculateSum;
parameterDelegate += CalculateMultiply;
parameterDelegate += CalculateSubtract;
//델리게이트 변수 호출해주기
parameterDelegate(valueX, valueY);
}
//계산 메서드
float CalculateSum(float X, float Y)
{
float result = X + Y;
Debug.Log($"result : {result}");
return result;
}
//계산 메서드
float CalculateMultiply(float X, float Y)
{
float result = X * Y;
Debug.Log($"result : {result}");
return result;
}
//계산 메서드
float CalculateSubtract(float X, float Y)
{
float result = X - Y;
Debug.Log($"result : {result}");
return result;
}
}


3개의 메서드가 넣은 순차적으로 호출 되는 걸 확인할 수 있음.
❓ 델리게이트 특징
- 함수들을 등록하는 리스트
- 함수 포인터를 가지고 있어서 등록한 함수를 가리킴
- 델리게이트가 받아 들일 수 있는 함수의 서식을 결정 해야함 (델리게이트 선언시)
- 서식이 맞아야함
반응형
'Unity > 실전 유니티 예제' 카테고리의 다른 글
Unity C# Event_ 유니티 C# 이벤트 예제 (0) | 2022.08.02 |
---|