사용 에셋
3D 오브젝트가 마젠타 색으로 변했을때 전부다 체크하고 컨벌트
Window - Rendering - Render Pipeline Convert로 들어가서 싹다 선택후 and Convert버튼 누르기
Player 자식에 카메라를두고 Character Controller 컴포넌트 부착(1인칭 효과)
Player에 아래 컴포넌트들 부착
옛날 입력 시스템+최근거 다 쓸 수 있음(Both)
[최근거]
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false; //그냥 추가
}
}
이렇게하면 마우스 커서가 안 보이게 된다
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public float WalkSpeed = 7;
InputAction moveAction;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
InputActionAsset inputActions = GetComponent<PlayerInput>().actions;
moveAction = inputActions.FindAction("Move");
}
}
뉴 인풋 시스템 사용
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public float WalkSpeed = 7; //움직이는 속도
public float mouseSens = 1; //마우스 민감도
public Transform cameraTransform; //카메라가 바라보고 있는 방향
float horizontalAngle; //가로 각도(마우스 움직일때 돌아가는거)
float verticalAngle; //세로 각도
InputAction moveAction; //움직일때 input
InputAction lookAction; //마우스 움직일때 보이는거
CharacterController characterController; //계속 인스턴스로 갖고오기 귀찮아서
void Start()
{
Cursor.lockState = CursorLockMode.Locked; //게임화면 내 커서 잠금
Cursor.visible = false; //커서 숨기기
InputActionAsset inputActions = GetComponent<PlayerInput>().actions;
//인풋시스템에서 할당
moveAction = inputActions.FindAction("Move"); //Move에 해당하는 입력값 가져오기
lookAction = inputActions.FindAction("Look"); //Look "
characterController = GetComponent<CharacterController>();
horizontalAngle = transform.localEulerAngles.y; //바라보는 각도에 얼마나 돌아야하는지 세팅
verticalAngle = 0; //초기값 설정(상하 각도)
}
void Update()
{
Vector3 moveVector = moveAction.ReadValue<Vector2>(); //move 입력 감지
Vector3 move = new Vector3(moveVector.x, 0, moveVector.y);
//이동벡터가 1보다 크다면 1로
if(move.magnitude >1) //Vector크기 감지(대각선 그거 어쩌구)
{
move.Normalize(); //아래 그림으로 설명함
}
move = move * WalkSpeed * Time.deltaTime;
move = transform.TransformDirection(move); //현재 gameObjct의 방향으로 벡터를 돌린다.
characterController.Move(move); //characterController컴포넌트에 접근해 움직여준다.
Vector2 look = lookAction.ReadValue<Vector2>(); //look 액션 벡터를 가져오고
float turnPlayer = look.x * mouseSens; //마우스 감도를 적용하고
horizontalAngle += turnPlayer; //현재 각도에 더한다
if (horizontalAngle >= 360) horizontalAngle -= 360; //변화된 각도를 넣는다.
if (horizontalAngle <0) horizontalAngle += 360;
Vector3 currentAngle = transform.localEulerAngles; //currentAngle 는 현재 y회전값
currentAngle.y = horizontalAngle;
transform.localEulerAngles = currentAngle;
//마우스 상하
float turnCam = look.y * mouseSens;
verticalAngle -= turnCam; //상하이동은 카메라에서 얻어온 verticalAngle에 더함
verticalAngle = Mathf.Clamp(verticalAngle, -89f, 89f); //90도 이상 꺾이지 않도록 구간 지정
currentAngle = cameraTransform.localEulerAngles; //카메라의 EulerAngles의 x값을 회전량을 적용한 verticalAngle로 바꿈
currentAngle.x = verticalAngle;
cameraTransform.localEulerAngles = currentAngle;
}
}
eulerAngles : 오일러앵글이라고 하며 x,y,z축 중심으로 회전한다는 의미
eulerAngles .x 라고하면 x축 회전
localEulerAngles : 부모에 대한 상대좌표로 부모가 없다면 월드좌표 공간이 기준(부모의 상대적인 회전값을 Vector3으로 접근)
//이동벡터가 1보다 크다면 1로
:
아래 대각선을 1로 맞춰주는거