본문 바로가기
유니티 개발

3D 캐릭터 움직임 기초

by L3m0n S0ju 2021. 8. 16.

 

 

 

 

 

 

 


 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    private float walkSpeed; // 걸음속도

    [SerializeField]
    private float lookSensitivity; // 마우스 민감도

    [SerializeField]
    private float cameraRotationLimit; // 위아래 시선 각도 제한
    private float currentCameraRotationX = 0;


    [SerializeField]
    private Camera theCamera;

    private Rigidbody myRigid; 

    void Start() // 시작
    {
        myRigid = GetComponent<Rigidbody>(); // Rigidbody 속성 가지고 있는 컴포넌트 로드
    }

    void Update() // 대략 1초에 60프레임 반복
    {
        Move(); // 캐릭터 움직임
        CameraRotation(); // 카메라 상하각도
        CharacterRotation(); // 캐릭터 좌우각도
    }

    private void Move()
    {
        float _moveDirX = Input.GetAxisRaw("Horizontal"); // 좌우 키
        float _moveDirZ = Input.GetAxisRaw("Vertical"); // 상하 키

        Vector3 _moveHorizontal = transform.right * _moveDirX; // 좌우 좌표
        Vector3 _moveVertical = transform.forward * _moveDirZ; // 상하 좌표

        Vector3 _velocity = (_moveHorizontal + _moveVertical).normalized * walkSpeed; // 속도

        myRigid.MovePosition(transform.position + _velocity * Time.deltaTime); // 속도에 따른 위치이동
    }

    private void CharacterRotation() // 좌우 캐릭터 회전
    {
        float _yRotation = Input.GetAxisRaw("Mouse X"); // 마우스는 좌우가 X축이고 캐릭터는 좌우가 Y축이다.
        Vector3 _characterRotationY = new Vector3(0f, _yRotation, 0f)*lookSensitivity;
        myRigid.MoveRotation(myRigid.rotation * Quaternion.Euler(_characterRotationY));
    }

    private void CameraRotation() // 상하 카메라 회전
    {
        float _xRotation = Input.GetAxisRaw("Mouse Y"); // 마우스는 상하가 Y축이고 카메라는 상하가 X축이다.
        float _cameraRotationX = _xRotation * lookSensitivity; // 상하 민감도
        currentCameraRotationX -= _cameraRotationX; // 상하각도 값
        currentCameraRotationX = Mathf.Clamp(currentCameraRotationX, -cameraRotationLimit, cameraRotationLimit); // 각도 제한
     
        theCamera.transform.localEulerAngles = new Vector3(currentCameraRotationX, 0f, 0f); // 상하각도 업데이트
    }
}

 


 

'유니티 개발' 카테고리의 다른 글

3D 캐릭터 팔, 주먹 동작 구현  (0) 2021.08.17
지형제작 (나무, 잔디, 돌)  (0) 2021.08.17
3D 캐릭터 움직임 심화  (0) 2021.08.17
2D 상하좌우 이동  (0) 2021.08.16

댓글