3. 주인공 캐릭터 제작

MOON·2022년 7월 14일
0

유니티_3D_SpaceShooter

목록 보기
3/11
post-thumbnail

3D 모델 불러오기

05.Models/Player 폴더에서 Player를 씬 뷰로 배치
Transform / Position (0, 0, 0) : 중요!

컴포넌트

컴포넌트 기반의 개발은 일종의 소프트웨어 개발 방법론으로 독립적인 기능단위로 컴포넌트를 제작한 다음 필요한 기능을 조립하는 방식을 말함
독립적인 기능을 하는 컴포넌트(모듈)를 활용하여 레고 블럭식으로 조립하여 프로그램을 개발
Inspector 창에서는 이러한 컴포넌트를 쉽게 삽입/삭제함으로써 필요한 기능을 사용함
다른 컴포넌트들은 추가 / 삭제를 할 수 있으나 유일하게 Transform 컴포넌트는 삭제할 수 없음

Scripts폴더 아래에 C# 스크립트를 하나 생성 : PlayerCtrl
클래스명과 파일명이 동일하다.


코드 에디터 변경

유니티 기본 에디터인 비주얼 스튜디오 이외에 VSCode와 같은 서드 파티를 사용할 경우 Preferences에서 설정 할 수 있다.
[Editor] - [Preferences] - [External Tools]

중요(오버로딩)함수

키보드 입력값 받아들이기

Input 클래스
외부에서 들어오는 다양한 입력 소스(키보드/마우스/모바일 터치/조이스틱 등)의 값을 관리하는 클래스
Editor - Project Settings - Input 을 통해 정의 가능
Vertical, Horizontal, Jump, Mouse X 등의 이름으로 정의 돼 있음

Input.GetAxis(“Horizontal”) : Left / Right / A / D 키를 눌렀을 때 (-1 ~ 1) 사이의 값을 가져옴, 부드러운 이동을 할 경우에 사용
Input.GetAxis(“Vertical”) : Up / Down / W / S
Input.GetAxisRaw(“Horizontal”) : -1, 0, 1 세가지의 값만 반환 : 부드러운 이동이 아님

이제 만들었던 PlayerCtrl.cs를 작성하자.

Horizontal, Vertical을 사용할 변수 2개를 선언하며, Debug.Log를 통해 실행시 Console창에서 값을 확인할수 있다.


캐릭터 이동

실제로 키 입력에 따른 캐릭터를 이동시켜 본다.

Update()함수는 매 프레임마다 호출되는 함수 - 최적화에 주의를 해야함
Update()함수에서 접근해야 할 컴포넌트는 Awake()나 Start() 에서 미리 변수에 할당한후 Update()에서 사용하길 권장함

GetComponent< >()
게임 오브젝트가 가진 특정 컴포넌트를 참조할 때 사용
Type에 상관 없이 모두 받을 수 있는 제너릭 타입
Unity3d 5.~ 버전에서는 이와 같은 형식으로 모두 사용해야 함
Transform 컴포넌트를 찾아서 tr변수에 할당

이동 2가지 방식

(1) Transform의 Position 값을 변경함 - 번거롭고 코드의 가독성을 떨어뜨림
(2) 물리엔진(PhysX, Box2D)를 사용해 이동

tr.Translate(Vector3.forward*moveSpeed*v*Time.deltaTime, Space.Self);

이동할 방향 속도 전진, 후진 변수(방향) * 시간 을 통해 이동한다.


정규화 벡터

벡터는 크기와 방향을 가진 데이타 타입으로, 그 중에서 각 축의 크기가 1인 벡터를 단위 벡터(정규화된 벡터, Normalized Vector)라 한다. 즉, 방향만 표시하는 벡터

유니티는 왼손 좌표계를 사용한다. (DirectX와 동일)

벡터 moveDir를 구한다. 단위벡터에 키보드를 통한 입력값을 곱해서 벡터를 구한다.

전/후진 벡터와 좌우 벡터를 벡터의 덧셈연산을 이용하여 하나의 벡터로 만들고 속도를 곱하면 전후 좌우로 이동시킬 수 있다



캐릭터 회전

게임 오브젝트를 회전 할 때는 Transform.rotation 속성값을 변경하거나 Rotate계열의 함수를 사용할 수 있다.

void Rotate(Vector3 eulerAngles, [Space relativeTo]);
void Rotate(float xAngle, float yAngle, float zAngle, [Space relativeTo]);
void Rotate(Vector3 axis, float angle, [Space relativeTo]);


회전을 위한 변수 rotSpeed를 선언후 아래 코드를 작성한다.



마우스의 민감도 셋팅

Edit - Project Settings - Input - Mouse X 에서 Sensitivity를 조절할 수 있음
값이 높을 수록 마우스 조작에 대한 캐릭터 회전을 빨리 할 수 있음

이것으로 이동, 회전을 마치고 다음은 애니메시션으로 넘어가겠다.

profile
나만의 공간

0개의 댓글