๋ฐ‘์— ์งˆ๋ฌธ๊ธ€์— ๋Œ€ํ•œ ๋‹ต.

https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=112646&page=1

์งˆ๋ฌธ์ž์˜ ์งˆ๋ฌธ

-> ์บ๋ฆญํ„ฐ๊ฐ€ ํ”ผ๊ฒฉ ๋‹นํ–ˆ์„ ๋•Œ ์ •ํ•ด์ง„ ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜?

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋‚œ ๋Œ€๋ถ€๋ถ„ ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์•ผ๋งค ์Šคํ…Œ์ดํŠธ ํŒจํ„ด์„ ์”€.


๊ทผ๋ฐ ๋ฏธ์•ˆ, ํ•ด๋ณด๊ณ  ๋‚˜๋‹ˆ๊นŒ ์งˆ๋ฌธ์— ๋‹ต์ด ์•„๋‹Œ๊ฑฐ ๊ฐ™์Œ ใ…‡ใ…‡;;

์ผ๋‹จ ์“ด๊ฒŒ ์•„๊นŒ์›Œ์„œ ๊ธ€์€ ์Œˆ ใ…Žใ…Ž



public class Test : MonoBehaviour
{
private enum EHitStates { Idle, Start, PlayEffects, Blink, Damage, Stop }
private EHitStates _currState;
public void Hit()
{
StartHitProcess();
}
private void StartHitProcess()
{
_currState = EHitStates.Start;
}
private void Update()
{
switch (_currState)
{
case EHitStates.Idle:
break;
case EHitStates.Start:
CaseStart();
break;
case EHitStates.PlayEffects:
CasePlayEffects();
break;
case EHitStates.Blink:
CaseBlink();
break;
case EHitStates.Damage:
CaseDamage();
break;
case EHitStates.Stop:
CaseStop();
break;
}
}
private void CaseStart()
{
// ์„ค์ • ์ดˆ๊ธฐํ™”.
// ์ดˆ๊ธฐํ™” ํ›„์— ์ดํŽ™ํŠธ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋‹ค์Œ ์Šคํ…Œ์ดํŠธ๋กœ ๋„˜์–ด๊ฐ.
PlayEffect();
_currState = EHitStates.PlayEffects;
}
private void CasePlayEffects()
{
// ์ดํŽ™ํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š”๊ฑธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์Šคํ…Œ์ดํŠธ
// ์ดํŽ™ํŠธ ์ข…๋ฃŒ ์‹œ๊ทธ๋„์€ ์ฝœ๋ฐฑ์œผ๋กœ ํ•ด๋„ ๋˜๊ณ , ๋ถˆ๋ฆฌ์•ˆ๋„ ๋˜๊ณ , ํƒ€์ด๋จธ๋„ ๋˜๊ณ  ํŽธํ•œ๊ฑฐ ์„ ํƒ
// ์ดํŽ™ํŠธ ์ข…๋ฃŒํ•˜๋ฉด ๋ธ”๋งํฌ ์ž‘๋™์‹œํ‚ค๊ณ  ๋‹ค์Œ ์Šคํ…Œ์ดํŠธ๋กœ ์ด๋™.
if (isEffectDone)
{
BlinkStart();
_currState = EHitStates.Blink;
}
}
private void CaseBlink()
{
// ๋ธ”๋งํฌ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š”๊ฑธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์Šคํ…Œ์ดํŠธ. ์ดํŽ™ํŠธ ์Šคํ…Œ์ดํŠธ์™€ ๋™์ผ.
// ์ข…๋ฃŒ์‹œ ๋‹ค์Œ ์Šคํ…Œ์ดํŠธ๋กœ
if (isBlinkDone)
{
ApplyDamage();
_currState = EHitStates.Damage;
}
}
private void CaseDamage()
{
// ์ด๊ฑด ์—†์–ด๋„ ๋ ๋“ฏ?
}
private void CaseStop()
{
// ์ดˆ๊ธฐํ™”
_currState = EHitStates.Idle;
}
}