๐ ๋ณธ ํฌ์คํ ์ Unity 6 ๊ณต์ ๋งค๋ด์ผ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
๋ฐ๋ฅ์ ๋ซ๊ณ ๋จ์ด์ง๊ฑฐ๋ ๋ฒฝ์ ํต๊ณผํด ๊ฑธ์ด ๋ค๋๋ ์ผ์ด์๊ฒ ์ฌ์ฉ์์ ์บ๋ฆญํฐ๋ ์๋ฐํ๋ ์ผ๋ฐ์ ์ผ๋ก ์ถฉ๋ ๊ธฐ๋ฐ ๋ฌผ๋ฆฌ(collision-based physics)๊ฐ ํ์ํฉ๋๋ค.
3D ๋ฌผ๋ฆฌ ํ๊ฒฝ์์๋ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ(Character Controller)๋ฅผ ์ฌ์ฉํด์ ์บ๋ฆญํฐ์ ๋ฌผ๋ฆฌ ๋์๊ณผ ์ ์ด๋ฅผ ๋ง๋ค๊ณ ์ค์ ํ ์ ์์ต๋๋ค.
์บ๋ฆญํฐ๊ฐ ๊ฑฐ์ ์ฆ์ ๊ฐ์ํ๊ณ , ์ ๋ํ๊ณ , ๋ฐฉํฅ์ ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ, ๊ด์ฑ์ ์ํฅ์ ๋ฐ์ง ์๋๋ก ํ๊ธฐ ์ํด ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์บ๋ฆญํฐ์ ๊ฐ์ ๋ฐ ์์ง์์ ์๋์ ์ผ๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ค์ ์ด์ง ์๊ฒ ์ค์ ๋ฉ๋๋ค.
3D ๋ฌผ๋ฆฌ ํ๊ฒฝ์์ ์ด๋ฌํ ์ข ๋ฅ์ ๋์์ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ(Character Controller)๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์บ๋ฆญํฐ์๊ฒ ํญ์ ์์ง์ ์ ์งํ๋ ๋จ์ํ ์บก์ ๋ชจ์์ ์ปฌ๋ผ์ด๋(collider)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ์ค๋ธ์ ํธ์ ์๋์ ๋ฐฉํฅ์ ์ค์ ํ๋ ์์ฒด์ ์ธ ํน๋ณํ ํจ์๋ค์ ๊ฐ์ง๊ณ ์์ง๋ง, ์ผ๋ฐ์ ์ธ ์ปฌ๋ผ์ด๋์ ๋ฌ๋ฆฌ Rigidbody๋ ํ์ํ์ง ์์ผ๋ฉฐ, ๊ด์ฑ ํจ๊ณผ๋ ํ์ค์ ์ด์ง ์์ต๋๋ค.
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ Scene ๋ด์ static colliders๋ฅผ ํต๊ณผํ ์ ์์ผ๋ฏ๋ก, ๋ฐ๋ฅ์ ๋ฐ๋ผ ์์ง์ด๊ณ ๋ฒฝ์ ์ํด ๋งํ๊ฒ ๋ฉ๋๋ค. ์์ง์ด๋ ๋์ ๋ฆฌ์ง๋๋ฐ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ฐ์ด๋ผ ์๋ ์์ง๋ง, collisions์ ์ํด ๊ฐ์๋์ง๋ ์์ต๋๋ค. ์ด๋ ํ์ค 3D collider๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํธ๋กค๋ฌ๊ฐ ์์ง์ผ ์ฅ๋ฉด์ ๋ง๋ค ์ ์์ง๋ง, ์บ๋ฆญํฐ ์์ฒด๋ ํ์ค์ ์ธ ๋ฌผ๋ฆฌ์ ํ๋์ ์ ํ์ ๋ฐ์ง ์์ต๋๋ค.
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ(Character Controller)๋ ์ฃผ๋ก ๋ฆฌ์ง๋๋ฐ๋(Rigidbody) ๋ฌผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ 3์ธ์นญ ๋๋ 1์ธ์นญ ํ๋ ์ด์ด ์ ์ด์ ์ฌ์ฉ๋ฉ๋๋ค.

| ์์ฑ (Property) | ์ค๋ช (Description) |
|---|---|
| ๊ฒฝ์ฌ ํ๊ณ (Slope Limit) | ์ปฌ๋ผ์ด๋๊ฐ ์ฌ๋ผ๊ฐ ์ ์๋ ๊ฒฝ์ฌ์ ์ต๋ ๊ฐ๋(๋ ๋จ์)๋ฅผ ์ ํํฉ๋๋ค. ์ด ๊ฐ๋ณด๋ค ๊ฐํ๋ฅธ ๊ฒฝ์ฌ๋ฉด์ ์ค๋ฅด์ง ๋ชปํฉ๋๋ค. |
| ๊ณ๋จ ๋์ด (Step Offset) | ์บ๋ฆญํฐ๊ฐ ์ง๋ฉด์ผ๋ก๋ถํฐ ์ด ๊ฐ๋ณด๋ค ๊ฐ๊น์ด ๊ณ๋จ๋ง ์ค๋ฅผ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ฐ์ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ์ ๋์ด๋ณด๋ค ์ปค์๋ ์ ๋๋ฉฐ, ํด ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. |
| ํผ๋ถ ๋๊ป (Skin Width) | ๋ ์ปฌ๋ผ์ด๋๊ฐ ์๋ก ์นจํฌํ ์ ์๋ ์ต๋ ๊น์ด์ ๋๋ค. ํผ๋ถ ๋๊ป๊ฐ ํด์๋ก ๋จ๋ฆผ(jitter) ํ์์ด ์ค์ด๋ญ๋๋ค. ํผ๋ถ ๋๊ป๊ฐ ๋๋ฌด ์์ผ๋ฉด ์บ๋ฆญํฐ๊ฐ ๊ฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ง๋ฆ(Radius) ๊ฐ์ 10%๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. |
| ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ (Min Move Distance) | ์บ๋ฆญํฐ๊ฐ ์ด ๊ฐ๋ณด๋ค ์์ ๊ฑฐ๋ฆฌ๋งํผ ์์ง์ด๋ ค๊ณ ํ๋ฉด ์์ ์์ง์ด์ง ์์ต๋๋ค. ์ด๋ ๋จ๋ฆผ ํ์์ ์ค์ด๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด ๊ฐ์ 0์ผ๋ก ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. |
| ์ค์ฌ (Center) | ์บก์ ์ปฌ๋ผ์ด๋์ ์ค์ฌ์ ์๋ ๊ณต๊ฐ์์ ์คํ์ (offset)ํฉ๋๋ค. ์บ๋ฆญํฐ์ ํ์ ์ถ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. |
| ๋ฐ์ง๋ฆ (Radius) | ์บก์ ์ปฌ๋ผ์ด๋์ ๋ฐ์ง๋ฆ ๊ธธ์ด์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ปฌ๋ผ์ด๋์ ๋๋น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. |
| ๋์ด (Height) | ์บ๋ฆญํฐ์ ์บก์ ์ปฌ๋ผ์ด๋(Capsule Collider)์ ๋์ด์ ๋๋ค. ์ด ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ปฌ๋ผ์ด๋๊ฐ Y์ถ ๋ฐฉํฅ์ผ๋ก ์์ ๋ฐ ์์ ๋ชจ๋๋ก ์ค์ผ์ผ์ด ์กฐ์ ๋ฉ๋๋ค. |
๋ ์ด์ด ์ค๋ฒ๋ผ์ด๋ ์น์ ์ ํด๋น ์ฝ๋ผ์ด๋์ ๋ํ ํ๋ก์ ํธ ์ ๋ฐ์ ๋ ์ด์ด ๊ธฐ๋ฐ ์ถฉ๋ ๊ฐ์ง ์ค์ ์ ์ฌ์ ์ํ ์ ์๋ ์์ฑ๋ค์ ์ ๊ณตํฉ๋๋ค.
| ์์ฑ (Property) | ์ค๋ช (Description) |
|---|---|
| ๋ ์ด์ด ์ค๋ฒ๋ผ์ด๋ ์ฐ์ ์์ (Layer Override Priority) | ์ด ์ปฌ๋ผ์ด๋ ์ค๋ฒ๋ผ์ด๋์ ์ฐ์ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๋ ์ปฌ๋ผ์ด๋์ ์ถฉ๋ํ๋ ์ค๋ฒ๋ผ์ด๋๊ฐ ์์ ๊ฒฝ์ฐ, ๋ ๋์ ๊ฐ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ปฌ๋ผ์ด๋์ ์ค์ ์ด ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Layer Override Priority๊ฐ 1์ธ ์ปฌ๋ผ์ด๋๊ฐ Layer Override Priority๊ฐ 2์ธ ์ปฌ๋ผ์ด๋์ ์ถฉ๋ํ๋ฉด, ๋ฌผ๋ฆฌ ์์คํ ์ Layer Override Priority๊ฐ 2์ธ ์ปฌ๋ผ์ด๋์ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค. |
| ํฌํจํ ๋ ์ด์ด (Include Layers) | ์ด ์ปฌ๋ผ์ด๋์์ ์ถฉ๋์ ํฌํจํ ๋ ์ด์ด๋ฅผ ์ ํํฉ๋๋ค. |
| ์ ์ธํ ๋ ์ด์ด (Exclude Layers) | ์ด ์ปฌ๋ผ์ด๋์์ ์ถฉ๋์์ ์ ์ธํ ๋ ์ด์ด๋ฅผ ์ ํํฉ๋๋ค. |

์ ํต์ ์ธ ๋ ์คํ์ผ์ 1์ธ์นญ ์ ์ด ๋ฐฉ์์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ค์ ์ด์ง ์์ต๋๋ค. ์บ๋ฆญํฐ๋ ์์ 90๋ง์ผ๋ก ๋ฌ๋ฆฌ๋ค๊ฐ ์ฆ์ ๋ฉ์ถ๊ณ , ์ ์๋ฆฌ์์ ๋ฐฉํฅ์ ํ ๋ฐ๊ฟ ์ ์์ฃ . ์ด๋ ๊ฒ ๋นํ์ค์ ์ธ ์์ง์์ Rigidbody์ ๋ฌผ๋ฆฌ ์์ง์ผ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ฉด ๋นํจ์จ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ค์ ๊ฒ์ ํ๋ ์ด์์๋ ์ด์ํ๊ฒ ๋๊ปด์ง ๊ฒ๋๋ค.
์ด๋ฌํ ์ํฉ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋ฐ๋ก ํน์ํ๋ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ(Character Controller)์ ๋๋ค. ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ ๋จ์ํ ์บก์ ๋ชจ์์ ์ฝ๋ผ์ด๋(Collider)์ด๋ฉฐ, ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ํน์ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋๋ก ์ง์ํ ์ ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ๋ ์ด ์์ง์์ ์ํํ๋, ์ถฉ๋์ ์ํด ์ ์ฝ์ ๋ฐ์ต๋๋ค. ์ฆ, ๋ฒฝ์ ๋ฐ๋ผ ๋ฏธ๋๋ฌ์ง๊ฑฐ๋, ๊ณ๋จ ๋์ด(Step Offset)๋ณด๋ค ๋ฎ์ ๊ณ๋จ์ ๊ฑธ์ด ์ฌ๋ผ๊ฐ๊ณ , ๊ฒฝ์ฌ ํ๊ณ(Slope Limit) ๋ด์ ๊ฒฝ์ฌ๋ฉด์ ๊ฑธ์ ์ ์์ต๋๋ค.
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ ์ค์ค๋ก ํ์ ๋ฐ์ํ์ง ์์ผ๋ฉฐ, Rigidbody ์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ๋ฐ์ด๋ด์ง๋ ์์ต๋๋ค. ๋ง์ฝ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ก Rigidbody๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ฅผ ๋ฐ์ด๋ด๊ณ ์ถ๋ค๋ฉด, ์คํฌ๋ฆฝํธ์ OnControllerColliderHit() ํจ์๋ฅผ ํตํด ์ถฉ๋ํ๋ ์ค๋ธ์ ํธ์ ํ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋๋ก, ํ๋ ์ด์ด ์บ๋ฆญํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ์ํฅ์ ๋ฐ์์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด, ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ ๋์ Rigidbody๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
๐ก ํํ ๋งํ๋ ๋ฅ๊ฒ์ ๋ง๋ค ๋๋ Rigidbody๋ฅผ ์ฐ๋ ํธ์ด ๋ ๋ง์์ ๋ฏ
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์บ๋ฆญํฐ์ ๋ฉ์(mesh)์ ๋ง์ถ๊ธฐ ์ํด ๋์ด(Height)์ ๋ฐ์ง๋ฆ(Radius) ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ฌ๋๊ณผ ๋น์ทํ ์บ๋ฆญํฐ์ ๊ฒฝ์ฐ, ๋์ด๋ฅผ ์ฝ 2๋ฏธํฐ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋ฉ๋๋ค. ์บ๋ฆญํฐ์ ํผ๋ฒ(pivot) ์ง์ ์ด ์ ํํ ์ค์์ ์์ง ์๋ค๋ฉด, ์บก์์ ์ค์ฌ(Center)์ ์์ ํด์ ์์น๋ฅผ ๋ง์ถ ์๋ ์์ต๋๋ค.
Step Offset๋ ์ค์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. 2๋ฏธํฐ ํฌ๊ธฐ์ ์ฌ๋ ์บ๋ฆญํฐ๋ผ๋ฉด ์ด ๊ฐ์ 0.1์์ 0.4 ์ฌ์ด๋ก ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Slope Limit๋ ๋๋ฌด ์๊ฒ ์ค์ ํ์ง ์๋ ๊ฒ ์ข์ต๋๋ค. ๋ณดํต 90๋๋ก ์ค์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค. ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ ์บก์ ๋ชจ์ ๋๋ถ์ ๋ฒฝ์ ๊ธฐ์ด์ค๋ฅด์ง๋ ๋ชปํฉ๋๋ค.
์บ๋ฆญํฐ๊ฐ ๊ฒ์ ๋ด์์ ๋ฒฝ์ด๋ ์ค๋ธ์ ํธ์ ๋ผ์ด๋ ํ์์ ๋ฐฉ์งํ๋ ค๋ฉด, Skin Width(ํผ๋ถ ๋๊ป) ์์ฑ์ ์ ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Skin Width์ ์ญํ : ์ด ๊ฐ์ ๋ ์ปฌ๋ผ์ด๋๊ฐ ์๋ก ์ฝ๊ฐ ์นจํฌํ ์ ์๋๋ก ํ์ฉํด์, ์บ๋ฆญํฐ๊ฐ ๋ฉ์ถ๊ฑฐ๋ ๋จ๋ฆฌ๋(jitter) ํ์์ ์ค์ฌ์ค๋๋ค. ๋ง์ฝ ์บ๋ฆญํฐ๊ฐ ์์ฃผ ๋ผ์ธ๋ค๋ฉด, ๋๋ถ๋ถ Skin Width ๊ฐ์ด ๋๋ฌด ์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๊ถ์ฅ ์ค์ : Skin Width๋ ์ต์ 0.01๋ณด๋ค ํฌ๊ณ , Radius(๋ฐ์ง๋ฆ) ๊ฐ์ 10%๋ณด๋ค ํฌ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Min Move Distance: Min Move Distance(์ต์ ์ด๋ ๊ฑฐ๋ฆฌ) ๊ฐ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด 0์ผ๋ก ์ ์งํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
์บ๋ฆญํฐ๊ฐ ์์ฃผ ๋ผ์ธ๋ค๋ฉด Skin Width(ํผ๋ถ ๋๊ป) ๊ฐ์ ์กฐ์ ํ์ธ์. ์ด ์์ฑ์ด ๋๋ฌด ์์ผ๋ฉด ์บ๋ฆญํฐ๊ฐ ์ค๋ธ์ ํธ์ ๊ฑธ๋ฆฌ๊ฑฐ๋ ๋ผ์ผ ์ ์์ต๋๋ค.
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌผ๋ฆฌ์ ์ธ ํ์ ์ํด ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ํ์ง๋ง ์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ค๋ฅธ ๋ฌผ๋ฆฌ ์ค๋ธ์ ํธ์ ํ์ ๊ฐํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐ๋๋ก, ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ๋ ๋ค๋ฅธ ๋ฌผ๋ฆฌ ์ค๋ธ์ ํธ์ ํ์ ์ํด ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. (์: ํญ๋ฐ๋ก ์ธํด ๋ฐ๋ ค๋์ง ์์)
์ฐธ๊ณ : ์ธ์คํํฐ์์ ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ์ ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด ์ฅ๋ฉด(Scene) ๋ด์์ ์ปจํธ๋กค๋ฌ๊ฐ ๋ค์ ์์ฑ๋ฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ธฐ์กด์ ํธ๋ฆฌ๊ฑฐ(Trigger) ์ ์ด ์ ๋ณด๊ฐ ์ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก, ์ปจํธ๋กค๋ฌ๊ฐ ๋ค์ ์์ง์ด๊ธฐ ์ ๊น์ง๋ OnTriggerEntered ๊ฐ์ ํธ๋ฆฌ๊ฑฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ๋ชปํ ์ ์์ต๋๋ค.
์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ์ ์บก์ ๋ชจ์ ์ปฌ๋ผ์ด๋๋ ๋ ์ด์บ์คํธ(raycast) ๊ฐ์ ์ฟผ๋ฆฌ(query) ์ ์ค์ ๋ณด์ด๋ ๊ธฐ์ฆ๋ชจ(gizmo)๋ณด๋ค ์์ฃผ ์ฝ๊ฐ ์๊ฒ ์ธ์๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํน์ ๋ชจ์๋ฆฌ ๋ถ๋ถ์์๋ ์ฟผ๋ฆฌ๊ฐ ์ถฉ๋์ ๊ฐ์งํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
https://docs.unity3d.com/Manual/character-control-section.html