๐ŸŽฎ Unity6 ์บ๋ฆญํ„ฐ ์ปจํŠธ๋กค

VIN'Spellsยท2025๋…„ 7์›” 5์ผ

์œ ๋‹ˆํ‹ฐ6

๋ชฉ๋ก ๋ณด๊ธฐ
4/12

๐Ÿ“Œ ๋ณธ ํฌ์ŠคํŒ…์€ 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์ถ• ๋ฐฉํ–ฅ์œผ๋กœ ์–‘์ˆ˜ ๋ฐ ์Œ์ˆ˜ ๋ชจ๋‘๋กœ ์Šค์ผ€์ผ์ด ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”ฎ๋ ˆ์ด์–ด ์˜ค๋ฒ„๋ผ์ด๋“œ (Layer Overrides)

๋ ˆ์ด์–ด ์˜ค๋ฒ„๋ผ์ด๋“œ ์„น์…˜์€ ํ•ด๋‹น ์ฝœ๋ผ์ด๋”์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์˜ ๋ ˆ์ด์–ด ๊ธฐ๋ฐ˜ ์ถฉ๋Œ ๊ฐ์ง€ ์„ค์ •์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ (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

0๊ฐœ์˜ ๋Œ“๊ธ€