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 |
댓글