Unity/실전 유니티 예제

Unity Delegate_ 유니티 델리게이트 예제

minquu 2022. 7. 22. 20:58
반응형

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