10λΆ„ μ―€ 전에 μ§ˆλ¬ΈκΈ€μ„ μ˜¬λ ΈλŠ”λ° μ‚­μ œλ˜μ—ˆλ”λΌκ³ μš”..


ν˜Ήμ‹œ μ‚­μ œλœ μ΄μœ κ°€ λ­”μ§€ μ•Œλ €μ£Όμ‹œλ©΄ κΌ­ κ³ μΉ˜κ² μŠ΅λ‹ˆλ‹€.



빨간색이 μΊλ¦­ν„°μ˜ 이동 λ°©ν–₯, νŒŒλž€μƒ‰μ΄ νšŒμ „ λ°©ν–₯μž…λ‹ˆλ‹€.




캐릭터λ₯Ό μ •λ°˜λŒ€ λ°©ν–₯으둜 움직일 λ•Œ 캐릭터가 항상 -xz λ°©ν–₯으둜 νšŒμ „ν•˜λŠ” ν˜„μƒμ΄ μžˆμŠ΅λ‹ˆλ‹€.


μΊλ¦­ν„°μ˜ νšŒμ „μ€ Slerp, Lerp, RotateToward μ„Έ κ°€μ§€λ₯Ό μ‚¬μš©ν•΄λ³΄μ•˜λŠ”λ° λͺ¨λ‘ 같은 ν˜„μƒμ΄ μžˆμŠ΅λ‹ˆλ‹€.




μ½”λ“œλŠ” moveDirection = Vector3.Slerp(moveDirection, targetDirection, 60 * Time.deltaTime);


μ΄λ ‡μŠ΅λ‹ˆλ‹€.


moveDirection 은 Tr.forward λ₯Ό, targetDirection 은 Input 받은 μˆ˜μ§μ΄λ‚˜ μˆ˜ν‰ λ°©ν–₯으둜 항상 1 ~ -1 값이 λ‚˜μ˜΅λ‹ˆλ‹€.




즉, μ •λ°˜λŒ€ λ°©ν–₯의 curr κ³Ό target 을 받은 μ„Έ ν•¨μˆ˜ (Slerp, Lerp, RotateToward) κ°€ λͺ¨λ‘ -xz λ°©ν–₯으둜 λŒλ¦°λ‹€λŠ” 뜻인데..


μ™œ 항상 -xz λ°©ν–₯으둜 돌리게 κ³„μ‚°λ˜λŠ”μ§€ Unity Document 같은 κ³³μ—μ„œ 아무리 찾아봐도 μ•Œ μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.


---


μ •ν™•νžˆ 뭐가 κΆκΈˆν•œκ±΄μ§€κ°€ ν—·κ°ˆλ¦¬κ²Œ μž‘μ„±λœ κ±° κ°™μ•„μ„œ μˆ˜μ •ν•©λ‹ˆλ‹€.


빨간색이 κΈ°μ‘΄ μ§„ν–‰ λ°©ν–₯, μ§„ν•œ μ΄ˆλ‘μƒ‰μ΄ μž…λ ₯ν•œ λ°©ν–₯일 λ•Œ,

targetDirection (ν•¨μˆ˜μ—μ„œ target κ°’μœΌλ‘œ μ‚¬μš©) 은 μ§„ν•œ μ΄ˆλ‘μƒ‰ λ°©ν–₯이고, moveDirection 을 μ„Έ ν•¨μˆ˜ (Slerp, Lerp, RotateToward) 둜 (move, target) ν•  λ•Œ,

moveDirection 이 λ‹€μŒκ³Ό 같이 λΉ¨μ£Όλ…Έμ΄ˆνŒŒλ³΄ μˆœμ„œλŒ€λ‘œ λ³€ν•˜λŠ” μ΄μœ κ°€ κΆκΈˆν•©λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ΄ moveDirection 을 μˆ˜μ •ν•œ λ‹€μŒ, 계산 λ‹€ 끝내고 μ‚¬μ΄ν΄μ˜ λ§ˆμ§€λ§‰μ— rotate λ₯ΌΒ Β quaternion.LookRotation(moveDirection) ν•˜κΈ° λ•Œλ¬Έμ— μΊλ¦­ν„°μ˜ νšŒμ „μ΄ μ•„λ‹ˆλΌ μ• μ΄ˆμ— moveDirection 이 μ™œ -xz 둜 λ‚˜μ˜€λŠ”μ§€κ°€ μš”μ μž…λ‹ˆλ‹€.


ν˜Ήμ‹œ μ΄μœ λ‚˜ μ°Έμ‘°ν•  λ ˆνΌλŸ°μŠ€κ°€ μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•©λ‹ˆλ‹€.