๋ฐ˜์‘ํ˜•

๐Ÿง  Unity ๋””์ž์ธ ํŒจํ„ด - ์ „๋žต(Strategy) ํŒจํ„ด

1. ์ „๋žต ํŒจํ„ด์ด๋ž€?

์ „๋žต(Strategy) ํŒจํ„ด์€ ํ–‰๋™(์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ, ๋Ÿฐํƒ€์ž„์— ์ž์œ ๋กญ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

"๋™์ผํ•œ ํ–‰๋™ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ"์ž…๋‹ˆ๋‹ค.

๊ฒŒ์ž„์—์„œ๋Š” ์ฃผ๋กœ ๊ณต๊ฒฉ ๋ฐฉ์‹, ์ด๋™ ๋ฐฉ์‹, ์Šคํ‚ฌ ์‚ฌ์šฉ ๋ฐฉ์‹ ๋“ฑ์— ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.


2. ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?

  • ์บ๋ฆญํ„ฐ์˜ ์Šคํ‚ฌ/๊ณต๊ฒฉ ๋ฐฉ์‹์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฐ”๋€Œ์–ด์•ผ ํ•  ๋•Œ
  • AI์˜ ํ–‰๋™ ๋ฐฉ์‹, ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ
  • if๋‚˜ switch ๋ฌธ์œผ๋กœ ์ „๋žต ๋ถ„๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ์„ ๋•Œ → ๋ฆฌํŒฉํ† ๋ง ์‹œ ํšจ๊ณผ์ 

3. ๊ตฌ์กฐ ๊ตฌ์„ฑ์š”์†Œ

์—ญํ•  ์„ค๋ช…
ISkillStrategy ์ „๋žต(์•Œ๊ณ ๋ฆฌ์ฆ˜) ์ธํ„ฐํŽ˜์ด์Šค
FireSkill, IceSkill ๋“ฑ ์‹ค์ œ ์ „๋žต์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค
Player ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…์ŠคํŠธ ์—ญํ• 

4. Unity ์˜ˆ์ œ: ํ”Œ๋ ˆ์ด์–ด ์Šคํ‚ฌ ์‹œ์Šคํ…œ

๐Ÿ“ฆ Step 1: ์ „๋žต ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

public interface ISkillStrategy
{
    void Use(GameObject caster);
}

๐Ÿ”ฅ Step 2: ๋‹ค์–‘ํ•œ ์Šคํ‚ฌ ์ „๋žต๋“ค

using UnityEngine;

public class FireSkill : ISkillStrategy
{
    public void Use(GameObject caster)
    {
        Debug.Log("๐Ÿ”ฅ ํŒŒ์ด์–ด๋ณผ ๋ฐœ์‚ฌ!");
    }
}

public class IceSkill : ISkillStrategy
{
    public void Use(GameObject caster)
    {
        Debug.Log("โ„๏ธ ์•„์ด์Šค ์Šคํ†ฐ ์‹œ์ „!");
    }
}

public class HealSkill : ISkillStrategy
{
    public void Use(GameObject caster)
    {
        Debug.Log("๐Ÿ’š ํž๋ง ์‹œ์ „! HP +30");
    }
}

๐Ÿง Step 3: ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด

using UnityEngine;

public class Player : MonoBehaviour
{
    private ISkillStrategy currentSkill;

    public void SetSkill(ISkillStrategy skill)
    {
        currentSkill = skill;
    }

    public void UseSkill()
    {
        if (currentSkill != null)
            currentSkill.Use(gameObject);
        else
            Debug.Log("์Šคํ‚ฌ์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.");
    }
}

๐Ÿ•น๏ธ Step 4: ์ „๋žต ์ „ํ™˜ ์˜ˆ์‹œ

public class GameManager : MonoBehaviour
{
    public Player player;

    void Start()
    {
        player.SetSkill(new FireSkill());
        player.UseSkill(); // ๐Ÿ”ฅ

        player.SetSkill(new IceSkill());
        player.UseSkill(); // โ„๏ธ

        player.SetSkill(new HealSkill());
        player.UseSkill(); // ๐Ÿ’š
    }
}

5. ์ •๋ฆฌ ๋ฐ ์žฅ๋‹จ์ 

โœ… ์žฅ์ 

  • if/switch ๋ถ„๊ธฐ ์—†์ด ๋™์ž‘์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Œ
  • ์ „๋žต์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„/์œ ์ง€/ํ™•์žฅ ๊ฐ€๋Šฅ
  • ๋Ÿฐํƒ€์ž„์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•จ

โŒ ๋‹จ์ 

  • ํด๋ž˜์Šค ์ˆ˜ ์ฆ๊ฐ€
  • ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„ ํ•„์š”

โœ… ๋งˆ๋ฌด๋ฆฌ ํ•œ ์ค„ ์š”์•ฝ

์ „๋žต ํŒจํ„ด์€ **"์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ• ์ง€๋ฅผ ๋‚˜์ค‘์— ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„"**๋กœ, ์บ๋ฆญํ„ฐ ์Šคํ‚ฌ, AI ์ „๋žต, UI ์ „ํ™˜ ๋ฐฉ์‹ ๋“ฑ์—์„œ ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•