์ง๋ ์๊ฐ ๊ตฌํํ ํ๋ ์ด์ด ์บ๋ฆญํฐ๋ ๋ฐํ๊ณผ ๋ฒฝ์ ๋ฌด์ํ๊ณ ํต๊ณผํ๋ค. ์ด๋ฒ ์๊ฐ์๋ ๋ฌผ๋ฆฌ ๊ด๋ จ ๋ ธ๋๋ฅผ ํ์ฉํ์ฌ ์บ๋ฆญํฐ์ ๋ฐํ ์ฌ์ด์ ์ถฉ๋์ ๊ตฌํํด๋ณด์.
ย
stage_1์ฌ์ CharacterBody2D๋ผ๋ ๋ ธ๋๋ฅผ ์์ฑํด์ฃผ์. Sprite2D๋ฅผ ์์ฑํ ๋์ ๋ฐฉ๋ฒ์ ๊ฐ๋ค. CharacterBody2D๋ฅผ ์์ฑํ์ผ๋ฉด ์ฌ ๋ ์์ Player๋ ธ๋๋ฅผ CharacterBody2D๋ ธ๋์ ๋๋๊ทธ ํ์.
ย
๊ทธ๋ฌ๋ฉด Player๋ ธ๋๊ฐ CharacterBody2D์ ํ์๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋ค๋ฅธ ๋ ธ๋์ ํ์๋ก ๋ค์ด๊ฐ ๋ ธ๋๋ฅผ [์์ ๋ ธ๋](Child Node)๋ผ๊ณ ์นญํ๋ค. ๋ฐ๋๋ก [์์ ๋ ธ๋]๋ฅผ ๊ฐ์ง ์์ ๋ ธ๋๋ [๋ถ๋ชจ ๋ ธ๋](Parent Node)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฆ Player๋ ธ๋๋ CharacterBody2D๋ ธ๋์ [์์ ๋ ธ๋]์ด๋ฉฐ ๋ฐ๋๋ก CharacterBody2D๋ ธ๋๋ Player๋ ธ๋์ ๋ํ์ฌ [๋ถ๋ชจ ๋ ธ๋]๋ผ๋ ๊ด๊ณ์ธ ๊ฒ์ด๋ค.
ย
์์ ๋ ธ๋์ธ Player๋ ธ๋์ ์ด๋ฆ์ โSpriteโ๋ก, ๋ถ๋ชจ ๋ ธ๋์ธ CharacterBody2D๋ ธ๋์ ์ด๋ฆ์ โPlayerโ๋ก ๋ณ๊ฒฝํด์ฃผ์. ์ด์ Sprite๋ ธ๋(์๋ ์ด๋ฆ์ด Player์๋ ๋ ธ๋)๋ ๋ถ๋ชจ ๋ ธ๋์ ๋ถ์ด์ ๊ทธ๋ํฝ์ ํ์ํ๋ ์ญํ ๋ง ํ ๊ฒ์ด๊ณ ์ค์ ์ด๋ํ๋ ์ญํ ์ ๊ทธ ๋ถ๋ชจ ๋ ธ๋๊ฐ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Player๋ผ๋ ์ด๋ฆ์ ๋ถ๋ชจ์ธ CharacterBody2D๋ ธ๋๊ฐ ๊ฐ์ง๋ ๊ฒ์ด ๋ ์ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ง๊ธ๋ถํฐ๋ ๋ฐ๋ ์ด๋ฆ๋๋ก ๋ถ๋ชจ ์ชฝ์ Player๋ ธ๋, ์์ ์ชฝ์ Sprite๋ ธ๋๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์ด๋ ํผ๋ํ์ง ์๋๋ก ์ ์ํ์.
ย
Sprite๋ ธ๋๋ฅผ ์ ํํ๊ณ ์ธ์คํํฐ๋ฅผ ์ดํด๋ณด๋ฉด ์ฌ๋ฌ ์์ฑ ์ค์์ Transform์ด๋ผ๋ ๊ทธ๋ฃน์ด ๋ณด์ผ ๊ฒ์ด๋ค. ํด๋ฆญํด์ ํผ์ณ๋ณด์.
ย
Transform์ด๋ ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด 2D๋ ธ๋(Sprite2Dํ์ ์ด ์๋๋๋ผ๋ ๋ชจ๋ 2D๊ด๋ จ ๋ ธ๋๋ ์ด Transform์ ๊ฐ์ง๊ณ ์๋ค.)์ ๊ณต๊ฐ์ ์ ๋ณด(์์น, ๊ฐ๋, ํฌ๊ธฐ)์ด๋ค. ๊ฐ ์์ฑ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
-ย ย ย ย ย position : ์์น
-ย ย ย ย ย rotation : ๊ฐ๋
-ย ย ย ย ย scale : ํฌ๊ธฐ
-ย ย ย ย ย skew : ๊ธฐ์ธ์ (์ด๊ฑด ๊ฑฐ์ ์ธ ์ผ ์๋ค.)
์ฐ๋ฆฌ๊ฐ 2D์คํฌ๋ฆฐ์์ Sprite2D๋ ธ๋๋ฅผ ์ด๋ํ๊ณ , ํ์ ์ํค๊ณ , ๋๋ ธ๋ค ์ค์๋ค ํ๋ ๋ชจ๋ ์กฐ์์ ์ฌ์ค ์ด ์์ฑ๋ค์ ์กฐ์ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ, ์ด Transform์ผ๋ก ๋ฌถ์ด๋ ์์ฑ์ ๊ฐ๋ค์ ๋ชจ๋ [๋ถ๋ชจ ๋ ธ๋]๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋๋ค. ์๋ฅผ ๋ค์ด position์ [๋ถ๋ชจ ๋ ธ๋๋ก๋ถํฐ์ ์๋์ ์ธ ์์น]๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ Sprite๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋์ธ Player๋ ธ๋์ ๊ณต๊ฐ์ ์ ๋ณด์ ์ผ์นํ๋๋ก ๊ทธ๋ํฝ์ ํ์ํ๊ฒ ํด์ผ ํ๋ค. ๋ฐ๋ผ์ Transform์ ํด๋นํ๋ ์์ฑ๋ค์ ์คํฌ๋ฆฐ์ท๊ณผ ๊ฐ์ด ์ ๋ถ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ค์ ํด์ฃผ๋๋ก ํ์.
ย
๋ค์์ Sprite๋ ธ๋์ ๋ถ์ด์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ฑฐํ๊ณ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ Player๋ ธ๋์ ๋ถ์ฐฉํ์.
ย
์ด์ ์ฝ๋๋ฅผ ์์ ํ ์ฐจ๋ก๋ค. ์ง๋๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก player.gd์คํฌ๋ฆฝํธ๋ฅผ ์ด์.
ย
์ฐ์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ผ์ธ์ ์์ ํ์. ์ด ์คํฌ๋ฆฝํธ๋ ์ด์ Sprite2D๊ฐ ์๋ CharacterBody2Dํ์ ์ ๋ ธ๋(Player๋ ธ๋)์ ๋ถ์ฐฉ๋๋ฏ๋ก ํด๋น ํ์ ์ ์์๋ฐ์์ผ ํ๋ค. ๋ฐ๋ผ์ โextends Sprite2Dโ๋ฅผ โextends CharacterBody2Dโ๋ก ์์ ํ์.
ย
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ โvar speed:float = 500.0โ์ด๋ผ๋ ์ฝ๋๋ฅผ ์ ๋ ฅํด์ฃผ์. ์ด ์คํฌ๋ฆฝํธ๊ฐ ๋ถ์ฐฉ๋ ๋ ธ๋์ speed๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง [๋ณ์]๋ฅผ ๋ง๋ค๊ณ ๋ ธ๋๊ฐ ์์ฑ๋์์ ๋ ํด๋น [๋ณ์] ์ด๊ธฐ๊ฐ์ด 500.0์ผ๋ก ์ค์ ๋๋ค๋ ์๋ฏธ์ด๋ค. [๋ณ์](variable, ์ค์ฌ์ var)๋ ๋์ถฉ ๊ฐ์ ๋ด์๋๋ ๊ณต๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ย
๋ค์์ผ๋ก _process๋ฉ์๋์ ๋ด์ฉ์ ์์ ํด์ฃผ์. ์ง๋ ๊ฐ์์์ ๋งํ๋ฏ์ด ์ฃผ์์ ์๋ตํด๋ ๋๋ฉฐ ์ฝ๋์ ์๋ฏธ๊ฐ ๊ถ๊ธํ๋ฉด ์ฝ์ด๋ณด์.
ย
๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋ฉ์๋, _physics_process์ ๊ทธ ๋ด์ฉ์ ์์ฑํด์ฃผ์.
ย
_physics_process๋ _process๋ฉ์๋์ฒ๋ผ ๋ฐ๋ณต์ ์ผ๋ก ์๋ํ์ง๋ง _process์๋ ๋ฌ๋ฆฌ โ๋งค ํ๋ ์๋ง๋คโ๊ฐ ์๋๋ผ โ์ผ์ ์ฃผ๊ธฐ๋ง๋คโ(๊ธฐ๋ณธ ์ค์ ์ 1/60์ด) ์๋ํ๋ค(์๋ฐํ ์ค๋ช ์ ์๋์ง๋ง ํ์ฌ๋ก์๋ ์ด๋ ๊ฒ ์ดํดํด๋์.). ์๋ฅผ ๋ค์ด ๊ฒ์์ fps๊ฐ 60์ผ๋๋ _process์ _physics_process ๋ ๋ค ์ด๋น 60๋ฒ์ฉ ์๋ํ๊ฒ ์ง๋ง fps๊ฐ 10์ผ๋ก ๋จ์ด์ง๋ฉด _process๋ ์ด๋น 10๋ฒ์ฉ๋ง ์๋ํ ๊ฒ์ด๋ค. ํ์ง๋ง _physics_process๋ฉ์๋๋ ์ฌ์ ํ ์ด๋น 60๋ฒ์ฉ ์๋ํ๋ค.
ย
๋ฌผ๋ฆฌ ์ฐ์ฐ์ ์คํ ์ฃผ๊ธฐ๊ฐ ์์ ์ฑ์ ํฐ ์ํฅ์ ๋ผ์น๊ธฐ ๋๋ฌธ์, ๋ฌผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๋ ๋ฉ์๋๋ ์ฃผ๊ธฐ๊ฐ ์ผ์ ํ _physics_process๋ฉ์๋์์ ์คํ์ํค๋ ๊ฒ์ด๋ค.
ย
๊ฒ์์ ์คํ์ํค๊ณ ์ข์ฐ ๋ฐฉํฅํค๋ฅผ ์ด์ฉํ์ฌ ์ ์๋ํ๋์ง ํ์ธํ์. ์ด๋ฒ์ ์ฝ๋ฉํ ๊ฒ์ ๋ณ๊ฑด ์๋๊ณ ๊ธฐ์กด์ ์ด๋ ์ฝ๋๋ฅผ CharacterBody2D์ ๊ธฐ๋ฅ(์ถฉ๋์ ๊ฐ์งํ๋ ์ด๋)์ ํ์ฉํด์ ์ด๋ํ๋๋ก ๊ฐ์ ํ ๊ฒ๋ฟ์ด๋ค. (์บ๋ฆญํฐ๊ฐ ์ด์ ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์์ง์ด๋ ๊ฒ์ ๊ทธ๋ฅ ์๋ ฅ์ ํด๋นํ๋ ๊ฐ์ 100.0์์ 500.0์ผ๋ก ๋์ฌ์ ๊ทธ๋ฐ ๊ฒ์ผ ๋ฟ์ด๋ค.)
ย
์ด์ CharacterBody2D๊ฐ ์ถฉ๋์ ๊ฐ์งํ ์ ์๊ฒ ์ถฉ๋ ์์ญ์ ์ค์ ํด์ฃผ์. CollisionShape2D๋ ธ๋๋ฅผ ์์ฑํด์ Player๋ ธ๋์ ์์์ผ๋ก ๋ฃ์ด์ฃผ์. ์ด CollisionShape2D๋ผ๋ ๋ ธ๋๋ ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋ฌผ๋ฆฌ ๊ด๋ จ ๋ ธ๋์ผ ๋, ๋ถ๋ชจ ๋ ธ๋์ ์ถฉ๋ ์์ญ์ ๋ชจ์์ ์ค์ ํ ์ ์๊ฒ ํด์ค๋ค.
ย
์ฌ ๋ ์์ CollisionShape2D๋ ธ๋๋ฅผ ์ ํํ๊ณ ์ธ์คํํฐ๋ฅผ ๋ณด๋ฉด shape๋ผ๋ ์์ฑ์ด ์๋ค. ํด๋น ์์ฑ์ <empty>๋ผ๊ณ ํ์๋๋ ๋น์นธ์ ํด๋ฆญํ๋ฉด ์, ์ฌ๊ฐํ, ์บก์ ๋ฑ์ ๋ชจ์ ๋ฐ์ดํฐ ์ค์์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ์ง ์ ํํ ์ ์๋๋ฐ, ๊ทธ ์ค์์ ์บก์ ๋ชจ์(New CapsuleShape2D)๋ฅผ ์ ํํ์.
ย
์ ํํ ๋ชจ์์ด 2D ์คํฌ๋ฆฐ์ ๋ํ๋๋ค. ์ถฉ๋ ์์ญ์ ๋ชจ์์ ์ ๋นํ ์ค์ ํด์ฃผ๋, Sprite๋ ธ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก Transform ์์ฑ๋ค์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์ฃผ์.
ย
์ด๋ฒ์๋ ๋ฐํ, ๋ฒฝ์๋ ๋ฌผ๋ฆฌ ๋ ธ๋๋ฅผ ์ ์ฉํด๋ณด์.
ย
StaticBody2D๋ผ๋ ๋ ธ๋๋ฅผ ์์ฑํด์ ๋ฐํ ๊ทธ๋ํฝ์ ํ์ํ๋ ๋ ธ๋์ ์์์ผ๋ก ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ CollisionShape2D๋ ธ๋๋ฅผ ์์ฑํด์ StaticBody2D๋ ธ๋์ ์์์ผ๋ก ๋ฃ์. (StaticBody2D๋ CharacterBody2D์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌผ๋ฆฌ ๊ด๋ จ ๋ ธ๋์ด์ง๋ง CharacterBody2D์๋ ๋ฌ๋ฆฌ ์ด๋๊ด๋ จ ๊ธฐ๋ฅ์ด ์์ด ์์ง์ด์ง ์๋ ๋ฐํ, ์งํ ๋ฑ์ ๊ตฌํํ๋๋ฐ ์ ํฉํ๋ค.)
ย
์์ฑํ StaticBody2D์ CollisionShape2D๋ ธ๋ ๋ ๋ค Transform์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์ฃผ์.
ย
๊ทธ๋ฆฌ๊ณ CollisionShape2D์ ์ธ์คํํฐ์์ ์ด๋ฒ์๋ ์ฌ๊ฐํ(RectangleShape2D)๋ฅผ ์ ํํ์.
ย
์ด์ ๋ฐํ ๋๋ ๋ฒฝ ๊ทธ๋ํฝ์ ์๋ง๊ฒ ์ถฉ๋ ์์ญ์ ๋ชจ์์ ์ค์ ํด์ฃผ์.
ย
์ด ๊ณผ์ ์ ๋ชจ๋ ๋ฐํ๊ณผ ๋ฒฝ์ ๋ํด์ ๋ฐ๋ณตํด์ฃผ๋ฉด ๋๋ค.
ย
๋ฐํ๊ณผ ๋ฒฝ์ ์ถฉ๋์์ญ ์ค์ ์ด ๋๋ฌ๋ค๋ฉด ์๋ํฐ ์ข์๋จ์ Project๋ฉ๋ด๋ฅผ ํตํด ํ๋ก์ ํธ ์ค์ (Project Settingsโฆ)์ ์ง์ ํ์.
ย
Layer Names โ 2D Physics ์ค์ ์์ Layer 1์ โGroundโ, Layer2๋ โPlayerโ, Layer3์ โEnemyโ๋ก ์ค์ ํด์ฃผ์.
ย
ํ๋ก์ ํธ ์ค์ ์ฐฝ์ ๋ซ๊ณ Player๋ ธ๋์ ์ธ์คํํฐ์์ Collision์ด๋ผ๋ ๊ทธ๋ฃน์ ํผ์ณ๋ณด์. ๊ทธ ์์๋ layer์ mask๋ผ๋ ์์ฑ์ด ์์ ๊ฒ์ด๋ค.
-ย ย ย ย ย Layer : ์ด ๋ฌผ๋ฆฌ ๋ ธ๋๊ฐ ์ด๋ค ๋ ์ด์ด์ ํด๋นํ๋์ง๋ฅผ ๋ํ๋ธ๋ค.
-ย ย ย ย ย Mask : ์ด ๋ฌผ๋ฆฌ ๋ ธ๋๊ฐ ์ด๋ค ๋ ์ด์ด๋ฅผ ๊ฐ์งํด์ผ ํ๋์ง๋ฅผ ๋ํ๋ธ๋ค.
๋ฐฉ๊ธ ์ ํ๋ก์ ํธ ์ค์ ์์ ์ฐ๋ฆฌ๋ 1๋ฒ ๋ ์ด์ด์ Ground(๋ฐํ, ๋ฒฝ ๊ฐ์ ๋งต ์งํ ์์๋ฅผ ์๋ฏธ), 2๋ฒ ๋ ์ด์ด์ Player๋ผ๋ ์ด๋ฆ์ ๊ฐ๊ฐ ์ง์ด์คฌ๋ค. ์ด๋ฅผ ๋ฐ๋ผ์ layer๋ 2๋ฒ ๋ ์ด์ด๋ก, mask๋ 1๋ฒ ๋ ์ด์ด๋ก ์ค์ ํด์ฃผ์.
ย
Player๋ ธ๋ ๋ฟ๋ง ์๋๋ผ ๋ฐํ๊ณผ ๋ฒฝ์ ํด๋นํ๋ StaticBody2D๋ ธ๋๋ค๋ layer์ mask๋ฅผ ์ค์ ํด์ค์ผ ํ๋ค. ํ์ง๋ง layer์ ๊ธฐ๋ณธ๊ฐ์ด 1๋ฒ ์ฆ Ground๋ ์ด์ด์ด๋ฏ๋ก ์ด๋ฏธ ์๋ง๊ฒ ์ค์ ๋์ด ์์ ๊ฒ์ด๋ค.
ย
๊ฒ์์ ์คํ์์ผ๋ณด์. ๋ ์ด์ ํ๋ ์ด์ด ์บ๋ฆญํฐ๊ฐ ๋ฐํ๊ณผ ๋ฒฝ์ ํต๊ณผํ์ง ๋ชปํ๊ณ ์ถฉ๋ํ๋ฉด ์ฑ๊ณต์ด๋ค.
๊ณ ๋ ์ฌ๋ฐ์ด๋ณด์ด๋ค..