C# - delegate 사용법

2021. 2. 25. 14:18Developer.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);

            // 크로스라인 이벤트가 발생하면 미리 정해둔 함수들을 동시에 동작시킨다.

      }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형