Unity Study (1) 용어 및 Unity 기본 구성 정리
"레트로의 Unity 게임 프로그래밍 에센스" 책을 보고 학습한 내용 정리
Unity 기본 정리
1. 기본 화면 구성
Unity실행 후, "2 by 3"로 화면을 설정하면 위와 같은 화면이 구성된다.
Scene : 월드인 씬을 시각적으로 편집하는 창
Hierarchy : Scene에 존재하는 오프젝트들을 나열하여 보여주는 창
Inspector : 선택된 오브젝트의 정보 표시 및 수정, 추가하는 창
Game : 실행 시, 게임을 시작및 조작할 수 있는 창
Project : 해당 프로젝트에 사용할 에셋들을 표시하는 창
Console : 개발로그 및 오류로그등을 확인 할 수 있는 창
3. 기본 조작
기본 프로젝트에 왼쪽상단에 해당 툴바가 존재한다.(손바닥 모양, 4방향 화살표 등..)
순서대로
* Hand Tool - 씬 카메라를 이동
* Translate Tool - 오브젝트를 이동(오브젝트의 화살 표가 표시되는데.. 이걸로 이동하면 깔끔하게 이동 가능)
* Roate Tool - 오브젝트를 회전
* Scale Tool - 오브젝트 크기 조절
* Rect Tool - UI와 2D 오브젝트 크기 조절
* Transform Tool - Translate, Rotate, Scale 합친거 한번에
오브젝트 선택후 해당 기능이 활성화 된것에 따라 위치, 회전, 크기 등을 조절 할 수 있다.
단축키는 순서대로 Q W E R T Y 이다.
그외에 화면 이동 및 조작 기능
- 오브젝트 선택 후, f : 해당 오브젝트 focus
- 마우스 휠 버튼 : 화면 좌우 상하 이동
- Alt + 마우스 왼쪽 : 화면 회전
- 마우스 오른쪽 + (WASD 키) : 게임하듯이 화면 이동
상황에 따라 편한걸로 사용하면 될듯
3. Gizmo(기즈모)
씬창에서 오브젝트 위에 표시되는 아이콘, 편집 도구, 화살표, 외곽선 등을 기즈모라고 부른다. 개발자의 편집화면에서만 표시가 되고 실제 실행화면에서는 나타나지 않는다.
4. Rigidbody Component
Rigidbody의 사전적 의미는 "강체"라는 뜻으로, 오브젝트에 해당 컴포넌트를 추가할 경우 Unity에서 제공하는 물리엔진의 기능을 사용할 수 있게 해준다.
중력, 충돌, 충격 등의 물리적 기능이 기본적으로 적용이 되므로 공중에 떠있는 오브젝트에 해당 컴포너트를 추가하기만 해도 실행 시 자동적으로 중력에 의해 바닥으로 떨어진다.
5. MonoBehaviour Class
Unity에서 기본 스크립트 생성 시, 모든 클래스들은 해당 클래스를 상속받는 것을 default로 생성된다. 자세히 공부는 하지 않았으나 Android의 Object class , View Class처럼 최상위 클래스라고 이해했다.
그리고 특이한 점을 한가지 발견했는데... 해당 클래스를 상속받은 클래스를 생성할때는 new 키워드를 사용하지 않는다 라는 것이다.
// GmaeManager, PlayerController는 MonoBehavior 클래스를 상속 받고, 필자가 생성한 클래스
GameManager gameManager = FindObjectOfType<GameManager>();
PlayerController playerController = other.GetComponent<PlayerController>();
해당 코드 처럼 new 키워드 없이 객체를 생성했다.
6. Start() , Update() 메소드
스크립트 생성시 기본적으로 생성되는 함수이다.
1. Start()
객체 생성시 실행되야 하는 코드 작성 (생성자라 생각중임)
2. Update()
초당 프레임 만큼 호출되는 함수. 컴퓨터는 초당 약 60회의 프레임, 영화는 초당 약 24회의 프레임을 갖는다. Update() 함수는 그러한 프레임 수만큼 호출되며 오브젝트의 움직임, 사용자의 입력을 실행하는 것. 하지만 프레임의 수는 컴퓨터의 성능 마다 다를 수 있기에 모든 상황에 따라 같은 객체라도 Update()호출 횟수가 다를 수 있다.(FPS 게임하면서 핑 조절되는게...이거 때문인듯? 아닌가?)
7. Prefab(프리팹)
언제든지 재사용할 수 있는 게임 오브젝트를 의미한다. 예를 들어 전쟁게임을 만들며 유니티에서 K2총을 구현하였다. 이 총은 한번만 사용하는 하는 것이 아닌 전쟁게임에 등장하는 많은 군인들이 사용되어야 한다. 그렇다면 해당 총을 구현 후, 프리팹화 하여 Project에 넣고 원할때마다 Hierarchy에 가져다가 사용하면 된다.
보통 Hierarchy에서 구현 하고, project 탭으로 옮겨 프리팹화 하는듯? 프리팹화 된 오브젝트는 Hierarchy 창에 파란색으로 표시됨
8. 기타 공부내용
* Hierarchy 창 > 오브젝트 선택 > Ctrl+D : 오브젝트 복제
GameObject 는 컴포넌트 입장에서 자신이 추가된 게임 오브젝트를 가리키는 변수
GetComponent() 메소드 : 원하는 타입의 컴포넌트를 자신의 게임 오브젝트에서 찾아오는 메소드.제네릭을 통해 다양한 객체를 가저올 수 있음
추후 더 학습이 필요한 부분
Rigidbody Constraints
콜라이더
OnCollision
OnTrigger