[멋쟁이사자처럼 부트캠프 TIL] 멋쟁이사자처럼 유니티게임스쿨 6일차 - 3D 프로젝트 시작

굥지·2024년 10월 8일
0

사용 에셋

Survival city lowpoly pack

PSX Misc. Gun Pack

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; //그냥 추가
    }
}

이렇게하면 마우스 커서가 안 보이게 된다

플레이어 input

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로 맞춰주는거

0개의 댓글

관련 채용 정보