유니티3D_4

Download Report

Transcript 유니티3D_4

한국IT전문학교 박재성

모 바 일 게 임 제 작

게임 제작의 기초(1)

4 장

모 바 일 게 임 제 작

4.1 유니티의 거리 단위(Unit) - Unit은 가상의 거리 단위 - 유니티에서 유닛은 미터(m)로 설정한다.

4.2 컴포넌트와 속성 - 속성 : 오브젝트의 위치, 방향, 질량 등 개별적인 값.

- 컴포넌트 : 서로 관련된 속성을 묶어둔 것..

4.2 컴포넌트와 속성 (1) Transform - Position : 원점으로 부터 거리가 Unit으로 표시됨.

- Rotation : 각 축에 대한 회전각을 60분법으로 표시. 시계방향이 양(+)의 방 향 - Scale : 각 축에 대한 확대/축소 비율 표시

4.2 컴포넌트와 속성 (2) Collider - 충돌체. 오브젝트의 피부와 같은 개념.

- 콜라이더가 없으면 충돌을 일으킬 수 없어서 다른 물체가 뚫고 지나간다.

- 3ds Max등 외부 프로그램에서 만든 오브젝트는 콜라이더가 없음.

4.2 컴포넌트와 속성 (3) Rigidbody - 물리적인 특성을 부여하는 컴포넌트.

- 충돌을 탐지하는 오브젝트에는 리지드바디가 있어야 한다.

- 벽과 공이 충돌할 때 충돌을 공에서 처리하려면 공에 리지드바디가 있어야 하고, 충돌을 벽에서 처리한다면 벽에 리지드바디가 있어야 한다.

4.3 유니티의 좌표계 (1) World 좌표계 - 화면의 중심이 원점(0, 0, 0)이 됨.

- 카메라의 위치와 회전 상태에 따라 원점이 달라 진다.

- 카메라를 x축 기준으로 90도 회전시켜 카메라가 바닥을 보게 하면, y축과 z 축이 바뀜.

4.3 유니티의 좌표계 (2) Screen 좌표계 - 화면의 왼쪽 아래가 원점(0, 0)이 됨.

- 마우스 클릭이나 터치는 스크린 좌표계를 이용한다.

- 카메라와 상관없이 항상 일정 하다.

4.3 유니티의 좌표계 (3) GUI 좌표계 - 화면의 왼쪽 위가 원점(0, 0)이 됨.

- GUI는 화면에 글자나 버튼등을 표시할 때 사용.

4.3 유니티의 좌표계 (4) Viewport 좌표계 - 화면의 왼쪽 아래가 (0, 0), 오른쪽 위가 (1,1)이 됨.

- GUI Text와 매트리얼의 Offset을 설정하는 데 사용.

4.4 유니티의 Vector - Vector2 : 평면의 위치, Vector2(x, y) - Vector3 : 공간의 위치, Vector3(x, y, z) - Vector4 : 4개의 값, Vector4(r, g, b, a)

4.9 오브젝트의 낙하 - Plane과 Sphere를 추가 - Sphere에 Rigidbody추가. Component > Physics > Rigidbody

4.10 오브젝트의 반사 - Project뷰에서 Create > Physic Material 추가. 이름을 Bouncy로 변경 - Sphere에 Bouncy 적용.

4.11 사운드 연주 - Project뷰에 사운드 파일을 추가 한다.

- Sphere에 오디오 클립을 드래그 하여 Audio Source 를 추가한다.

4.12 충돌의 판정 - Create > C# Script 선택. CsBall.cs 생성 1) 클래스명과 파일명은 같아야 함.

2) 영문 대소문자 구분 있음 3) 메서드 이름과 자료의 형은 첫 문자를 대문자로 한다.

- Start() : 게임이 시작될 때 한 번 실행됨.

- Update() : 게임의 매 프레임 마다 호출됨. 게임 Loop.

Void OnCollisionEnter(Collision coll){ audio.play(); }

4.12 충돌의 판정 - Sphere에 스크립트를 연결한다.

4.13 오브젝트 움직이기 - CsMove.cs 생성 int speed=5; // 5 m/s. 속도= 거리/시간 Void Update(){ float amtMove=speed*Time.deltaTime; transform.Translate(Vector3.forword*amtMove); //transform.Translate(new Vector3(0,0,1)*amtMove); } - 스크립트를 Cube에 연결

4.14 월드 좌표와 로컬 좌표 - 월드좌표 적용 transform.Translate(Vector3.forward, Space.World); - 로컬좌표 적용 transform.Translate(Vector3.forward, Space.Self); //기본값

4.15 Key로 이동 및 회전하기 - 좌우 이동 float amtMove=speed*Time.smoothDeltaTime; float keyForward=Input.GetAxis(“Vertical”); //상,하 키 float keySide=Input.GetAxis(“Horizontal”); //좌,우 키 transform.Translate(Vector3.forward*amtMove*keyForward); transform.Translate(Vector3.right*amtMove*keySide); transform.Translate( new Vector3(keySide, 0, keyForward) * amtMove);

4.15 Key로 이동 및 회전하기 - 회전 Int rotSpeed=120; float amtRot=rotSpeed*Time.smoothDeltaTime; float keyRot=Input.GetAxis(“Horizontal”); //좌,우 키 transform.Rotate(Vector3.up*amtRot*keyRot); // y축 기준으로 회전 * Time.smoothDeltaTime 은 첫 프레임부터 현재프레임까지의 평균 경과시간을 의미 한다. Time.deltaTime보다 오브젝트의 움직임이 더 부드럽다.

4.16 계층적인 오브젝트 - 탱크를 만든다.

- 탱크에 텍스처를 매핑한다.

포신을 포탑의 하위 개체로 설정한다.

- 빈오브젝트를 만들어서 본체와 포탑을 결합한다.

- 스크립트 CsTank.cs를 작성하여 탱크에 적용한다.

4.16 계층적인 오브젝트