Collapse์ ์๋ฃํ๊ณ ๊ฒ์ํผ์ค๋ฅผ ๋ค์ ์ฑ์ฐ๋๊ฑด ์ฌ์ธ์ค ์์๋ค. Match์์ ๋งค์นญ๋ ๊ฒ์ํผ์ค๊ฐ ์์ผ๋ฉด ๋นํ์ผ ์ฒดํฌํด์ ๋นํ์ผ์ ๊ฒ์ํผ์ค ๋ง๋ค์ด์ฃผ๋ฉด ๋ ์ค์์๋ค.
์ฒ์์๋ ์ํ๋๋๋ก ์ ๋์ํ๋ค.
Collapse๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ๊ฒ์ํผ์ค๊ฐ ๋ฆฌ์คํฐ๋์ง ์๋๋ค๋ ๋ฌธ์ ๊ฐ ์๊ธด ํ์ง๋ง ์ด๊ฑด ๊ธ๋ฐฉ ๊ณ ์น ์ ์์๋ค.
๋ฌธ์ ๋ ๋งค์นญ์ด ์ฐ๋ฌ์ ๋ฐ์ํ ๊ฒฝ์ฐ์ ์๊ฒผ๋ค. ๋งค์นญ์ด ์ข ๋ฃ๋๋ฉด ๊ฒ์ํผ์ค๊ฐ ๋ฆฌ์คํฐ๋์ด์ผ ํ๋๋ฐ
๋งค์นญ ์งํ ์ํ๊ฐ ์์ ํ ์ข ๋ฃ๋์๋์ง๋ฅผ ์ฒดํฌํ๋ ๊ฒ์ด ์์ด์ ์๊ธด ๋ฌธ์ ์๋ค.ย
๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์๊ฐ๋๋๊ฑด BoardState๋ก ๋ณด๋์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ System์ ํ๋ ๋ง๋๋ ๊ฑด๋ฐ ์์ ํด์ผ ํ ๋ฒ์๊ฐ ์ปค์ง๋ค. ๋ง์ค์ฌ์ง๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋งค์นญ ์ค์ด๋ผ๋ ์ํ๊ฐ ์์ ํ ๋๋๋ ์กฐ๊ฑด์ ๋ง๋ค์ด์ผ ํ๋๋ฐ ์๊ฐ์ด ์๋๋ค๊ฐ ๊ธ ์ฐ๋ค๋ณด๋ ๋ชฌ๊ฐ ๋ฒ๋ป ์๊ฐ๋๋ค.
์ด๋ฌ๋ค๊ฐ ๋ ๋ฐค๋ฎ์ด ๋ฐ๋๊ฑฐ ๊ฐ์ผ๋ ๋ ์ค๋ฅด๋ ์๊ฐ์ ๋ฉ์ถ๊ณ ๋ด์ผ์ด ๋ด๊ฐ ํด๊ฒฐํ๊ฒ ์ง ๋ผ๋ ๋ง์์ผ๋ก ๋จธ๋ฆฌ๋ฅผ ๋น์ฐ๊ณ ์ ์๋ฆฌ๋ก ๋ ๋๋ค!! ์ง๊ธ ๋ ์ค๋ฅด๋ ์์ด๋์ด๋ณด๋ค ๋ด์ผ ์๊ณ ์ผ์ด๋๋ ์์ด๋์ด๊ฐ ๋ ์ข์ ์ ์์ผ๋ ๋ฐ๋ก ๋ฉ๋ชจํด ๋์ง ์๊ณ ๊ฐ๊ฐํ๊ฒ ์๋ฌ ๊ฐ๋ค!!
ECS Sample ์ ์๋ Use StateMachine์ ์ฐธ๊ณ ํด์ ๋ค ๋ฏ์ด๊ณ ์ณ๋ณผ๊น.. ํ ..
๋ญ๊ฐ ์ค์ ๋น์์๋ ํ๋๋ ์์ฐ์ค๋ฝ๊ฒ ๋จ์ด์ง๊ณ ๊ทธ๋ฌ๋ ค๋ฉด ์ค์ ์ขํ๊ณ๋ก ์์ ํ๊ณ , ์ค์ ์ขํ๊ณ๋ฅผ ํ์ผ์ขํ๊ณ๋ก ์ ํํด์ ๋งค์นญ๊ฒ์ฆํ๊ณ ๋จ๊ตฌ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ฑ์์ง๊ฒ๊ฐ๊ธฐ๋ํ๊ณ ..
Pixels Per Unit ์ด์ฉํด์ ํ์ผ์ ์ขํ๊ณ์ ์๋์ขํ๊ณ๋ฅผ 1:1๋ก ๋ง์ถฐ๋จ์. Move๊ฐ ์๋ฃ๋๋ฉด Match์ ํ๊ณ Match์ด ์์ผ๋ฉด ๋ฆฌ์คํฐ์ ์ํค๋๋ฐ ์ ์ฐ๋ฌ์ ๋งค์นญ์ด ๋ ๋ ์ค๊ฐ์ ๋ฆฌ์คํฐ์ด ๋๋์ง ์ดํด๊ฐ ์๋๋ค ใ
๊ธ์ผ, ์์คํ ์ ์ด๋ป๊ฒ ๋์ดํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋์ถฉ ์ด๋ ๊ฒ ํด๋์๊ฑฐ์? RespawnSystem(๋ฌด๋ธ์์คํ ์ด๊ธฐ๋ํ๋ ค๋) CheckMatchSystem(๋งค์นญ๋๋๊ฑฐ์ฒดํฌ) CollapseSystem(์ญ์ ์์คํ , ์ฌ๊ธฐ์) ์ด๋ ๊ฒ ๋์ด๋์ด ์์ผ๋ฉด ๋งค์นญ๋๋๊ฑฐ ์ฝ๋ฉ์คํ๋ด์ ๋ฐ๋ก ๋ฆฌ์คํฐ์ผ๋ก ๊ฐ๋๊ฒ ๋น์ฐํ ๊ฑฐ๊ฐ์๋ฐ? ์ํ๋๋๋ก ๋๋ ค๋ฉด ์๋ 2,3๋ฒ์ด ๋งค์นญ์ด ๋์ด์ ์์๋๊น์ง ๋ฐ๋ณตํด์ผํ ๊ฑฐ๊ฐ์ 1.Respawn 2.CheckMatch 3.Collapse
์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ค๋ฉด, Respawn์์คํ ์ Execute๋ฌ์๋ ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ์ ์ฑ์ฐ๋ ๊ฒ์ด ์๋ ๋์ด์ Matching๋๋๊ฒ ์๋ค๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋๋ง Executeํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ ๊ฑฐ๊ฐ์๋ฐ? ๊ทธ๋ฅ ์๊ฐ๋๋๋๋ก ์ฃผ์ ๋๋ดฃ์
๋ง์ด. ๋ฐ๋ณต์ด ์งํ๋๋ ์ค์๋ ๋ฆฌ์คํฐ ์ํ๊ฐ ๋๋ฉด ์๋๋๋ฐ ๊ทธ๊ฑธ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ์ง ๊ณ ๋ฏผ์ค. ๊ฐ์ฅ ์ฝ๊ฒ ๋ ์ค๋ฅด๋๊ฑด ์ํ๋จธ์ ์ ๋ง๋๋๊ฑฐ๊ตฌ..
๋งค์นญ๋๋๊ฒ ์์๋ ๋ฆฌ์คํฐ๋๋๋ก ๋ง๋ค์๋๋ฐ. ๊ทธ๊ฒ ์๋๊ฒจ.. ์ฆ, ๋งค์นญ๋๊ณ ๋ด๋ ค์ค๊ณ ๋ค์ ๋งค์นญ ์ฌ์ด์ ๋ ธ๋งค์นญ ์ํ๊ฐ ๋๋ ํ๋ ์์ด ํ๋ ๋ผ์ด ์๋๊ฑฐ์ง.
๋ด ์๊ฐ์ผ๋ก๋ JobHandle.Complete๊ฐ ๋๊ธฐ๊ฐ ์๋๋ผ ์๋ฃ๊ฐ ์๋๋ฉด ์๋ซ์ค์ ๋ค์ํ๋ ์์์ ์ฒ๋ฆฌํ๋ค๊ฐ ์๋๊น ์ถ์ด. ๋๋จธ์ง๋ ๋น๋๊ธฐ๋ก ์งํ์ด ๊ณ์ ๋๋๊ฑฐ๊ณ
์ง๊ธ๋ DOTS์์ ์์คํ ์คํ ์์๋ฅผ ํด๋์ค์์ ExecuteInGroup๋ญ์๊ธฐ๋ก ํต์ ํ๋. ๊ทธ๋ฐ ํ๋ ์์ด ์ค๊ฐ์ ๋ผ๋๊ฑธ ํต์ ๊ฐ ์๋๋ฉด ํผ๊ณคํ๋ฐ
๋น์ทํ๊ฑฐ ์์ UpdateInGroup, UpdateAfter ๋ฑ๋ฑ
Jobs๋ก ์คํ์์ ๋ณด์ฅํ๋ ค๋ฉด ์ฃ๋ค ์์ฐจ์ ์ผ๋ก ScheduleJobํด์ผํ๋๊ฑธ๋ก ์๊ณ ์์๋๋ฐ. ๋ชจ๋ฅด๊ฒ ๋ค. ๋จธ๋ฆฌ์ํ๊ฒ๋ค ์ฆ๋ง
Dependency ๋ก ์ข ์์ฑ์ด ์๋๊ฑด ์๋ก ์ถฉ๋ ์๋๊ฒ ํ ์๋ ์์. ๋ด ์๊ฐ์ผ๋ก๋ ๋งค์นญ๋๋๊ฑด Job์์ ๋ฉํฐ์ค๋ ๋ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ณ ๋งค์นญ์ด ์๋์ง๋ ๊ทธ ์๋ซ์ค์์ ์ฑ๊ธ์ค๋ ๋๋ก ์ฒ๋ฆฌํด์ ๋น๋๊ธฐํ์ ์ํ ๋ฌธ์ ๊ฐ ์๋๊น ์ถ์ด. ๋๋ JobHandle.Complete ๊ฐ ๋๊ธฐ์ธ์ค ์์๋๋ฐ ๊ทธ๊ฒ ์๋๋ฏ. ์ก์ด ์๋ฃ๊ฐ ์๋๋ฉด ์๋ซ์ค์ ๋ค์ ํ๋ ์์์ ์ฒ๋ฆฌํ๊ณ ๋ค๋ฅธ ๋น๋๊ธฐ ์์คํ ์ ์คํ๋๊ณ ๊ทธ ์ฌ์ด์์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์๊ธด๊ฒ ์๋๊น ์ถ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ Matching์ด ์๋์๋์ง๋ Dependency ์ ๋ฃ์ด์ค์ ComandBuffer๋ก ์ํ๋ฅผ ์ ์ฅํด์ผ ์ด ๋ฌธ์ ๊ฐ ์์๊ธธ๋ฏ ์ถ๋ค.
๋ํํ๋ฉด์ ๋ฌธ์ ์์ธ์ ๋ฐ๊ฒฌํ๋ค. ์ด๊ฒ์ด ๊ฐ์ ์ ์คํฐ๋๊ทธ๋ฃน์ธ๊ฐ ใ ใ ์ํผ ๋ ์๋ฌ๊ฐ๊ฒ ์ค๋ ์ด๋ํ๋๋ฐ ์ผ์ฐ ์์๋ฉด ๊ทผ์์ค ์
์๋ ์์ ๋๊ฐ ๋ฃ๊ณ ๋ง์์ด๋ ๋ฒํ์ข ๋ฐ์ ใ ใ ์
์๋ ๋ง์ํ๊ณ ๊ธ์ ์ฐ๋ฉด์ ์๊ฐ์ด ์ ๋ฆฌ๋จ ๊ทธ๋์ ๊ธ์ฐ๊ธฐ ๊ธ์ฐ๊ธฐ ๊ฐ์กฐํ๋๊ฑฐ