๐Ÿ•น ํƒ€์ดํ‹€ : The Fins
๐Ÿ•น ์žฅ๋ฅด : 2D์ „๋žต๋””ํŽœ์Šค
๐Ÿ•น ํ”Œ๋žซํผ : PC
๐Ÿ•น ๊ฐœ๋ฐœ๊ธฐ๊ฐ„ : 2019.06 ~ 2019.09
๐Ÿ•น ๊ฐœ๋ฐœ์ธ์› : 3๋ช… ( ํ”„๋กœ๊ทธ๋ž˜๋จธ, ๋””์ž์ด๋„ˆ, ๊ธฐํš์ž)
๐Ÿ•น ํ”Œ๋ ˆ์ดํƒ€์ž„ : 1~2์‹œ๊ฐ„
๐Ÿ•น ์‚ฌ์šฉ ํˆด : Unity


๐Ÿ”ธ ํ”Œ๋ ˆ์ด ์˜์ƒ

๐Ÿ”ธ ์Šคํฌ๋ฆฐ ์ƒท

first second third fourth fifth sixth


๐Ÿ”ธ ๊ฒŒ์ž„ ์„ค๋ช…

first

์นœ๊ตฌ์˜ ์ƒ์ผ์„ ๋ฌผ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ํ”„๋กœ์ ํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ PROJECT-AํŒ€์˜ ๋‘๋ฒˆ์งธ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.
์ฟผํ„ฐ๋ทฐ ์‹œ์ ์˜ ์ „๋žต ๋””ํŽœ์Šค๊ฒŒ์ž„์œผ๋กœ, ํ•ด์–‘์ƒ๋ฌผ๋“ค์„ ์†Œํ™˜ํ•˜์—ฌ ์‚ฌ๋ฐฉ์—์„œ ์Ÿ์•„์ ธ์˜ค๋Š” ์ ๋“ค๋กœ๋ถ€ํ„ฐ ๊ธฐ์ง€๋ฅผ ๋ฐฉ์–ดํ•˜๋ฉด์„œ ๊ณต๊ฒฉ์„ ๋šซ๊ณ  ๋‚˜์•„๊ฐ€ ์ ์˜ ๊ธฐ์ง€๋ฅผ ๋ชจ๋‘ ํŒŒ๊ดดํ•˜๋ฉด ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

โ€˜์กฐ๊ฐœโ€™๋ผ๋Š” ์ž์›์„ ์†Œ๋ชจํ•˜์—ฌ ์œ ๋‹›์„ ์•„๊ตฐ์˜ ๊ธฐ์ง€ ์ธ๊ทผ์˜ ์ง€์ •ํ•œ ์œ„์น˜์— ์†Œํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์†Œํ™˜ ์ดํ›„์—๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์กฐ์ž‘ ํ•  ์ˆ˜ ์—†๊ณ  ๋‹จ์ง€ Ai์— ๋”ฐ๋ผ์„œ ์ด๋™,๊ณต๊ฒฉ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ์œ ๋‹›์„ ์–ด๋Š ์œ„์น˜์— ์–ธ์ œ ์†Œํ™˜ํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•œ ์ „๋žต์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œํ™˜์— ํ•„์š”ํ•œ ์ž์›์ธ โ€˜์กฐ๊ฐœโ€™๋Š” ์‹œ๊ฐ„์ด ํ๋ฅด๋ฉด์„œ ์ž๋™ ํš๋“ํ•˜๋ฉฐ R๋ฒ„ํŠผ์„ ํ†ตํ•ด 1์ดˆ๋‹น ์กฐ๊ฐœ ํš๋“๋Ÿ‰์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ๊ณต๋žต๋ฐฉ๋ฒ•์„ ์š”๊ตฌํ•˜๋Š” ์ด 10๊ฐœ์˜ ์Šคํ…Œ์ด์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ—ผ ํ•ด์–‘์ƒ๋ฌผ ์œ ๋‹›

first

  • 6์ข…๋ฅ˜์˜ ์•„๊ตฐ ์œ ๋‹›์ด ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ณต๊ฒฉ๋ฐฉ์‹์„ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์  ๋˜ํ•œ 4์ข…๋ฅ˜์˜ ์œ ๋‹›์ด ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ ๊ณต๊ฒฉ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • ์œ ๋‹›๋“ค์€ ๋Œ€๋žต์ ์ธ ์ƒ์„ฑ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์„ ์ƒ๋Œ€ํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ๋ณ‘๋ ฅ์„ ์šด์šฉํ•˜๋Š”๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

  • ๊ฐ ์œ ๋‹›์€ base ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์—ฌ ๋™์ผํ•œ Ai๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต๊ฒฉ๋ฐฉ์‹์€ ๊ฐ€์ƒํ•จ์ˆ˜์™€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
//base ํด๋ž˜์Šค์˜ Attack ํ•จ์ˆ˜ 
protected virtual void Attack()
{
    if(attackCooldown) return; //๊ณต๊ฒฉ ์ฟจํƒ€์ž„์ด๋ฉด ๊ณต๊ฒฉ๋ถˆ๊ฐ€
    attackCooldown = true;
    ai.maxSpeed = MoveSpeed * 0.1f; //๊ณต๊ฒฉ ์ค‘ ์ด๋™์†๋„ ๊ฐ์†Œ

    if(des.target == null) 
      SetState(unitState.move); //ํƒ€๊ฒŸ์ด ์—†์œผ๋ฉด ์ด๋™ ์ƒํƒœ๋กœ ์ „์ด
    else
    {
      if(StateCheck(unitState.attack))
          Hit(des.target); //๊ณต๊ฒฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ผ ๊ฒฝ์šฐ ๊ณต๊ฒฉ
    }    
    Invoke("setCooldown",AttackSpeed * Random.Range(0.9f,1.1f));
    //๊ณต๊ฒฉ ์ฟจํƒ€์ž„ ์„ค์ • 
}

โ”” ์œ ๋‹›๋“ค์˜ ๊ณตํ†ต baseํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” Attackํ•จ์ˆ˜. virtual ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ๊ณ , ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ ‘๊ทผํ•˜์—ฌ ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทผ์ ‘ํ•˜์—ฌ ๊ณต๊ฒฉํ•˜๋Š” ์œ ๋‹›์˜ ๊ฒฝ์šฐ ์ด ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

//baseํด๋ž˜์Šค์˜ Attack ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•œ ์œ ๋‹›์˜ Attackํ•จ์ˆ˜
protected override void Attack()
{
    if (attackCooldown) return; //๊ณต๊ฒฉ ์ฟจํƒ€์ž„์ด๋ฉด ๊ณต๊ฒฉ๋ถˆ๊ฐ€
    attackCooldown = true;

    if(des.target == null) 
        SetState(unitState.move); //ํƒ€๊ฒŸ์ด ์—†์œผ๋ฉด ์ด๋™ ์ƒํƒœ๋กœ ์ „์ด
    else
    {
        if(StateCheck(unitState.attack))
        {
            //๋ฒ”์œ„๊ณต๊ฒฉ์˜ ๋ฒ”์œ„ ๋‚ด ๋ชจ๋“  ์ ์—๊ฒŒ ๊ณต๊ฒฉ 
            around = Physics2D.OverlapCircleAll(transform.position,AttackRange,1 <<LayerMask.NameToLayer("Enemy"));
            for (int i = 0; i < around.Length; i++)
            {
                if(around[i].gameObject.layer == 10) //layer 10 : enemy 
                {
                    effect.SetTrigger("isAttack");
                    Hit(around[i].transform);
                    around[i].GetComponent<UnitBase>().SetState(unitState.stun);
                }
            }
        }
    }    
    Invoke("setCooldown",AttackSpeed);
}

โ”” ๋ฒ”์œ„ ๊ณต๊ฒฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ๋‹›์˜ ๊ฒฝ์šฐ baseํด๋ž˜์Šค์˜ Attackํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์ƒˆ ๋กœ์ง์„ ์ ์šฉํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ์›๊ฑฐ๋ฆฌ ๊ณต๊ฒฉ์— ํˆฌ์‚ฌ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ ๋‹›๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์‚ฌ์šฉํ•ด ๊ฐ™์€ Attack ํ•จ์ˆ˜๋‚ด์—์„œ ํˆฌ์‚ฌ์ฒด๋ฅผ ๋˜์ง€๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


โ—ผ ์œ ๋‹›์˜ AI

๊ฐ ์œ ๋‹›์€ ๊ณตํ†ต๋œ base ํด๋ž˜์Šค์˜ FSM(finite state machine)์— ๋”ฐ๋ผ ํ–‰๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ์†Œํ™˜ :
    • ์†Œํ™˜๋œ ์œ ๋‹›์€ ์ฆ‰์‹œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์  ๊ธฐ์ง€๋ฅผ ๊ณต๊ฒฉ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์ด๋™์„ ๊ฐœ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ์†Œํ™˜ ์งํ›„์—๋Š” ๊ณต๊ฒฉ ์žฌ์‚ฌ์šฉ ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ์ด๋™ :
    • ๊ณต๊ฒฉ ๋Œ€์ƒ์„ ํ–ฅํ•ด ์ด๋™ํ•˜๋ฉฐ ์ง€์ •๋œ ํƒ์ง€๋ฒ”์œ„ ๋‚ด์— ์  ์œ ๋‹›์ด ๋“ค์–ด์˜ค๋ฉด ๊ณต๊ฒฉ๋Œ€์ƒ์„ ์  ์œ ๋‹›์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋Œ€์ƒ์„ ํ–ฅํ•ด ์ด๋™๊ฒฝ๋กœ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์œ ๋‹›์˜ ์ด๋™์€ A*๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์  ์œ ๋‹›์ด ์ง€์ •๋œ ๊ณต๊ฒฉ๋ฒ”์œ„ ๋‚ด์— ๋“ค์–ด์˜ค๋ฉด, ๊ณต๊ฒฉ์„ ๊ฐœ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค๋ฅธ ์•„๊ตฐ ์œ ๋‹›์€ ์žฅ์• ๋ฌผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0.2์ดˆ๋งˆ๋‹ค ๊ฒฝ๋กœ๋ฅผ ๊ฐฑ์‹ ํ•˜์—ฌ ๋‹ค๋ฅธ ์œ ๋‹›์„ ํ”ผํ•ด๊ฐ‘๋‹ˆ๋‹ค.
  • ๊ณต๊ฒฉ :
    • ๊ณต๊ฒฉ๋Œ€์ƒ์ด ๊ณต๊ฒฉ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋ฉด, ์ด๋™์†๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์ฆ‰์‹œ ๊ณต๊ฒฉํ•˜์—ฌ ํ”ผํ•ด๋ฅผ ์ž…ํžŒ ํ›„ ๊ณต๊ฒฉ ์žฌ์‚ฌ์šฉ ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๊ฐ ์œ ๋‹›๋ณ„๋กœ ์žฌ์‚ฌ์šฉ ๋Œ€๊ธฐ์‹œ๊ฐ„์€ ๋‹ค๋ฅด๋ฉฐ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณต๊ฒฉ๋Œ€์ƒ์ด ์‚ด์•„์žˆ๋Š” ํ•œ ์ง€์†ํ•˜์—ฌ ๊ณต๊ฒฉ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณต๊ฒฉ๋Œ€์ƒ์ด ์‚ฌ๋ผ์กŒ๋‹ค๋ฉด ๋‹ค์‹œ ์ด๋™ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • ์ฃฝ์Œ :
    • ์œ ๋‹›์˜ ์ฒด๋ ฅ์ด ๋‹คํ•˜๋ฉด ์ฃฝ์Œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ํ•จ๊ป˜ ์†Œ๋ฉธํ•ฉ๋‹ˆ๋‹ค.


first
< ํ…Œ์ŠคํŠธ ๋ฒ„์ „์˜ ์œ ๋‹› AI ์ž‘๋™ ๋ชจ์Šต >
< ์ด๋™๊ฒฝ๋กœ(์ดˆ๋ก์‹ค์„ ) / ํƒ์ง€๋ฒ”์œ„(ํŒŒ๋ž€ ์›) / ๊ณต๊ฒฉ๋ฒ”์œ„(๋นจ๊ฐ„ ์›) >


โ—ผ ๋ ˆ๋ฒจ ๋””์ž์ธ ํˆด

first

์œ ๋‹ˆํ‹ฐ์˜ custom inspector๋ฅผ ์ด์šฉํ•ด ์Šคํ…Œ์ด์ง€๋ฅผ ์ œ์ž‘ํ•˜๋Š” ํˆด์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์Šคํ…Œ์ด์ง€ ๋ ˆ๋ฒจ ๋””์ž์ธ์€ ์ € ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋””์ž์ด๋„ˆ์™€ ๊ธฐํš์ž ๋ชจ๋‘ ์ฐธ์—ฌํ–ˆ๊ณ  ์ˆ˜์‹œ๋กœ ์ˆ˜์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผ ํ–ˆ๊ธฐ์— ์‰ฝ๊ฒŒ ๋ ˆ๋ฒจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ ๋‹ˆํ‹ฐ ์—”์ง„ ๋‚ด์—์„œ ๋ฏธ์…˜ ์ข…๋ฅ˜๋ถ€ํ„ฐ ์›จ์ด๋ธŒ ์„ค์ •๊นŒ์ง€ ์Šคํ…Œ์ด์ง€์— ๊ด€ํ•œ ๋ชจ๋“  ๊ฒƒ๋“ค ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ ˆ๋ฒจ ๋””์ž์ธ ํˆด ๋•์— ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์Šคํ…Œ์ด์ง€๋ณ„๋กœ ์‰ฝ๊ฒŒ ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด์„œ ๊ฐœ๋ฐœ์— ์†๋„๊ฐ€ ๋ถ™์—ˆ์Šต๋‹ˆ๋‹ค.

โ—ผ ๋ฏธ๋‹ˆ๋งต

๊ฒŒ์ž„ ํ™”๋ฉด์˜ ์šฐ์ธก ์ƒ๋‹จ์— ๋งต ์ „์ฒด๋ฅผ ์•„์ด์ฝ˜์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฏธ๋‹ˆ๋งต์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ์นด๋ฉ”๋ผ ์™ธ์— ์นด๋ฉ”๋ผ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•œ๋Œ€ ๋” ๋‘์–ด ๋งต ์ „์ฒด๋ฅผ ๋น„์ถ”๋„๋ก ํ•œ ํ›„, ์œ ๋‹›๊ณผ ๊ธฐ์ง€์— ๋ฏธ๋ฆฌ ๋„ฃ์–ด๋‘” ์•„์ด์ฝ˜๋งŒ ์นด๋ฉ”๋ผ์— ๋ Œ๋”๋ง ๋˜๋„๋ก culling mask์™€ render texture๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฏธ๋‹ˆ๋งต์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฏธ๋‹ˆ๋งต์˜ ํŠน์ • ์œ„์น˜๋ฅผ ๋งˆ์šฐ์Šค๋กœ ํด๋ฆญํ•˜๋ฉด ์‹ค์ œ ๋งต์—์„œ์˜ ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ—ผ ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง

์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ˆ˜์‹ญ๊ฐœ์—์„œ ์ˆ˜๋ฐฑ๊ฐœ๊นŒ์ง€ ํ•˜๋‚˜์˜ ํ™”๋ฉด์—์„œ ๋“ฑ์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํผํฌ๋จผ์Šค ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. PC์—์„œ ๊ตฌ๋™๋˜๋Š” ๊ฒŒ์ž„์ด๋ผ ๋ชจ๋ฐ”์ผ๋งŒํผ ์‚ฌ์–‘์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์—ˆ์œผ๋‚˜ ๋งค๋ฒˆ ์ˆ˜์‹ญ๊ฐœ์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ-์†Œ๋ฉธ๋˜๋ฉด C#์˜ Garbage Collection์ด ์ž‘๋™ํ•˜๋ฉฐ ์ˆœ๊ฐ„์ ์ธ ํ”„๋ ˆ์ž„ ๋“œ๋ž์ด ๋ฐœ์ƒํ• ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์œ ๋‹›๋“ค์€ ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ์”ฌ์ด ๋กœ๋“œ๋  ๋•Œ ๋งŽ์€ ์ˆ˜์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฏธ๋ฆฌ ํ’€์— ์ƒ์„ฑํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ๋‹›์„ ์†Œํ™˜ํ•ด์•ผ ํ•  ๋•Œ ํ’€์—์„œ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ณ , ์œ ๋‹›์ด ์ฃฝ์œผ๋ฉด ํ’€๋กœ ๋˜๋Œ๋ ค์„œ ๋งค๋ฒˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ-์†Œ๋ฉธ๋˜๋Š”๋ฐ์„œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ธ ๊ฐœ๋ฐœ ์˜๋„

์™œ ํ•ด์–‘์ƒ๋ฌผ์ด ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ์ž„์ธ๊ฐ€? ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์ด ๊ฒŒ์ž„์„ ์ƒ์ผ์„ ๋ฌผ๋กœ ๋ฐ›์„ ์นœ๊ตฌ๊ฐ€ ํ•ด์–‘์—ฐ๊ตฌ์†Œ์˜ ์ง์›์ด์—ˆ๊ณ  ์นœ๊ตฌ์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค๐Ÿ˜ ๊ฐ€์žฅ ๋จผ์ € ํ…Œ๋งˆ๋ฅผ ํ•ด์–‘์ƒ๋ฌผ๋กœ ์ •ํ•œ ๋’ค์— ๋””ํŽœ์Šค ์ชฝ์œผ๋กœ ๊ฐ€๋‹ฅ์„ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐํš๋‹น์‹œ ๋„ํƒ€์˜ ์˜คํ† ์ฒด์Šค๋‚˜ ๋ฆฌ๊ทธ์˜ค๋ธŒ๋ ˆ์ „๋“œ์˜ ์ „๋žต์  ํŒ€ ์ „ํˆฌ(TFT)๋กœ ๋Œ€ํ‘œ๋˜๋Š” ์˜คํ† ๋ฐฐํ‹€๋Ÿฌ(auto battler)์žฅ๋ฅด๊ฐ€ ์ธ๊ธฐ๋ฅผ ๋Œ๊ธฐ ์‹œ์ž‘ํ•  ๋ฌด๋ ต์ด๋ผ, ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ „ํˆฌ ์ „์—๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐœ์ž…ํ•˜๋˜ ์ „ํˆฌ ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””ํŽœ์Šค ๋ฅ˜์˜ ๊ฒŒ์ž„์ด์ง€๋งŒ ๋‹จ์ˆœํžˆ ๋ง‰๊ธฐ๋งŒ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์  ๊ธฐ์ง€๊นŒ์ง€ ํŒŒ๊ดด๋ฅผ ํ•ด์•ผํ•˜๋Š” ๋ฐฉ์‹์„ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ์ด๊ฒƒ์ด ์ „๋žต์ ์ธ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด์„œ ๋‹ค๋ฅธ ๊ฒŒ์ž„๊ณผ์˜ ์ฐจ๋ณ„์ ์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ธ ๊ธ์ •์ ์ธ ๋ถ€๋ถ„

๋Š˜ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์Šค์Šค๋กœ์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์˜์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋Š” ์ข‹์€ ์ฝ”๋“œ์ผ๊นŒ? ๋‚จ๋“ค์ด ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ์ผ๊นŒ? ํ•˜๋Š” ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์กฐ๊ธˆ ํ•  ์ค„ ์•„๋Š” ๋””์ž์ด๋„ˆ์—๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‘์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉด์„œ ์˜์‹ฌ์ด ์กฐ๊ธˆ์€ ํ™•์‹ ์œผ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ค‘์ ์ ์œผ๋กœ ๊ณ ๋ฏผํ•˜๋Š” ๋ถ€๋ถ„์€ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค๐Ÿ‘ฉโ€๐Ÿ’ป

์•„์ง ๋ฐฐ์›Œ๋‚˜๊ฐ€๋Š” ๋‹จ๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์†๋„๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ํ•™๊ต๋‚˜ ์ธํ„ฐ๋„ท์—์„œ ๊ทธ๊ฐ„ ๋ฐฐ์›Œ์˜จ ์ง€์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋ ค๊ณ  ํ•˜๋Š” ํŽธ์ž…๋‹ˆ๋‹ค. Fins์—์„œ๋„ ํ•™์Šตํ–ˆ๋˜ ์˜ค๋ธŒ์ ํŠธํ’€๋ง์ด๋‚˜ ์ปค์Šคํ…€ ์ธ์ŠคํŽ™ํ„ฐ, A*๋ผ๋Š” ๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ์—ˆ๊ณ , ์‹ค์ œ๋กœ ๊ฒŒ์ž„์— ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค! ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ์ฆ๊ฒ์Šต๋‹ˆ๋‹ค๐Ÿ˜Š

๋˜ํ•œ ๋ ˆ๋ฒจ ๋””์ž์ธ ํˆด์„ ์ œ์ž‘ํ•˜๋ฉด์„œ ํƒ€์ธ์˜ ์ž‘์—…์„ ํŽธํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ณผ์ •๋„ ์ƒ๋‹นํžˆ ์žฌ๋ฏธ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ธ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„

์นœ๊ตฌ์—๊ฒŒ ์„ ๋ฌผ๋กœ ์ฃผ๊ธฐ ์œ„ํ•œ 1์ฐจ ๋นŒ๋“œ๋ฅผ ์™„์„ฑํ•œ ํ›„, ์ถ”๊ฐ€ ๊ฐœ๋ฐœ๋กœ ์œ ๋‹›๊ณผ ์Šคํ…Œ์ด์ง€ ์ถ”๊ฐ€, ์œ ๋‹› ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ์Šคํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํšŒ์˜๋ฅผ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ถ”๊ฐ€ ์œ ๋‹›์„ ๊ฐœ๋ฐœํ•˜๋˜ ์ค‘ ์„œ๋กœ์˜ ํ•™์—… ๋ฌธ์ œ๋กœ ์‹œ๊ฐ„์„ ๋‚ด๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž ์ • ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

(post-code: the-fins)

TOP