'분류 전체보기'에 있는 글 43개

  1. ▪ [Unity]대리자를 이용한 콜백함수 만들기 958 ....... 2018.01.22


728x90

콜백함수란?


보통 프로그램을 짤때는 무슨 이벤트가 일어났는지 확인 하기 위해서는 조건문을 통해 계속 확인하다가 조건에 맞을때 이벤트를 발생시킨다. 하지만 콜백함수는 누군가에게 부탁을 하는 경우와 비슷하다.


예를들어서 우리가 6시 약속이 있다. 위에 프로그램처럼 행동한다면 1초 혹은 더 빠르게 계속 시간을 확인하면서 약속 시간을 지킬것이다. 그러나 우리는 그렇게 하지않고 알람을 써서 약속을 지킨다. 이것이 바로 콜백함수이다. 굳이 내가 하지 않아도 되는일을 남에게 시키는 일이다.



플레이어가 죽으면 게임이 끝나는 간단한 프로그램을 만들어 보겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using UnityEngine;
using System.Collections;
 
public class Manager : MonoBehaviour
{
 
    private Player _playerScript;
    // Use this for initialization
    void Start()
    {
        _playerScript = GameObject.Find("Player").GetComponent<Player>();
        _playerScript.SetCallback(GameOver);
 
    }
 
    void GameOver()
    {
        Debug.Log("GameOver");
    }
}
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour {
 
    public delegate void Callback();
 
    private Callback callback = null;
    // Use this for initialization
    void Start()
    {
        StartCoroutine(Cor());
    }
 
    IEnumerator Cor()
    {
        int count = 0;
        bool isCor = true;
        while (isCor)
        {
            yield return new WaitForSeconds(1f);
            count++;
 
            if(count == 10)
            {
                Debug.Log("Dead");
                callback();
                isCor = false;
            }
        }
    }
 
 
    public void SetCallback(Callback cal)
    {
        callback = cal;
    }
}
 
cs



이처럼 플레이어와 게임매니저를 만들엇다.


플레이어 스크립트를 보시면 10초뒤에 플레이어는 죽는다.


그리고 보통게임은 플레이어가 죽으면 끝나기 때문에 매니저스크립트에 게임오버 함수를 만들었다.


하지만 매니저가 직접 플레이어를 확인하는것이 아니라 댈리게이트 (대리자)를 통하여서


매니저의 게임오버함수를 넘겨 주었다. 그래서 플레이어가 10초 뒤에 죽을때 콜백함수를 발생시켜서 매니저의 게임오버 함수를 호출 할수 있는것이다.



'언어 > Unity' 카테고리의 다른 글

[Unity}Nullable  (0) 2018.01.25
[Unity]List사용  (0) 2018.01.24
[Unity]대리자 delegate  (20) 2018.01.20
[Unity]Split함수로 문자열 자르기  (0) 2018.01.19
[Unity]특정 카메라만 스크린샷 찍기  (1) 2018.01.18