2021. 2. 25. 14:18ㆍDeveloper.TokkiSea/Unity3D
delegate 사용법
먼저 아래 코드를 살펴보자
// 말그대로 delegate 로 함수 형태를 선언하고
delegate void PowerBlocks(int x, int y, int type);
// delegate 와 맞는 형식의 여러기능의 함수를 만든다.
// 블럭을 제거하는 코드
public static void removeBolcks(int x, int y, int type)
{
// remove blocks
// add score
Debug.Log("removeBlocks done> " + x + "," + y + "> " + type);
}
// 폭탄 이펙트를 보여주는 코드
public static void showEffectBomb(int x, int y, int type)
{
// remove blocks
// add score
Debug.Log("showEffectBomb done> " + x + "," + y + "> " + type);
}
// 크로스 라인 이펙트를 보여주는 코드
public static void showEffectCross(int x, int y, int type)
{
// remove blocks
// add score
Debug.Log("showEffectBomb done> " + x + "," + y + "> " + type);
}
// 점수를 추가하는 코드
public static void addScore(int x, int y, int type)
{
// remove blocks
// add score
Debug.Log("addScore done");
}
// 등 위와 같이 모두 같은 형식의 함수를 만들고 내부동작을 다르게 만든다.
void Start()
{
// 첫번째 폭탄이 터졌을때 블럭을 제거하고, 폭탄이펙트를 보여주고, 점수를 계산한다.
PowerBlocks powerBlocks1 = new PowerBlocks(removeBolcks);
powerBlocks1 += new PowerBlocks(showEffectBomb);
powerBlocks1 += new PowerBlocks(addScore);
// 두번째 크로스라인 블럭이 터졌을때 블럭을 제거하고, 크로스 이펙트를 보여주고, 점수는 계산하지 않는다.
PowerBlocks powerBlocks2 = new PowerBlocks(removeBolcks);
powerBlocks2 += new PowerBlocks(showEffectCross);
// 위와 같이 동작할 방식과 내용을 모두 추가해둔다.
powerBlocks1(6,1,BOMB_BLOCK);
powerBlocks1(2,3,FOUR_BLOCK);
}
void checkingRoop()
{
..
..
if(BOMB_BLOCK)
{
powerBlocks1(6,1,BOMB_BLOCK);
// 폭탄제거 이벤트가 발생하면 미리 정해둔 함수들을 동시에 동작시킨다.
}
..
..
if(BOMB_BLOCK)
{
powerBlocks1(2,3,FOUR_BLOCK);
// 크로스라인 이벤트가 발생하면 미리 정해둔 함수들을 동시에 동작시킨다.
}
}