using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
// delegate를 활용하면 모든 함수(메소드)들을 한 군데에 넣어서 관리할 수 있다. (예제에서는 chain이라는 delegate에 SetPower와 SetDefence를 넣어서 관리)
public delegate void ChainFunction(int value);
// 참고 : delegate는 class다. (class는 ChainFunction과 같이 초록색 글자로 나옴)
ChainFunction chain; // class 할당받기
int power;
int defence;
// parameter 값(int value)을 받아서, power 값과 defence 값을 올려보자.
public void SetPower(int value) // power 값 조절할 수 있는 메소드
{
power += value;
print("power의 값이 " + value + "만큼 상승했습니다. 총 power의 값 = " + power);
}
public void SetDefence(int value) // defence 값 조절할 수 있는 메소드
{
defence += value;
print("defence의 값이 " + value + "만큼 상승했습니다. 총 defence의 값 = " + defence);
}
void Start()
{
// SetPower(5); // power 값은 5
// SetDefence(5); // defence 값은 5
// 이런 식으로 함수를 일일이 만들어서 값을 관리하기엔 너무 힘들다... 그래서 delegate라는 클래스를 사용한다.
chain += SetPower; // chain이라는 class에 SetPower 함수를 적용시킴
chain += SetDefence; // chain이라는 class에 SetDefence 함수를 적용시킴
// 주의! chain = SetPower ==> '='으로 하면 '우항'의 함수만 적용됨.
// chain -= SetDefence; // 이걸 넣으면 SetPower만 출력됨.
// chain -= SetPower;
if(chain != null) // 이 조건을 넣지 않으면 오류가 생긴다. 위에 적힌 -= 에 의하면 아무것도 없으므로...(+= 는 항목을 추가, -=는 항목을 제거)
{
// 한 번에 호출시키고 싶으면?
chain(5); // SetPower와 SetDefence에 5가 반영됨.
}
}
}
카테고리 없음
댓글