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
'Unity > Unity(C#์ค๊ธ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ฅ๋ฉ์๋ (0) | 2022.01.13 |
---|---|
๋ค์ํ๊ฒ ์์ฑํ ์ ์๋ ๋๋ค์ (0) | 2022.01.12 |
Delegate (0) | 2021.12.25 |
์ ๋ํฐ Reflection ์ฌ์ฉํ์ฌ ํ ํด๋์ค๋ฅผ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ค๊ธฐ, ํ ํด๋์ค ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ (0) | 2021.12.15 |