ํ์ฌ FSM์ ์ด๋ ๊ฒ ์กด์ฌํ๊ณ
์ผ๋จ ์ํ๋ณ๊ฒฝ ํจ์๋ ์ด๊ฑฐ์
์ ์ฝ๋๋ฅผ ์ง๋์ ์ํ์์ ์๋ ์ฝ๋์ฒ๋ผ ํด๋์ผ๋ฉด ์ด์ ์ฝ๋ฃจํด์ ์ค์ง๋๊ณ Attack ์ด๋ผ๋ ์ฝ๋ฃจํด์ด ์คํ๋๋๊ฑด์ค ์์๋๋ฐ
์ ์ ๋ ๊ฒ ํด๋ ์ฌ์ ํ ๋ค๋ฅธ ์ฝ๋ฃจํด๋ ๊ฐ์ด ์คํ๋๋๊ฑฐ์? Attack ์ฝ๋ฃจํด ํจ์์ ์ด๋๊ด๋ จ ์ฝ๋๋ฅผ 1๋ ์์ ์ด๋จ๊ณ ์ด๋๊ด๋ จ ์ฝ๋๋ค์ Idle๊ณผ Attack ์ ์ธ ์์ enum์ ์๋ ์ฝ๋ฃจํด ํจ์์๋ง ์กด์ฌํจ.
๋ถ๋ช ํ ์ ๋ ๊ฒ ํ๋ฉด ์ด์ ์ฝ๋ฃจํด์ ๋์ ์ค์ง๋๊ณ ํจ์ ์ธ์๋ก ์ ์ด๋์ ์ฝ๋ฃจํด์ด ์๋๋๋ค๊ณ ํ๋๋ฐ ์ ๋ ์ฌ์ ํ ๊ณต๊ฒฉํ๋ฉด์ ์ด๋ํ๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด... ์ ๊ฒ ์ ๋๋ก๋์ํ๋ค๋ฉด ๊ณต๊ฒฉํ ๋ ๋ฉ์ถ๊ณ ๊ณต๊ฒฉ์ด ๋๋ ํ ์์ง์ฌ์ผ ํ๋๋ฐ ๊ทธ๋ฅ ๋ฐ์ ๋ ๊ฐ๋ง๋ฅ ๊ณต๊ฒฉํ ๋๋ ๊ณ์ ๋ฌด๋น์นจ;;
์ฐธ๊ณ ๋ก ๊ฐ๊ฐ์ ์ํ๋ค์ if๋ฌธ์ผ๋ก ๋ค ๋ถ๋ฆฌํด๋์ ์ํ์
1. Coroutine yourCoroutine์ด๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด. 2. yourCoroutine = StartCorotouine(YourCoroutineFunction()); ๊ณผ ๊ฐ์ด ์คํํจ. 3. if (youCoroutine != null) {StopCoroutine(yourCoroutine)} ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ์ถค.
์คํ๊ฐ ์๋ค ๊ทธ๋๋ ์์์ ์์๋ณผ๊ฑฐ๋ผ ๋ฏฟ์
๊ทธ๊ฑด ์๋๋ฐ ๊ณ ๋ฐ์ฌ๋ ๊ทธ๋ ๊ณ ๊ณจ๋๋ฉํ์ธ๊ฐ? ์ด์ฌ๋๋ FSM ์ ์ฌ์ฉํ๋๊ฒ ์ข๋ค๊ณ ํ๋๋ผ๊ณ ... ๊ทธ๋ฆฌ๊ณ ์ ChangeState ์์ ์๋ StopCoroutine()๋ ๋ค๊ฐ ๋งํ๊ฑฐ๋ ๊ฐ์๊ธฐ๋ฅ๋ฌ์.
๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๋ค๊ฐ ๋งํ๊ฑฐ ํ์ฐธ์ ์ ์๋ํด๋ณธ๊ฑฐ์ ใ ใ
์๋ ๊ฑฐ... ๋ง์? ๋ค๊ฐ ์คํํ๋ ์ฝ๋ฃจํด์ ๊ธฐ์ตํด๋๋ผ๊ณ ๋ ๊ทธ ๊ณผ์ ์ด ์์๋
StopCoroutine(hellBotState.ToString()); hellBotState = newState; StartCoroutine(hellBotState.ToString());
์ด๊ฑฐ ์ ๋ณด์ ... ์ฒซ๋ฒ์งธ ์ฝ๋๊ฐ ํ์ฌ ์คํ์ค์ธ ์ฝ๋ฃจํด์ ์ ์ง์ํจ๊ฑฐ๊ณ ๋๋ฒ์งธ๋ ์ง๊ธ ๋ด๊ฐ ์คํ์ํฌ ์ฝ๋ฃจํด์ ๋ฃ์๊ฑฐ๊ณ ์ธ๋ฒ์งธ๊ฐ ๋ด๊ฐ ์คํ์ํฌ ์ฝ๋ฃจํด์ ๋ฃ์์ผ๋ ์ด์ ์คํ์ํค๋ ๋จ๊ณ
์ด์ ์ฝ๋ฃจํด๊ณผ ํ์ฌ ์คํํ ์ฝ๋ฃจํด์ ์ ๋ถ ์๊ณ ์๋ ์ํ์์.,..
์ผ๋จ ๊ทธ๋๋ ๋ต๊ธ ๋ฌ์์ค๊ฑด ใณใณ
docs ์ฝ์ด๋ณด๋๊น ๋ผ์ผํ๋ ๊ฒ ๊ฐ์๋ฐ, ์ฒ์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ์์ํ๋ค๊ฑฐ๋ ํ๋ ๊ฑฐ ์๋? ๋ ๋ฐฉ์์ ์์ง ๋ง๋ผ๋๋ผ ๋ ์ฌ๊ธฐ๊น์ง ๋ฌ๊ฒ ํ์ดํ ์ด์ผ
if(startedCoroutine!=null) StopCoroutine(startedCoroutine); hellBotState = newState; startedCoroutine = StartCoroutine(hellBotState.ToString());
๊ถ๊ธํ๊ฒ ์๋๋ฐ ์ด๊ฑฐ๋ ๋ด๊ฐ ์ฌ๋ฆฐ ์ฌ์ง์ ChangeState() ํจ์๋ ๋ค๋ฅธ๊ฒ ๋ญ์ผ?
if(startedCoroutine!=null) ์ด๋ if (hellBotState == newState) return; ๋ ๊ทธ๋ฅ ์กฐ๊ฑด๋ฌธ์ ์ฐธ ๊ฑฐ์ง๋ง ๋ค๋ฅด๊ณ ๋ ผ๋ฆฌ๋ ๊ฐ์๊ฑฐ ๊ฐ์์ ์ง๋ฌธํจ
์ฐจ์ด๊ฐ ์์ง. ๋ string์ ์ด์ฉํด์ ์ฝ๋ฃจํด์ ๋ฉ์ถ๋๊ฑฐ๊ณ , ๋ ์ฝ๋ฃจํด์ ์์ํ ๋ ๋ฐ์ Coroutine๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ ๋ฉ์ถ๋๊ฑฐ๊ณ . ๊ฐ๋ น IEnumerator Attack์ด๋ผ๋ ์ฝ๋ฃจํด์ StartCoroutine("Attack")์ผ๋ก ๋๋ฒ ์คํํ๋ฉด, ๋๊ฐ์ Attack์ฝ๋ฃจํด์ด ์๊น. ๊ทผ๋ฐ StopCoroutine("Attack")์ ํ๋ฉด ๊ทธ ๋๊ฐ์ค ์ด๋๊ฒ์ด ๋ฉ์ถ๊น? string์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ช ํํ์ง ์์ ์ํฉ์ด ๋ฐ์ํด์ ๋ณดํต string์ผ๋ก StartCoroutine ์ ์ํ๊ฒ ๋๊ณ StopCoroutine๋ ๋ง์ฐฌ๊ฐ์ง์. Coroutine๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ํ์คํ๊ฒ ๋ฉ์ถ์ ์์. ์ด๊ฒ ์๋๋ค๋ฉด ๋ค๋ฅธ ๋ถ๋ถ์ด ๋ฌธ์ ์ธ๊ฑฐ์
์ง๊ธ ๋ด๊ฐ ์ด ๋ด์ฉ์ ์์ ๋๊ธ๋จ ๋ถ์ด๋ ๊ฐ์ ์ด์ผ๊ธฐ์. ์ดํด๊ฐ ์๊ฐ๋ฉด ์ฝ๋ฃจํด์ ์ข ๋ ํ๋ด
๊ผญ ์ฝ๋ฃจํด์ ๋ณ์๋ก ๋ง๋ค์ด์ ์ ์ฅํ ํ์ Stopํด์ผ๋ง ํจ? ๋๋ ๋ณ์์ ์ฝ๋ฃจํด์ ํ ๋นํ ํ์ ๊ทธ ๋ณ์๋ฅผ StopCoroutine ํจ์์ ์ง์ด๋ฃ๋๊ฑด ์์... ๋ค๋ง ๊ทธ๋ฌ์ง ๋ง๊ณ ์ ๋ ๊ฒ ํจ์ ๋ง๋ค์ด์ ์ฐ๋ผ๊ณ ๊ณ ๋ฐ์ฌ๊ฐ Fps ๊ฐ์ํ ๋ ๋งํ๋๋ฐ ์๊ทธ๋ฐ๊ฑฐ์ผ?
๋ด๊ฐ ์๋ ์ ๋๊ธ๋ก ์ง๋ฌธํ์๋ ๋๋ค ๋๊ฐ์ด ๋์ํ๋ค๊ณ ๋ต๋ณ๋ฐ์์๊ฑฐ๋
๊ทธ๋ฆฌ๊ณ ์ฝ๋ฃจํด์ StartCoroutine("Attack")์ผ๋ก ๋๋ฒ ์คํํ๋ฉด, ๋๊ฐ์ Attack์ฝ๋ฃจํด์ด ์๊น. ๊ทผ๋ฐ StopCoroutine("Attack")์ ํ๋ฉด ๊ทธ ๋๊ฐ์ค ์ด๋๊ฒ์ด ๋ฉ์ถ๊น? ์ด๋ถ๋ถ์ if (hellBotState == newState) return; ์ด๊ฑธ๋ก ์ด๋ฏธ ํด๊ฒฐ๋์ง ์์?
๊ฐ์ ์ฝ๋ฃจํด์ด ์ฌ๋ฌ๋ฒ ์คํ๋๋๊ฑธ ๋ฐฉ์งํด์ฃผ๋๊ฑธ ์ด๋ฏธ ์ง๋จ์์
StopCoroutine("Attack")์ ํ๋ฉด ๋๊ฐ ์คํ๋ ๊ฑฐ ์ ๋ถ ๊บผ๋ฒ๋ฆผ. ์์งํ ์ฝ๋๋ง ๋ด๋ ๋ณ ๋ฌธ์ ์์ด๋ณด์ฌ. ๋จ์ง ์คํธ๋ง์ผ๋ก ํ๋๊ฑด ๋ณ๋ก ์ข์ง ์์์ ์ฒจ์ธ์ ํ๊ฑฐ๊ณ . ์ ์ฝ๋ฃจํด ๋ฌธ์ ๋ผ๊ธฐ ๋ณด๋จ ๋ฌธ์ ๋ ๋ค๋ฅธ์ชฝ์์ ๋ฐ์ํ์๊ฑฐ๊ฐ์๋ฐ, ์ ์ฝ๋๋ง ๋ณด๊ณ ๋ ํ์ ์ ํ ์๊ฐ ์๋ค
๊ธ์ฟ ๋ง... ์ผ๋จ ๋๋ ๋ ์ฐพ์๋ณผ๊ป ๋ญ๊ฐ๋๋ ๋ต ๋ฌ์์ค์ ์๋ ค์ค๊ฑด ์ง์ง ๊ณ ๋ง์
๋ค ์ฝ๋๋ ๋น์ทํ๊ฒ ์ง์ ํด๋ดค๋๋ฐ ๋ณ๋ฌธ์ ์์. ์๋ง๋จ
ในใ ? ๊ทธ๋ผ ๋ด์๊ฐ์ ๊ทธ๋ผ if๋ฌธ ๋ค๋ฅธ ์กฐ๊ฑด๋ฌธ์์ ๋ฒ๊ทธ๋๊ฒ ์ ์ฝ๋์๊น์ง ์ํฅ์ ๋ฏธ์น๊ฑฐ๊ฐ์๋ฐ... ๋ค๋ฅธ์ ๋ค๋ ์ฝ๋ ์์ฒด๋ ๋ฌธ์ ์์ด๋ณด์ธ๋ค ํ๋๊น ์ง์ง ๋ค๋ฅธ ์กฐ๊ฑด๋ฌธ์์ ์ถฉ๋๋์ ๊ทธ๋ฐ๊ฒ๊ฐ๊ธฐ๋ํ๋ค... ์ฝ๋๊ฐ ๋๋ฝ๊ฒ ๊ธธ์ด์ ํ๋ํ๋ ๋ค ๋ฐ์ ธ๋ณด๋ ค๋ฉด ์๊ฐ ๋ง์ด ๊ฑธ๋ฆด๊ฑฐ๊ฐ๊ธดํ๋ฐ ๊ทธ๋๋ ํด๋ด์ผ์ง ใ ใ
๋ต๋ณ๊ธ:
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=121651&page=1
์ผ๋จ ์คํ์ฝ๋ฃจํด๋ง ๋ฐ๋ก ๋นผ์ ์ ๋ฉ์ถ๋์ง ํ์ธํด๋ด๋ฐ
๊ธ ์ฌ์ง๋ง ๋ณด๋ฉด ๋ฌธ์ ์์ด๋ณด์ด๋๋ฐ ์ผ๋จ ๋๊ฐ์ด ๊ตฌํํด์ ํด๋ณผ๊ฒ
์ ์ด๋ ๊ฒ๊น์ง ํด์ฃผ๋ค๋... ์ง์ง ๊ณ ๋ง๋ค ใ ใ ์ ๊ฒ๋์ ์ง๊ธ ๋ช์๊ฐ์งธ ๊ณ ์์ค...
ํ์ธํด๋ณธ ๊ฒฐ๊ณผ ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ ์ ๋์ํจ ์ฆ ๋๊ฐ ์ฌ๋ ค์ฃผ์ง ์๋ ์ฝ๋์์ ๋ฌธ์ ๊ฐ ์๋ค๋๊ฑฐ
์ ๋๊ธ์๋ ์ธ๊ธํ์ง๋ง ์ฒ์ ์์ํ ๋ stringํ์์ผ๋ก ์ฝ๋ฃจํด์ ์์ํ์ง ์๊ณ ํจ์ ๋ฐฉ์์ผ๋ก ์ฝ๋ฃจํด์ ์คํํ๋ฉด ๋ฉ์ถ์ง ์๋๋ค๊ณ ํ๋ ์ฒ์์ string์ผ๋ก ์์ํ๋์ง ๋ด๋ฐ
์ด๊ฑฐ ์์ ์ ๋ณธ๊ฑด๋ฐ string์ผ๋ก ์ฝ๋ฃจํด ๋๋ฆฌ๋ ๊ฒฝ์ฐ์๋ stop์ฝ๋ฃจํด๋ง์ผ๋ก๋ ์ ์ง ๋ชปํ๋ค์์. ํด๊ฒฐ๋ฒ๋ ๊ฐ์ด ์์๋๋ฐ ๋งํฌ ๊น๋จน์๊ณ ๊ฒ์ ํค์๋๋ ๊ธฐ์ต ์๋๋ค
์ ์ง๋ ๋๋๋ฐ ๋ฐ๋๋๊ฒ ์๋๋๊ฑฐ์๋? ์ํผ
๊ทธ๋ ๊ตฌ๋... ๊ฑ ๋ด๋ถํด string ์ผ๋ก ์ํด์ผ๊ฒ ๋ค