๐ŸŽฎ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Prison Life๋Š” ๊ด‘์„ ์ฑ„๊ตด๋ถ€ํ„ฐ ์ˆ˜๊ฐ์ž ์ˆ˜์šฉ๊นŒ์ง€ ์ž๋™ํ™”๋˜๋Š” Ad_Dev ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ์Šˆํผ์„ผํŠธ Ad-Dev ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž(์ธํ„ด) ์ฑ„์šฉ ๊ณผ์ œ๋กœ 1์ฃผ์ผ ์•ˆ์— ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ: Unity 2022.3 LTS (PC)

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: ์•ฝ 1์ฃผ์ผ

ํŒ€ ๊ตฌ์„ฑ: 1์ธ ๊ฐœ๋ฐœ

๐Ÿ“น ํฌํŠธํด๋ฆฌ์˜ค ์˜์ƒ : https://youtu.be/eDnIBZUNspc

๐Ÿ”— GitHub : https://github.com/SongJiUk/AssignmentGame


๐Ÿ”„ ๊ฒŒ์ž„ ํ”Œ๋กœ์šฐ

๊ด‘๋ถ€๊ฐ€ ๊ด‘์„์„ ์ฑ„๊ตด โ†’ ๊ด‘์„์„ ์ˆ˜๊ฐ‘์œผ๋กœ ์ œ์ž‘ โ†’ ๊ฐ„๋ถ€๊ฐ€ ์ˆ˜๊ฐ‘์„ ์ˆ˜๊ฐ์ž ๊ตฌ์—ญ์œผ๋กœ ์šฐ๋ฐ˜ โ†’ ์ˆ˜๊ฐ์ž ์ˆ˜์šฉ์œผ๋กœ ์ˆ˜์ž… ๋ฐœ์ƒ โ†’ ๋ฌด๊ธฐ ์—…๊ทธ๋ ˆ์ด๋“œ / ๊ด‘๋ถ€ยท๊ฐ„๋ถ€ ๊ณ ์šฉ์œผ๋กœ ์ž๋™ํ™” ํ™•์žฅ โ†’ ๊ฐ์˜ฅ ์ •์›์ด ๊ฐ€๋“ ์ฐผ ๋•Œ ๊ฐ์˜ฅ ์—…๊ทธ๋ ˆ์ด๋“œ (์ˆ˜์šฉ ์ธ์› ์ฆ๊ฐ€)


โš™๏ธ ํ•ต์‹ฌ ์‹œ์Šคํ…œ

1. UniTask ๊ธฐ๋ฐ˜ NPC ์ž๋™ํ™” ๋ฃจํ”„

๊ฐ„๋ถ€(Jailer)๋Š” ์ˆ˜๊ฐ‘์ด ์Œ“์ผ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ โ†’ ์ˆ˜๊ฐ์ž ๊ตฌ์—ญ์œผ๋กœ ์ด๋™ โ†’ ์ „๋‹ฌ ์™„๋ฃŒ ํ›„ ๋ฐ˜๋ณต. ์ฝ”๋ฃจํ‹ด ์—†์ด UniTask async/await ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

async UniTaskVoid AsyncWalkJailer()
{
    while (true)
    {
        if (handCuffStack.Count == 0)
        {
            await AsyncMoveToPosition(handCuffZone.transform.position);
            await UniTask.WaitUntil(() => handCuffStack.Count >= HandCuffLine);
        }

        await AsyncMoveToPosition(prisonerZone.transform.position);
        await UniTask.WaitUntil(() => handCuffStack.Count == 0);
        await UniTask.WaitUntil(() => prisonerZone.HandCuffCount == 0);
    }
}

2. IHandCuff ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ์ˆ˜๊ฐ‘ ์ „๋‹ฌ

์ˆ˜๊ฐ‘์„ ์ฃผ๋Š” ์ชฝ(IHandCuffGiver)๊ณผ ๋ฐ›๋Š” ์ชฝ(IHandCuffReceiver)์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค.

public interface IHandCuffGiver
{
    void GiveHandCuff(IHandCuffReceiver receiver);
}

public interface IHandCuffReceiver
{
    void ReceiveHandCuff(int amount);
}

3. DOTween ์Šคํฐ ์—ฐ์ถœ