ํ๋ฆฌ๋ฃฉ ์นด๋ฉ๋ผ๋ก ์์ผ ๋๋ฆด ๋ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ํ์ ๋ฐ์ํ๋๋ฐ ํน์ ํด๊ฒฐ๋ฒ ์๋
์์ ์ฒ๋ผ ์์ผ ๋ฐ ์บ๋ฆญํฐ ์กฐ์ํ๋ย ์์คํ ๋ง๋ค๋ ค๊ณ ๊ตฌํ์ ํ์
wasd ๋๋ฅด๋ฉด ์์ขํ์ฐ๋ก ์์ง์ด๊ณ , ๋ง์ฐ์ค ๋๋ ค์ ์์ผ ๋๋ฆฌ๊ณ ํ ๊ตด๋ฆฌ๋ฉด ์ค์ธ ์ค์์ ๊ฐ๋ฅํ ๊ทธ๊ฑฐ ใ ใ alt ๋๋ฅด๋ฉด ์์ผ ์กฐ์์ด ์๋๋ผ UI ์กฐ์๋ชจ๋ ๋๊ณ
์ด์จ๋ ๋์ถฉ ๋ฐ๋ผํ๊ฒ ํ๋ ๋ฐ๋ ์ฑ๊ณตํ๋๋ฐ, ๋ง์ฐ์ค ์์ง์ฌ์ ์์ผ ๋๋ฆฌ๋ ๋ฐ์ ์์ธ ๋ถ๋ช ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํจ
์์ํ๊ณ ์ต์ด ์ํ์์๋ ๋ง์ฐ์ค ๋๋ฆฌ๋ฉด X์ถ Y์ถ ๋ ๋ค ์๋ํ ์๋๋๋ก ๋ฐ๊ฟ์ง
๋ฌธ์ ๋ ๋ฐฉํฅํค ๋๋ฌ์ ์บ๋ฆญ์ ์กฐ๊ธ์ด๋ผ๋ ์ด๋์ํค๋ ์๊ฐ ์๋๊ฐ ๋งํฑ์ด ๊ฐ์ ๋๋ ค์ง๊ณ ๋ฒ๋ฒ ์ด๋ ๊ฒ ๋๊ปด์ง๋ค๊ณ ํด์ผ ํ๋ ๊ทธ๋ฐ ๋ฌธ์ ์ ์ด ์์
์๋ฅผ ๋ค์ด์ ๋ด๊ฐ ์๋ํ ์นด๋ฉ๋ผ ๋์๊ฐ๋ ์๋๊ฐ X์ถ 5 Y์ถ 0.08์ด๋ผ ์น๋ฉด, ๊ตฌ๋ํ ์งํ์๋ ๋ฌธ์ ์์ด ๋์๊ฐ๊ณ ๋ฒ๋ฒ ์๋ ์์ด ๋ถ๋๋ฌ์ด๋ฐ
์บ๋ฆญํฐ ์ขํ ์ด๋ํ๋ฉด x์ถ 3 Y์ถ 0.02 ์ ๋๋ก ํ ๋จ์ด์ง๊ณ ์นด๋ฉ๋ผ๊ฐ ๋์๊ฐ๋ ๊ฒ๋ ๋ญ๊ฐ ๋ถ๋๋ฝ์ง ์๊ณ ๋๋ ๋๊น
์ ์ขํ ์ด๋์ด๋ผ๊ณ ์ผ๋๋ฉด ์ขํด๋ฆญ ํ๋ฉด ์บ๋ฆญํฐ๊ฐ ํ์งํ๋ ๋ชจ์ ์ด ์๋๋ฐ ๊ณต๊ฒฉ ์กฐ์๋ง ํ๋ฉด ํด๋น ๋ฌธ์ ์ ์ ์๋ค. ๋ฌด์กฐ๊ฑด ์บ๋ฆญํฐ ์์ง์ด๋ ์๊ฐ ๋ฐ์ํจ
์๋ํฐ์์๋ ์ง์ง ๋ง๋์ด๋ผ๋ ๋ฐ๋ก ์ ์ ์์ ์ ๋๋ก ์ ํ๊ฐ ์ฌํ๊ณ ์๋ํฐ ์์์๋ง ๋ฐ์ํ๋ ๋ฌธ์ ์ธ๊ฐ ์ถ์ด์ ๋น๋ํด์ ๊ตด๋ ค๋ดค๋๋ฐ
์๋ํฐ๋งํผ ์ ํ๊ฐ ์ฌํ์ง ์๋ค ๋ฟ์ด์ง ๋น๋์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฑ๋ฅ ์ ํ๊ฐ ์ผ์ด๋๋ ๊ฑธ ํ์ธํ ์ ์์
ํ๋ฆฌ๋ฃฉ ๊ด๋ จํ ์คํฌ๋ฆฝํธ๋ ๊ฑด๋๋ฆฌ๋ ๊ฒ ๊ฑฐ์ ์์ด์ ๋ญ๊ฐ ๋ฌธ์ ์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ ์๋ฌด๋ฆฌ ์์ด๋ก ์์นํด๋ด๋ ๋ด ์์น๋ฅ๋ ฅ์ด ๋ณ์ ์ด๋ผ ๊ทธ๋ฐ์ง ํด๊ฒฐ๋ฒ์ด ์ ๋ณด์ธ๋ค
์๋ค๋จธ์ ์์ฒด๊ฐ ์๋ฃ ์ ์ ๊ฒ๋ ํ๋ชซํ๋ ๊ฒ ๊ฐ๊ณ
๊ทธ๋์ ์ฌ๊ธฐ๋ค ์ฌ๋ ค๋ณด๊ณ ์ ๋๋ฉด ์ ๋ํฐํฌ๋ผ๊น์ง ๊ฐ์ ๋ฌผ์ด๋ณด๊ณ ๋ต ๋ชป ๊ตฌํ๋ฉด ์นด๋ฉ๋ผ ์กฐ์ ์ฝ๋ ์ง์ผ์ง ์ถ๊ธด ํจ
์ง๊ธ ํ๋ฆฌ๋ฃฉ ์ค์ ์ ์ด๋ ๊ฒ ๋์ด์์
์๊ด์ด ์์์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ํน์๋ ์ถ์ด์ ์๋์ ์บ๋ฆญํฐ ์กฐ์ํ๋ ์คํฌ๋ฆฝํธ๋ ๊ฐ์ด ์ฒจ๋ถํจ
public class CharacterMovement : MonoBehaviour
{
ย ย #region SetVariables
ย ย [SerializeField] private float MovingSpeed = 8f; //์บ๋ฆญํฐ ์ด๋ ์๋
ย ย [SerializeField] private float RotateSpeed = 0.4f; //์บ๋ฆญํฐ ํ์ ์๋
ย ย [SerializeField] private Camera MainCamera; //๋ฉ์ธ ์นด๋ฉ๋ผ
ย ย private PlayerInput CharaInput;
ย ย [SerializeField] private GameObject SwordObject;
ย ย private Sword SwordScript;
ย ย private Rigidbody CharaRigid;
ย ย private Animator CharaAnimator;
ย ย private Transform MainCameraTr;
ย ย private Vector3 CameraLook; //์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ
ย ย private Vector3 MovingDirection; //์ด๋ ๋ฐฉํฅ
ย ย private CheckAnimeState AnimeState; //์ ๋๋ฉ์ด์ ์ก์
ย ย private bool IsAttackAnime; //๊ณต๊ฒฉ ๋ชจ์ ์ค๋ณต ๋ฐฉ์ง์ฉ
ย ย private bool CanMove;ย ย //์์ง์ผ ์ ์๋์ง ์ฌ๋ถ
ย ย #endregion
ย ย private void Start()
ย ย {
ย ย ย ย CharaInput = GetComponent<PlayerInput>();
ย ย ย ย SwordScript = SwordObject.GetComponent<Sword>();
ย ย ย ย CharaRigid = GetComponent<Rigidbody>();
ย ย ย ย CharaAnimator = GetComponent<Animator>();
ย ย ย ย if (MainCamera == null)
ย ย ย ย ย ย MainCamera = Camera.main;ย ย //๋ฉ์ธ ์นด๋ฉ๋ผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ณ์๊ฐ null์ด๋ฉด ๋ฉ์ธ ์นด๋ฉ๋ผ๋ฅผ ์ฐพ์์ ์ ์ฅํ๋ค
ย ย ย ย MainCameraTr = MainCamera.transform;
ย ย ย ย AnimeState = CharaAnimator.GetBehaviour<CheckAnimeState>();
ย ย ย ย IsAttackAnime = false;
ย ย ย ย CanMove = true;
ย ย }
ย ย private void Update()
ย ย {
ย ย ย ย if (CharaInput.Attack && !IsAttackAnime)
ย ย ย ย ย ย SwordAttack();
ย ย ย ย else if ((CharaInput.MoveX != 0 || CharaInput.MoveZ != 0) && CanMove)
ย ย ย ย ย ย Move();
ย ย ย ย else
ย ย ย ย ย ย CharaAnimator.SetBool("IsRunning", false);
ย ย }
ย ย /// <summary>
ย ย /// ์บ๋ฆญํฐ ์ด๋์ ๋ด๋น
ย ย /// </summary>
ย ย private void Move()
ย ย {
ย ย ย ย if (CharaInput && CharaRigid)
ย ย ย ย {
ย ย ย ย ย ย //์บ๋ฆญํฐ ํ์
ย ย ย ย ย ย CameraLook = MainCameraTr.forward * CharaInput.MoveZ + MainCameraTr.right * CharaInput.MoveX;
ย ย ย ย ย ย CameraLook.y = 0;
ย ย ย ย ย ย CameraLook.Normalize();
ย ย ย ย ย ย CharaRigid.rotation = Quaternion.Lerp(CharaRigid.rotation, Quaternion.LookRotation(CameraLook), RotateSpeed);
ย ย ย ย ย ย //์บ๋ฆญํฐ ์ด๋
ย ย ย ย ย ย Vector3 V = transform.forward * CharaInput.MoveZ * MovingSpeed;
ย ย ย ย ย ย CharaRigid.velocity = V;
ย ย ย ย ย ย ย
ย ย ย ย ย ย MovingDirection = CameraLook * CharaInput.MoveZ * MovingSpeed;
ย ย ย ย ย ย CharaRigid.velocity = CameraLook * MovingSpeed;
ย ย ย ย ย ย CharaAnimator.SetBool("IsRunning", true);
ย ย ย ย }
ย ย }
}
๊ณต๊ฒฉ ๋ชจ์ ๋ถ๋ถ ์คํฌ๋ฆฝํธ๋ ์๋ผ์ ์๋ ๊ฑฐ์ ๊ทธ๊ฑด ํ์ ์์ ๊ฑฐ ๊ฐ์์
์นด๋ฉ๋ผ Update๋ฅผ Fixed๋ก ํด๋ณด์
์๋๋ง๋๋ก ์๋ค๋จธ์ ์ธ์คํํฐ์ ์นด๋ฉ๋ผ ์ ๋ฐ์ดํธ ๋ชจ๋ ์๋๋ฐ ๋ฆฟ์ง๋๋ฐ๋ ๋ณด๊ฐ์ค์ ์ด๋ ๋ณํํด์ ํด์ฃผ๋ฉด ๋ ๋ฏ
์ค ํ์คํ fixed update๋ก ๋ฐ๊พธ๋ ์์ง์ผ ๋ ์ ํ ๋๋ ๊ฒ ์ฌ๋ผ์ง๋ค ๋ณด๊ฐ์ค์ ๋ ํจ ์ฐพ์๋ด ใณใณ
์ง๋ฌธ๊ธ๋ ์ด๋ฐ ์ ์ฑ์ด๋ฉด ๋ต๊ธ ๋ฌ์์ค๋ง ํ๋ค. ์ฝ๋๋ ์ค์ท์ด ๋ณด๊ธฐ ๋ ํธํ๊ธด ํ๋๋ผ