์ง€๊ธˆ fps๊ฒŒ์ž„ ๋งŒ๋“œ๋ ค๋Š”๋ฐ ๋ฏธ์น˜๊ฒ ์Œ

๋‚ด ๋ชฉ์  : ๋ช‡๋ช‡ FPS๊ฒŒ์ž„๋“ค์„ ๋ณด๋ฉด ( EX : EscapeFromTarkov , ReadyOrNot , ์ฝœ์˜ต๋“ฑ๋“ฑ)
์œ ์ €์˜ ํšŒ์ „์ž…๋ ฅ์œผ๋กœ ์บ๋ฆญํ„ฐ์˜ ์ƒ์ฒด(์–ผ๊ตด+์ด๊ธฐ๋“ฑ๋“ฑ)๊ฐ€
๊ทธ ๋ฐฉํ–ฅ์„ ๋ฐ”๋ผ๋ด„
๊ทธ๋Ÿฌ๋‚˜ ํ•˜์ฒด๋Š” ์ผ๋‹จ ์ž์„ธ ์œ ์ง€
ํšŒ์ „์ด ๊ณ„์†๋˜์„œ ๊ฐ๋„์ฐจ๊ฐ€ ํฌ๋ฉด ๋‹ค๋ฆฌ๋„ ํšŒ์ „์„ ํ•˜์—ฌ ์ƒ์ฒด๋ฐฉํ–ฅ์œผ๋กœ ๋งž์ถค

(์ƒ์ฒด๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค๋ฆฌ๊ฐ€ ํšŒ์ „ํ•œ๋‹จ ๋ง์ž„)


ํ—ˆ๋‚˜ ๋‚ด ์นจํŒฌ์น˜๋จธ๋ฆฌ๋กœ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋„ ์†์‹œ์›ํ•œ ๋‹ต์„ ์–ป์ง€ ๋ชปํ–ˆ์Œ.
๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์นจํŒฌ์น˜๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด๋ดค์ง€๋งŒ
์ด๊ฒŒ ์ •๋ง ๋งž๋Š”๊ฑธ๊นŒ๋ž€ ์˜๊ตฌ์‹ฌ์ด ๋“ฌ.
๊ฒŒ์ž„๋งŒ๋“œ๋Š”๊ฒŒ ํ•œ๊ฐ€์ง€ ๋ฐฉ์‹๋งŒ ์žˆ์ง€ ์•Š๊ฒ ์ง€๋งŒ,
๋‚ด๊ฐ€ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ ์žˆ๊ฑฐ๋‚˜ ์ข‹์€๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด
์ด ์นจํŒฌ์น˜๋ฅผ ๊ตฌ์ œํ•ด์ค„์ˆ˜ ์—†์„๊นŒ

๋จผ์ € ํ•˜์ด์–ด์•„ํ‚ค ๊ตฌ์กฐ์ž„

a04828aa1806b450ba3323519b33e0730d91185942fb436faf4e33b8bd


FullBody
Root(Rotate) - Animator์ปดํฌ๋„ŒํŠธ + ํšŒ์ „์Šคํฌ๋ฆฝํŠธ
์ €๊ธฐ์„œ ์บ๋ฆญํ„ฐํŠธ๋žœ์Šคํผ์˜ ์ตœ์ข… ํšŒ์ „์„ ๊ฒฐ์ •ํ•ด

@Yaw - Y์ถ• ํšŒ์ „ ์ž…๋ ฅ์‹œ ์ด๊ฑธ ํšŒ์ „ ์‹œ์ผœ (์บ๋ฆญํ„ฐ๋ฃจํŠธ์˜ ์ค‘์‹ฌ์ )
LookTarget - Yaw๋ถ€๋ชจ์˜ ์ž์‹์ด๊ณ , ๋‚ด ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐ”๋ผ๋ณผ ๋ฐฉํ–ฅ์˜ ์—ญํ• ์ž„
(๋ฃฉ ํƒ€๊ฒŸ์€ ์บ๋ฆญํ„ฐ์˜ ์ „๋ฐฉ๋ฐฉํ–ฅ์— ์žˆ์Œ)

๋‚˜๋จธ์ง€ ์„ค๋ช…์•ˆํ•œ๊ฑด ์ƒ๊ด€์—†๋Š”๊ฑฐ๋ผ ์ƒ๋žตํ•จ


์ด์ œ ์ฝ”๋“œ, ํšŒ์ „์Šคํฌ๋ฆฝํŠธ์ž„. (์ขŒ์šฐํšŒ์ „๋งŒ)
1. ๋‚ด๊ฐ€ ํšŒ์ „์ž…๋ ฅํ•จ
2. ์บ๋ฆญํ„ฐ ์ƒ์ฒด
๋ผˆ๋Œ€๊ฐ€ ์ž…๋ ฅ๋œ ํšŒ์ „ ์‹คํ–‰ (์•„๋ž˜ ์ด๋ฏธ์ง€)

a15e31aa370676b660b8f68b12d21a1d3ce83e6aaf07

ํŒŒ๋ž€ ๋™๊ทธ๋ผ๋ฏธ -> upperBody๋ณ€์ˆ˜ | ์œ ๋‹ˆํ‹ฐ์•„๋ฐ”ํƒ€์ƒ์—์„  UpperChest์ž„
LateUpdate์— ์ƒ์ฒดํšŒ์ „ ์‹œํ‚จ ์ด์œ ๊ฐ€
์ด ํšŒ์ „์ด IK์ž‘์—…์ด ์•„๋‹ˆ์—ˆ๊ณ , ์œ ๋‹ˆํ‹ฐ ํ•จ์ˆ˜์‹คํ–‰์ˆœ์„œ์—์„œ
์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋กœ์„ธ์Šค ๋๋‚œ ๋‹ค์Œ LateUpdate๋‹ˆ๊นŒ
์—ฌ๊ธฐ์„œ ํ•˜์ฒด๋Š” ์šฐ์„  ๊ฐ€๋งŒํžˆ ์žˆ๊ธธ ์›ํ–ˆ์Œ

3. ํ•˜์ฒด ํšŒ์ „ ์‹œ์ž‘
์ด์ œ ์ƒ์ฒด๊ฐ€ ํŠน์ •๊ฐ๋„๋งŒํผ ํšŒ์ „์‹œ, ํ•˜์ฒด๊ฐ€ ๋”ฐ๋ผ์˜ค๋„๋ก
์บ๋ฆญํ„ฐ๋ฃจํŠธ ์ž์ฒด์˜ ํšŒ์ „์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ํ•จ.
๊ทธ๊ฒŒ ๋‚ด๊ฐ€ fps๊ฒŒ์ž„์—์„œ ๋ดค๋˜ ํšŒ์ „๊ฐ™์•„์„œ์ž„

์—ฌ๊ธฐ์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ (BaseLayer + ํ•˜์ฒด์ „์šฉ๋ ˆ์ด์–ด , ์ด2๊ฐœ)

a0473caa25361487579ae4fb06df231d5f287e316403cf1f01da

์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์ „๋ถ€ ๋ฏน์‚ฌ๋ชจ๊บผ๊ณ ,
์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๊ทธ์ € ์ œ์ž๋ฆฌ์„œ ํ•˜์ฒด๊ฐ€ ํ„ด์„ ํ•˜๋Š”๊ฑฐ์ž„

4. ํ•˜์ฒด ํšŒ์ „ ์ฝ”๋“œ (Updateํ•จ์ˆ˜์—์„œ ํ–ˆ์Œ)
ํ•˜์ฒด ํšŒ์ „์ด๋ผ๊ณ  ๋งํ–ˆ์ง€๋งŒ, ์บ๋ฆญํ„ฐ ํŠธ๋žœ์Šคํผ์˜ ํšŒ์ „์ž„ ์‚ฌ์‹ค
(์™œ๋ƒ๋ฉด Pelvis(Hips) ์ž์‹์œผ๋กœ ์บ๋ฆญํ„ฐ๋‹ค๋ฆฌ + ์ƒ์ฒดSpine์ด ๋ชจ๋‘ ํฌํ•จ๋˜์žˆ์–ด)

a16711aa372a76b660b8f68b12d21a1dd587d635c9


์—ฌ๊ธฐ์„œ "CurrentTurning"์€ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ์—์„œ ์“ฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์•ผ
ํ˜„์žฌ ํšŒ์ „์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ•˜๊ณ ์žˆ๋‹ค๋ฉด ์ด์ค‘์œผ๋กœ ํ• ํ•„์š”์—†์œผ๋‹ˆ๊นŒ ์ƒ๋žตํ•˜๋Š”๊ฑฐ์•ผ
ํ•˜์ฒด๊ฐ€ ํ•ญ์ƒ ๋”ฐ๋ผ์˜ค๋Š”๊ฒŒ ์•„๋‹Œ

float angle = Vector3.SignedAngle(transform.forward, myInput.YawRotator.forward, Vector3.up);
๊ฐ๋„์ฐจ๊ฐ€ ์žˆ์„๋–„ ํ•˜์ฒดํšŒ์ „์„ ์‹œ์ผฐ์–ด.

ํšŒ์ „์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‰ฌ๊ณ ์žˆ๊ณ , ํšŒ์ „ ์‹œ์ผœ์•ผํ•˜๋ฉด
Animator.PlayInFixedTime(ํด๋ฆฝ์ด๋ฆ„,๋ ˆ์ด์–ด, fixedTime = 0)์œผ๋กœ ์ฆ‰์‹œ ์‹คํ–‰

5. ํšŒ์ „์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ
ํšŒ์ „ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํด๋ฆฝ ๋‚ด๋ถ€์—(
StateMachineBehaviour) ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด (์•„๋ž˜)

a0473caa2536b547ba34106858c12a3ac5399e52db2e70cf606514

OnStateUpdate์—์„œ
ํšŒ์ „ํ•˜๋Š”๋™์•ˆ @Yaw์˜ ํšŒ์ „๊ฐ’์œผ๋กœ
์บ๋ฆญํ„ฐ ํŠธ๋žœ์Šคํผ์ด ํšŒ์ „ํ•ด์•ผํ•  ๋ชฉํ‘œํšŒ์ „์ถ•์„ ๊ณ„์† ์ดˆ๊ธฐํ™”ํ•ด์ค˜
(์œ„ 4๋ฒˆ ์Šคํฌ๋ฆฐ์ƒท ๋งˆ์ง€๋ง‰์ค„์— ํšŒ์ „ ์ž…๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ž‘ ์ด์–ด์ง€๋Š”๊ฑฐ์•ผ.)

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฐ˜์‹ ์ด ์ƒ์ฒด๋ฅผ ๋”ฐ๋ผ์˜ค๋„๋ก ํ–ˆ์–ด


6. ๊ฒฐ๊ณผ๋ฌผ

a0473caa25363faf68f1d1bc10f11a3917fa604f8f94285e6968


์ผ๋‹จ ์นจํŒฌ์น˜์˜ ๋ˆˆ์œผ๋กœ ๋ณผ๋–„
์–ผ์ถ” ๊ทธ๋Ÿด์‹ธ๊ฒŒ ๋‚˜์˜จ๊ฒƒ๊ฐ™์Œ
๊ทธ๋Ÿฌ๋‚˜ ๊ธ€ ์ฒ˜์Œ์— ๋งํ–ˆ์ง€๋งŒ.
์ด๊ฑด ์ž˜๋ชป๋œ ๋ฐฉ์‹์ผ๊นŒ๋ž€ ์˜๊ตฌ์‹ฌ์ด ๋“ค์–ด ๊ธ€์„ ์“ฐ๊ฒŒ๋จ
๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€
์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด๋„๋จ?

------
๊ธฐํƒ€ (์•ˆ ์ฝ์–ด๋„๋จ)

์šฐ์„  ์ง€๊ธˆ ์ „์‹  ์บ๋ฆญํ„ฐ ๋ชฉ์ ์ด
์ƒ๋Œ€๋ฐฉ์ด ๋ณด๋Š” ๋‚˜์˜ ๋ชจ์Šต์ด์ž ๋‚˜(ํด๋ผ)์˜ ํ™”๋ฉด์— ๋น„์ถฐ์งˆ ์ ๋“ค์˜ ๋ชจ์Šต์ž„
ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ๋Š” ์ €๊ธฐ ๋ชจ๋ธ์—์„œ ํŒ”๋งŒ ๋–ผ๊ณ 
ํ•˜์ฒด๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ๋–ผ์„œ ๋งŒ๋“ค๊ณ ์žˆ์Œ.

์ง€๊ธˆ ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ(fpsArm๋ชจ๋ธ)์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฆฌ๊น…์„ ์“ฐ๊ณ ์žˆ์Œ
(
์ „์‹ ์บ๋ฆญํ„ฐ์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฆฌ๊น… ์“ฐ๋‹ค๊ฐ€ ๋‹ต๋‹ตํ•ด์„œ ํฌ๊ธฐํ•จ)

๊ทธ๋ฆฌ๊ณ  ์ „์‹ ์บ๋ฆญํ„ฐ์— ์™œ ๋ฃฉIK ์•ˆ์ป๋ƒ๋ฉด
์ด๊ฑด ์ฐธ ๋ญ๋ผ ์„ค๋ช…ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ (์นจํŒฌ์น˜์˜ ๋จธ๋ฆฌ๋ฅผ ์ดํ•ดํ•ด์ค˜)
์ด๊ธฐํ”ผ๋ด‡์œ„์น˜๋ฅผ ์–ธ์ œ๋‚˜ ์บ๋ฆญํ„ฐ ์ƒ์ฒด์— ๊ณ ์ • + ์บ๋ฆญํ„ฐ ์ƒ์ฒดํšŒ์ „์— ๊ฐ™์ด ํšŒ์ „ํ• ๋–„
๋ฃฉik๊ฐ€ ์ž๊พธ ๊ทธ๊ฑธ ๋ฐฉํ•ดํ•˜๊ณ  ์บ๋ฆญํ„ฐ์†IK์—๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์„œ
์•”ํŠผ ๊ทธ๊ฑด ์“ฐ๋‹ค๊ฐ€ ํฌ๊ธฐํ–ˆ์Œ.