Unity/Unity(C#쀑급)

이벀트

Rainbow🌈Coder 2021. 12. 26. 12:11
728x90

μ΄λ²€νŠΈλŠ” ν”Œλ ˆμ΄μ–΄κ°€ 'μ˜ˆμƒλœ μ•Œλ¦Ό'으둜 μΈμ§€ν•œλ‹€.

책상에 νŠΉμ •μΈ μ „μš© 직톡전화가 λ†“μ—¬μžˆμ„ λ•Œ

벨이 울리면 받기도 전에 νŠΉμ •μΈμ΄ μ „ν™”ν–ˆλ‹€λŠ” κ±Έ μ•Œ 수 있고

νŠΉμ •μΈμ—κ²Œ 무언가가 λ°œμƒν–ˆμŒμ„ μ§μž‘ν•  수 μžˆλ‹€.

 

μ΄λ²€νŠΈλ„ 이와 μœ μ‚¬ν•œ μ›λ¦¬λ‘œ λ™μž‘ν•œλ‹€.

이벀트 λ°œμƒμ— λŒ€ν•΄ μ€€λΉ„λ₯Ό 늘 ν•˜κ³  있고 μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ 그에 따라 μ˜ˆμ •λœ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

λ˜ν•œ μ΄λ²€νŠΈμ™€ ν•¨κ»˜ κ΄€λ ¨ 정보λ₯Ό 전달해 μ–΄λ–€ 상황이 λ°œμƒν–ˆλŠ”μ§€λ₯Ό μ•Œλ €μ€„ μˆ˜λ„ μžˆλ‹€.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Eventsc : MonoBehaviour
{
    //μ΄λ²€νŠΈλŠ” μœ„μž„μ„ μ‚¬μš©ν•΄ ν†΅μ‹ μ˜ ν˜•νƒœμ™€ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ 전달할 μ •λ³΄μ˜ μ’…λ₯˜λ₯Ό μ •μ˜ν•œλ‹€
    //μœ„μž„ λ©”μ†Œλ“œ μ •μ˜
    public delegate void ClickAction();
    //μœ„μž„ λ©”μ†Œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό μ‚¬μš©ν•œ 이벀트 ν›…(hook)
    public static event ClickAction OnClicked;
    //이벀트λ₯Ό κΈ°λ‹€λ¦¬λŠ” λ‹€λ₯Έ μ½”λ“œμ— 이벀트λ₯Ό μ „λ‹¬ν•˜κ³  μ‹ΆμœΌλ©΄ μœ„μž„μ„ μ‹œκ·Έλ‹ˆμ²˜λ‘œ μ‚¬μš©ν•΄ 이벀트λ₯Ό λ©”μ†Œλ“œμ²˜λŸΌ ν˜ΈμΆœν•˜λ©΄ λœλ‹€
    //이벀트 μˆ˜μ‹ μ„ κΈ°λ‹€λ¦¬λŠ” λŒ€μƒμ΄ μ—†λŠ” 상황에 λŒ€λΉ„ν•΄ μœ„μž„μ„ ν˜ΈμΆœν•˜κΈ° 전에 null인지 ν™•μΈν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€

    private void Start()
    {
        //ν•¨μˆ˜ OnClicked에 μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ μ•Œλ¦Όμ„ 받을 ν•¨μˆ˜λ₯Ό μ§€μ •ν•˜κ³  μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ μ‹€ν–‰ν•œλ‹€.
        OnClicked += Events_OnClicked;
    }
    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            //μˆ˜μ‹  λŒ€μƒμ΄ μžˆλ‹€λ©΄ 이벀트 μœ„μž„μ„ λ°œμƒμ‹œν‚¨λ‹€.
            if(OnClicked != null)
            {
                OnClicked();
            }
        }
        if (Input.GetKeyDown(KeyCode.W))
        {
            //μˆ˜μ‹  λŒ€μƒμ΄ μžˆλ‹€λ©΄ 이벀트 μœ„μž„μ„ λ°œμƒμ‹œν‚¨λ‹€.
            if (OnClicked != null)
            {
                //이벀트 μˆ˜μ‹ μ„ λ°›μ§€ μ•Šκ²Œ ν•œλ‹€
                //이벀트 μˆ˜μ‹ μ΄ 더 이상 ν•„μš”μΉ˜ μ•ŠμœΌλ©΄ μˆ˜μ‹  λŒ€μƒμ—μ„œ μ œκ±°ν•΄ 정리해주면 μ’‹λ‹€.
                OnClicked -= Events_OnClicked;
            }
        }
    }
    //μˆ˜μ‹ λŒ€μƒ λ©”μ†Œλ“œ
    void Events_OnClicked()
    {
        Debug.Log("ν΄λ¦­ν–ˆμŠ΅λ‹ˆλ‹€");
    }
    private void OnDestroy()
    { 
        //이벀트 μˆ˜μ‹ μ„ λ°›μ§€ μ•Šκ²Œ ν•œλ‹€
        OnClicked -= Events_OnClicked;
    }
}

이처럼 이벀트λ₯Ό ν™œμš©ν•˜λ©΄ 적이 죽을 λ•Œλ§ˆλ‹€ 이벀트λ₯Ό λ°œμƒμ‹œμΌœμ„œ μ μˆ˜κ°€ μ˜¬λΌκ°€κ²Œ ν•˜λŠ” λ“± λ‹€μ–‘ν•˜κ²Œ μ‘μš©ν•  수 μžˆλ‹€.

728x90