본문 바로가기
공부/유니티

유니티3D 공부(Part 1-1) 플레이어 움직이기

by 라이티아 2024. 9. 24.

내 머릿속이다

끼얏호우!!!

 

즐거운 유니티 공부 시간이다.

 

지난 c#공부에서 흐름을 읽었으니, 그걸 써먹고 싶은데

정작 유니티 3d를 공부한적이 없어서 솔로로 공부를 시작한다

 

교제는

"유니티짱으로 배우는 유니티5 3D게임 제작 입문"이다

 

고딩때 얻은 책인데, 이제서야 본격적으로 볼 것 같다

전체적으로 유니티짱 에셋을 적극적으로 사용하는데, 보통 대학 캡스톤에서 에셋을 적극적으로 사용하는 것을 생각해 보면, 이런 에셋을 중심으로 굴리는 교제도 한번쯔음 해볼만 하다고 생각한다

 

 

 

우리의 유니티짱이다

익숙한 감각... 다시 게임 개발자로 돌아갈 시간이다...

 

 

헛소리는 그만하고 유니티짱이나 가져오자

 

유니티짱 에셋에는 모델이나 애니메이션 등 여러가지를 포함하고 있다

 

이제 이걸 이용해서 게임을 만들어 보자

 

우선 플레이어를 만들어야 한다

빈 오브젝트에 player를 붙이고 유니티짱 모델을 넣어준다

 

이제 바닥을 만들어 보자

plane으로 바닥을 만든뒤, 에셋의 바닥 메테리얼을 넣어준다

 

이제 움직임을 제한할 맵을 만들어 볼것이다

 

책에서는 프리팹으로 제공되어 있던데, 난 구하기 귀찮으니 직접 만들도록 하겠다

 

대충 111 사이즈 큐브를 만들고 이걸 잘 조절하면

 

뭔가 미로같아 보이는 무언가를 만들수 있다

 

나도 잘 만들고 싶어....

어쨋든 이제 세세한 설정을 해보자

 

빛량을 조절한다거나 게임의 해상도를 조절하거다 등등....

근데 light의 intensity가 빛량을 결정하는지는 처음 알았다

 

3D는 빛에 민감하니 잘 설정하면 좋을 것 같다

 

대충 모든 설정을 마치면 이런 형태가 나온다

 

이제 유니티짱을 움직여 보자

 

3D에서 핵심은 충돌을 처리하는 것이라고 한다

 

이를 character controller가 있다고 하는데, 처음 듣는 개념이라 사용해봐야 할 것 같다

 

진짜 처음보는 컴포넌트다

이게 뭐여;;

 

일단 하라는데로 흘러가 보자

 

아마 이 캡슐이 콜라이더 역할 을 하는 것 같다

 

위치를 조정해주자

character controller의 center value중 y value를 1로 변경하여 모델과 맞추어 주었다

 

이제 스크립트를 추가해보자

스크립트를 추가하고 이를 수정할 준비를 한다

 

IDE는 vscode를 사용한다

 

원래 visual studio를 많이 사용했는데, mac에 미쳐버린 친구의 권유로 vscode로 옮겨서 정착하게 되었다

 

내가 생각할때는, vs보다 vsc가 좀더 가볍고, 커스텀 요소가 많은게 장점인 것 같다

이렇게 원하는 방향으로 커스텀이 되는게 최고인 것 같다

 

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

public class Player_move : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float rotationSpeed = 360f;

    CharacterController characterController;
    void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        if(direction.sqrMagnitude > 0.01f)
        {
            Vector3 forward = Vector3.Slerp
            (
                transform.forward, direction, rotationSpeed * Time.deltaTime / Vector3.Angle(transform.forward, direction)
            );
            transform.LookAt(transform.position + forward);
        }
        characterController.Move(direction * moveSpeed * Time.deltaTime);
    }
}

대충 코드 예제를 작성한다

 

처음 보는 개념이 졸라 많다

 

Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

대충 이건 키보드 입력일 update로 처리하는건 알고 있다

이건 과연 뭘까, Slerp라는 개념을 처음 봤다

대충 움직임 사이에 포인트를 끼워 넣어서 부드럽게 하는 것 같은데, 개념을 좀 더 알아야 할 것 같다

 

일단 대충 움직이는걸 확인할 수 있다

 

다음에는 모션을 넣어보도록 하자