[C#, 유니티] 05. jetkara_MoveObject 분석

2022. 7. 6. 21:45코딩 2막 <C#개념편>

728x90

 

정말 단순해보이면서 간단한 제트카라

과연 제트카라는 어떤 원리로 게임이 구현되는지 지금부터 알아보자


가장 먼저 피사체가 어떠한 원리로 움직이는지 알아보자

그럼 jetkara의 moveobject는 어떤 코드로 짜여있는지부터 분석합시다

transform?

유니티에서 생성하는 모든 스크립트들은 transform을 가지고 있다.

일단 cube라는 3D object를 만들었다

transform은 인스펙터(Inspector) 내에 존재하는 클래스(=기능)이다

이 기능은 position(위치 조정), rotation(회전), scale(크기 확대축소)를 가지고 있다 

 


그렇다면 이 기능들을 하나씩 면밀히 뜯어보자

transform.position 좌표

transform.eulerAngles 각도

transform.localScale 크기

 

Vector3좌표 (x, y, z)를 의미한다


<실습> 피사체를 상하좌우 컨트롤 해보자


그럼 GetKey를 이용하여

직접 컨트롤 하는 피사체를 만들어보자

 

원리는 다음과 같다

피사체가 W A S D 의 버튼을 누를때 움직일 수 있도록 값을 세팅한다

Esc 버튼을 누르면 gameobject를 파괴하는 기능을 추가한다

완성된 코드

출력 결과

위의 방식도 있지만 더 효율적인 방식도 있다

바로 translate를 이용하는 것이다

 

원리는 다음과 같다

여기서 중요한 개념이 등장한다.

static변수!!

C++에서는 구조체의 경우 변수나 함수를 쓰려고 할때

반드시 해당 구조체의 변수나 함수를 선언해주어야 했다

 

하지만 C#에서는 static변수라는게 있다

Vector3가 구조체이지만 별도의 선언없이 바로 static변수를 쓸수가 있다.

 

Space.Self는 피사체의 무게중심에 따라 방향이 이동하고

셀프 방향표시

Space.World는 월드의 방향에 따라 이동한다 (마치 나침반을 보고 이동하는 것처럼)

월드 방향표시

 

출력 결과

여기에 Rotate를 추가하면 어떻게 될까?

축에 따라서 회전을 한다.

 

출력 결과

유니티엔진을 쓰기위해 C++을 공부한 이유

혹자는 말한다

유니티를 쓰는데 C++은 공부할 필요없다고...

 

그런 사람 보면

"X같은 소리 하지 마" 라고 말 해줘라

C++에서 우리는 포인터변수에 대해서 배웠다

포인터라는 개념을 왜 공부했는가

개발자들에게 이것을 아는 것은 매우 중요하다

특히 유니티를 쓰는 프로그래머라면 더더욱!

C#에서 클래스는 얕은복사를 하고, 구조체는 깊은 복사를 한다는 개념을 배웠다

이때 설명하기위해서는 포인터라는 개념이 필요하다


공감해주셔서 감사합니다

728x90