Unity - Week 01

이응민·2024년 12월 2일

Unity

목록 보기
1/12

Hierarchy 창

현재 씬에 존재하는 카메라와 오브젝트를 확인할 수 있는 창

Asset 폴더

게임 제작에 필요한 그림, 사운드, 모델 데이터같은 리소스를 확인할 수 있는 폴더

Scene 창

현재의 게임 오브젝트를 시각적으로 편집하는 창

Game 창

게임이 시작됐을 때 카메라로 보이는 화면

오브젝트 조작 패널

씬에서 오브젝트를 조작하는 패널

유니티의 좌표계

유니티에서는 왼손 좌표계를 사용한다. 따라서 x축은 오른쪽으로 갈수록 값이 증가하고 y축은 위로 갈수록 값이 증가하고 z축은 화면쪽으로 갈수록 값이 증가한다.

오브젝트 생성

오브젝트에 오브젝트를 자식으로 생성할 수 있다. 큐브 오브젝트의 자식 오브젝트로 구를 생성한 모습이다.

빈 오브젝트를 만들 수 있다(Create Empty). 빈 오브젝트는 컴포넌트들을 담을 수 있는 바구니가 된다. 즉, 오브젝트는 컴포넌트들의 조합으로 이루어진다. 빈 오브젝트의 Inspector 창에서 Add Component를 통해 컴포넌트를 추가할 수 있다.

Mesh filter(모양 설정)와 Mesh renderer(렌더 방식 설정)를 통해 Magenta 색의 빈 오브젝트를 구로 만들었다. Magenta 색의 의미는 색상이 지정되어 있지 않다는 것을 알리기 위함이다.

Mesh renderer 컴포넌트에서 Materials 속성을 통해 렌더러 방식을 설정할 수 있다. 지금은 Default-Material로 설정했다. 그래서 빈 오브젝트에서 구 오브젝트를 생성했을 때와 같은 구가 완성되었다.

공간

전역공간 : 게임 월드의 원점을 기준으로 위치를 측정한다.
지역공간 : 자신의 부모 게임 오브젝트를 기준으로 위치를 측정한다.
오브젝트 공간 : 자기 자신을 기준으로 위치를 측정한다.

에셋

Asset 폴더에 그림을 드래그해서 넣을 수 있다. 그리고 Inspector를 통해 해당 그림의 Texture Type을 설정할 수 있다.

Prefabs

다양한 컴포넌트를 조합해서 오브젝트를 만드는데 완성된 오브젝트를 반복적으로 월드에 놓고싶을때 사용한다. 하나의 프리팹의 컴포넌트가 바뀌면 모든 오브젝트의 컴포넌트가 바뀐다. Hierarchy에서 오브젝트를 Asset으로 끌어당겨서 오브젝트를 프리팹으로 만들 수 있다. 프리팹으로 바뀐 오브젝트는 색상이 파란색으로 바뀐다.

스크립트

간단한 명령어로 오브젝트를 움직이게 하는 것이다. C# 스크립트를 사용한다. 기본적으로 MonoBehaviour라는 기본클래스의 파생클래스로 생성된다.

Start 함수는 첫번째 프래임이 시작되기 이전에 호출된다. Update 함수는 매 프래임마다 호출된다. 유니티 엔진이 자동으로 호출해 주는 함수 인데 이것을 유니티 메세지라고 부른다. 스크립트를 적용하려면 오브젝트의 Inspector에서 컴포넌트로 추가해줘야한다.

공을 위 아래로 움직이는 스크립트 작성

transform.position을 이용해 해당 오브젝트의 위치를 지정할 수 있다. 그리고 GameObject.Find("Object") 함수를 이용해 ""안에 오브젝트의 이름을 갖는 오브젝트를 찾아서 지정할 수 있다.

C#에서는 각각 멤버 변수, 멤버 함수마다 접근제어자를 붙여줘야한다. 유니티에서 public 멤버 변수들은 Inspector에서 접근 가능하다. private 멤버 변수도 [SerializeField]를 붙인다면 Inspector에서 접근 가능하다. 그리고 public 멤버 변수지만 Inspector에서 접근하지 못하게 하고 싶다면 [HideInspector]를 붙여준다.

공의 색깔을 바꾸고 회전시키는 스크립트 작성

GameObject.Find("Circle")을 통해서 오브젝트를 찾고 circleObj.GetComponent().color를 통해서 컴포넌트에 접근해서 오브젝트의 색깔을 바꿔준다. 여기서 색깔을 바꾸는 함수는 Random 클래스를 이용한다. 그리고 오브젝트의 이동은 transform.Translate함수와 transform.Rotate함수를 사용했는데 각각 x, y, z의 값이 필요하다.

0개의 댓글