์ ๋ํฐ ์์ง ๋ด์ ์ธ์คํํฐ ์ฐฝ์์ event๋ฅผ ์
๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ๋ชฉ๋ก์ด ๋ฌ๋ค.
์ค๋์ ์ ๋ํฐ์์ ์ด๋ฒคํธ ์์คํ ์ด ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ ์ฐ๋์ง์ ๋ํด ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.
1. ์ ๋ํฐ ์ด๋ฒคํธ ์์คํ ์ด๋
์ ๋ํฐ ์ด๋ฒคํธ ์์คํ ์ ํน์ ์ฌ๊ฑด์ด ๋ฐ์ํ์ ๋ ์ด๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์๊ฒ ์๋ฆผ์ผ๋ก์จ ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ด๋ค.
์ต๊ทผ ์ ๋ํฐ๋ก ๊ฒ์ ๊ฐ๋ฐ์ ์งํํ๋ฉฐ ์์ฃผ ๋ง๋ฅ๋จ๋ฆฐ ๋ฌธ์ ์ค ํ๋๋ ๊ฐ์ฒด ๊ฐ ์ฐธ์กฐ ๊ด๋ฆฌ์๋ค. ํนํ, ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ๊ณ ๋ฐ์ํด์ผ ํ ๋, ์ฐธ์กฐ๋ฅผ ์ง์ ์ฐ๊ฒฐํ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ์์ ํ์ ๋ ์ฐ๋ฌ์ ๋ค๋ฅธ ์ฝ๋์์ ์๋ฌ๊ฐ ๋จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ผ๋ก๋ก, ํ๋ ์ด์ด๊ฐ ์ ์ ๊ณต๊ฒฉํ ๋๋ง๋ค UI์ ์ ์ ์์คํ ์ด ์ ๋ฐ์ดํธ๋์ด์ผ ํ๋๋ฐ, ์ง์ ์ฐธ์กฐ๋ก ์ฐ๊ฒฐํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ ํ ์คํฌ๋ฆฝํธ์์ ์์ ์ ํ์ ๋ ํจ๊ป ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ๊ทธ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๊ฑฐ๋ฏธ์ค์น๊ธฐ์ฒ๋ผ ์ฝ๋๋ฅผ ํ๋ํ๋ ํ๊ณ ์ฌ๋ผ๊ฐ์ ํด๊ฒฐํด์ผ ํ๋ ๋ฒ์กํจ, ๋ง๊ทธ๋๋ก ์คํ๊ฒํฐ ์ํ๊ฐ ๋๋ฒ๋ ค์ ํ๋ก์ ํธ๋ฅผ ๋ฆฌ์ ํ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํด์ผ ํ ๊น ๊ณ ๋ฏผํ๊ธฐ๋ ํ๋ค.
์ด๋ฌํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ ๋ํฐ์ ์ด๋ฒคํธ ์์คํ ์ด๋ค. ์ด๋ฒคํธ ์์คํ ์ ํ์ฉํ๋ฉด ๊ฐ์ฒด ๊ฐ ์ง์ ์ ์ธ ์ฐธ์กฐ๋ฅผ ์ต์ํํ๋ฉด์๋ ์ํธ์์ฉ์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์ ๋ํฐ ์ด๋ฒคํธ ์์คํ ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค:
- UnityEvent (์ธ์คํํฐ ๊ธฐ๋ฐ): ์ ๋ํฐ ์๋ํฐ ๋ด ์ธ์คํํฐ ์ฐฝ์์ ๊ฐ๋จํ๊ฒ ์ฐ๊ฒฐํ ์ ์๋ ์ด๋ฒคํธ ์์คํ ์ด๋ค.
- C# Delegate์ Event (์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ): ์คํฌ๋ฆฝํธ ๋ด์์ ์ฝ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ ์์คํ ์ด๋ค.
2. ์ ๋ํฐ ์ด๋ฒคํธ ์์คํ ์ ํ์ฉํ ์ฐธ์กฐ ๋ฌธ์ ํด๊ฒฐ
UnityEvent๋ ์ธ์คํํฐ ์ฐฝ์ ํตํด ์ด๋ฒคํธ๋ฅผ ์์ฝ๊ฒ ์ค์ ํ ์ ์์ด, ๊ฐ๋จํ ์ํธ์์ฉ ๊ตฌํ์ ์ ๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ์ด์ด๊ฐ ์ ์ ์ฒ์นํ์ ๋ ์ ์ UI๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ก์ง์ UnityEvent๋ก ๊ตฌํํ ์ ์๋ค.
using UnityEngine;
using UnityEngine.Events;
public class Enemy : MonoBehaviour
{
public UnityEvent OnEnemyDefeated;
public void Defeat()
{
OnEnemyDefeated.Invoke();
Destroy(gameObject);
}
}
์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ ์บ๋ฆญํฐ์ ๋ถ์ด๊ณ , ์ธ์คํํฐ์์ OnEnemyDefeated ์ด๋ฒคํธ์ ์ ์ ์ฆ๊ฐ ํจ์๋ฅผ ์ฐ๊ฒฐํ๋ฉด, ๋ณ๋์ ์ฝ๋ ์์ ์์ด ์ ์ ์์คํ ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
3. Delegate์ Event๋ฅผ ํ์ฉํ ์ฐธ์กฐ ๋ฌธ์ ํด๊ฒฐ ์ฌ๋ก
Delegate์ Event๋ ๋ณต์กํ ๋ก์ง์ด๋ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์๊ตฌ๋๋ ์ํฉ์์ ํนํ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ์ด์ด๊ฐ ์ ์๊ฒ ๊ณต๊ฒฉ์ ๊ฐํ ๋ ์ ์ ์์คํ ์ด ์ค์๊ฐ์ผ๋ก ์ ์๋ฅผ ๋ฐ์ํ๋๋ก ๊ตฌํํ ์ ์๋ค.
using UnityEngine;
public class PlayerAttack : MonoBehaviour
{
public delegate void ScoreEvent(int scoreDelta);
public static event ScoreEvent OnScoreGained;
public void AttackEnemy(Enemy enemy)
{
enemy.Defeat();
OnScoreGained?.Invoke(100);
}
}
public class ScoreManager : MonoBehaviour
{
int currentScore = 0;
void OnEnable()
{
PlayerAttack.OnScoreGained += AddScore;
}
void OnDisable()
{
PlayerAttack.OnScoreGained -= AddScore;
}
void AddScore(int scoreDelta)
{
currentScore += scoreDelta;
Debug.Log("ํ์ฌ ์ ์: " + currentScore);
}
}
์ด์ ๊ฐ์ด ๊ตฌํํ๋ฉด ScoreManager๋ PlayerAttack์ ์ง์ ์ฐธ์กฐํ์ง ์๊ณ ๋ ์ด๋ฒคํธ๋ฅผ ํตํด ์ ์ ์ ๋ฐ์ดํธ๋ฅผ ์์ ํ ์ ์๋ค. ์ด๋ ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ๋ค์ํ ๊ณณ์์ ์ ์ ์์คํ ์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
4. ์ ๋ํฐ ์ด๋ฒคํธ ์์คํ ์ ์ฐ๋ฉด ์ข์ ์
- ๊ฐ์ฒด ๊ฐ ์ง์ ์ฐธ์กฐ ์ต์ํ๋ก ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค.
- ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ ธ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
- ๋ณต์กํ ๊ฐ์ฒด ๊ฐ ์ํธ์์ฉ ๋ก์ง์ ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
์ ๋ํฐ ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฐ์ฒด ์ฐธ์กฐ๋ก ์ธํ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ค๋ฉด ์ด๋ฒคํธ ์์คํ ์ ํ์ฉํด๋ณด๋ฉด ์ข์ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ๋ ์ ์์ ๊ฒ์ด๋ค.
'Life is Game๐ฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ํจํด (0) | 2025.03.16 |
---|---|
์ ๋ํฐ ์์ง Flythrough ๋ชจ๋๊ฐ ๊ฐ์๊ธฐ ์คํ๋์ง ์์ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2025.01.18 |
๊ฒ์ ์์ง ์ํคํ ์ฒ ๊ฐ์ (0) | 2025.01.12 |
<์ธ๋ฆฌ์ผ ์์ง 5.5 ์ถ์ ์จ๋น๋: ํ๋ก๊ทธ๋๋ฐ ํธโ > (3) | 2024.11.26 |
(๋ฉํฐ๋ฅผ ์ํ) ๊ฒ์ ๊ธฐํ ๊ธธ๋ผ์ก์ด (0) | 2024.11.06 |