목차
특징
- 통합 인터페이스
 - 통합 에셋 시스템 : 게임 제작에 사용되는 파일을 에셋이라고 함
- 모델링 : 3dxMax, Maya, Cheetah3D, Cinema4D, Blender, Modo, Lightware, Softimage xsi, FBX, collada
 - 텍스쳐 : psd, png, gif, bmp, tga, pict
 - 오디오 : wav, mp3, ogg, aiff, mod, it, s3m, xm
 - 비디오 : mpeg, mov 3D 화면 안에서 재생 가능
 
 - 렌더링
- 디퍼드라이팅 시스템
 - SSAO, Bloom, DOF 외 26가지 PostEffect 제공
 - Halo, Flare, Cookie, Projector
 
 - 쉐이더
- Cg –> GLSL로 자동 변환 지원
 - 나머지는 이해 안되니 패스.(2012-11-15)
 
 - 애니메이션 기능
- 모핑 애니메이션이라..?
 
 - 파티클 시스템
 - 물리 엔진 기능
- 물리 재질을 통한 충돌 효과
 - 캐릭터 컨트롤러
 
 - 프로그램 기능
- C-Sharp, JavaScript
 - 코드 디버깅
 - 비주얼스튜디어와 연동(이 된단 말인가??)
 
 - 2D 게임 제작
- 직교투영(?)방식 카메라 지원
 - GUI 제작을 위한 컨트롤 제공
 
 - 자동 길찾기 시스템
 
Asset Store
- 무료도 있고, 유료더라도 모델링, 텍스쳐를 구할 수 있다는건 유용해보인다.
 
Asset Store - 설치
- SmartStudioFree
 - Detonator Explosion Framework v1.04
 - Free ArtskillZ texture Pack 01 v1.0
 - Spawner - Free v1.7
 - Stone v2.0
 
Asset Store - 찜, 쓸 기회가 있다면 좋겠다 싶은 것들
- Unlimited Mixamo Animation Store
 - Ultimate FPS Camera
 - NGUI : HUD Text
 - Advance Fantasy AI Free Edition ( free )
 
인터페이스
최초 프로젝트를 생성하면 빈 화면에 Main Camera 하나만 보이는데,
- 카메라를 선택하면 카메라 preview가 보인다.
 
레이아웃을 보기 편하기 2-3 형태에서 약간 변경해서 사용.
- <color orange>GameObject » Create Other » Cube</color> 메뉴를 선택해서 3차원 공간에 큐브 생성.
 - 큐브를 이리 저리 움직여보면, 게임 프리뷰 화면에 까만 물체가 움직이는게 보인다.(까만물체=큐브)
 - 계층Hierarchy뷰에서 Cube나 MainCamera를 선택 & 더블클릭하면 해당 물체가 확대된다.
 
라이트 추가
- 메뉴에서 <color orange>GameObject » Create Other » Directional Light</color> 빛 추가
 - 빛을 이리 저리 움직여보면 큐브에 그림자가 달라진다.
 
뷰와 관련된 기능
- 특정 뷰에 커서를 가져가서 <color darkorange>Ctrl Space</color>를 누르면 확대, 다시 누르면 원상 복귀.
 
씬뷰의 조작
| 이동 방식 | 사용하는 키(조작법) | 
|---|---|
| 자유회전 | 마우스 오른쪽 버튼 누름 | 
| 가운데를 중심으로 회전 | Alt 누름 상태 + 마우스 왼쪽 버튼 | 
| 확대/축소 | 마우스 휠 또는 Alt 누름 상태 + 마우스 오른쪽 버튼 | 
| 이동 | 마우스 가운데 버튼 | 
| 핸드툴이 선택된 상태에서 마우스 왼쪽 | |
| Alt + Ctrl + 마우스 왼쪽 버튼 | |
| X, Z 축 이동 | 화살표 | 
| 이동 속도 빠르게 | 화면 이동 중에 추가로 Shift 누름 | 
| <color orange>카메라 자유 비행</color> | 마우스 오른쪽 버튼 누름 + WASDQE 키로 FPS 게임처럼 이동 | 
| 선택한 물체에 포커스&중심 확대 | 오브젝트 선택 후 F키, 또는 계층뷰에서 더블클릭 | 
| 퍼스펙티브 뷰 « » 아이소메트릭뷰 전환 | 씬뷰(Scene)의 오른쪽 위의 기즈모를 Shift키를 누른 상태에서 클릭 | 
| 퍼스펙티브 뷰 : 원근감 있는 뷰 | |
| 아이소메트릭 뷰 : 원근감 없는 뷰 (모든 물체가 같은 크기로 보임) | 
트랜스폼툴
Scene, Game 뷰를 제외한 나머지 뷰에 마우스를 가져가서
| 핸드툴 | 변환툴 | 회전툴 | 스케일툴 | 
|---|---|---|---|
| Q | W | E | R | 
핸드/변환/회전/스케일 툴 선택시 인터페이스
- 오브젝트 중심의 회색박스를 선택하며 드래그 하면 전 축에 균등 적용
 - Red/Green/Blue의(x,y,z)축의 박스를 선택하면 해당 축만 적용
 
트랜폼 기즈모
- Pivot or Center : 오브젝트에 설정된 중심(Pivot)으로 할 것인지 or (오브젝트 또는 오브젝트 그룹(부모자식 설정이 있다면) 전체)의 중심으로 뭔가 할 것인가?
 - Local or Global : 오브젝트 중심의 좌표 or 현재 뷰 중심의 좌표
 
씬뷰의 렌더모드
- RGB : 보통 결과
 - Alpha : 알파값을 사용하는 물체에 대해서 알파값이 어떻게 적용되어 있는지 흑백을 보여준다.
 - OverDraw : 여러 물체 간에 겹치는 영역이 많을 경우, 이를 오버드로우라고 하는데 현재씬의 오버드로우가 얼마나 되는지 보여줌. (오오오오)
 - MipMaps : 카메라와 물체 간의 거리에 따라 밉맵 텍스쳐가 잘 적용 되었는지 보여주는 기능. 빨간색일수록 필요 이상 크기가 사용되었고 파란색일수록 작다는
 
계층뷰 (Hierachy)
- 부모, 자식 관계 설정 가능. 자식이 될 오브젝트를 부모가 될 오브젝트에 Drag And Drop 하면 된다.
 
프로젝트뷰(Project)
- 아.. 뭐 중요한게 있나?
 
게임뷰(Game)
- 스탯 Stats : 현재 씬의 중요한 정보들, 최적화에 사용된다고 한다.
 - 기즈모 Gizmos : 씬Scene뷰에서 설정한 기즈모가 게임뷰에서도 보이게끔. 테스트 용도.
 
스내핑
<color orange>Ctrl</color>키를 누르고 이동/회전/스케일을 하면, 설정에 저장된 스냅 크기만큼 적정 크기만큼 딱딱 끊어지면 움직인다.
정점 스냅 기능
Move (키 W) 모드에서,
= V : 키를 누르고 있으면 정점 스냅 모드가 되면서 움직을 정점을 선택할 수 있다. = : 정점 선택후 (v키는 누르고 있고) 마우스를 드래드하면 = : 붙이고 싶은 오브젝트에 갖다 붙일 수 있다. 한개의 오브젝트가 되는건 아니고, 위치 배열을 딱 붙어 있도록 할 수 있다. = Shift+V : 키를 누르면 정점 스냅 기능을 on/off 할 수 있다.
뷰 이동 기능
= Ctrl+Alt+F : 선택한 오브젝트를 씬(scene)뷰의 중심으로 가져가는 기능 = : 특정 오브젝트를 선택한 뒤, <color orange>**Ctrl+Alt+F**</color> 또는 \\ 메뉴에서 <color orange>**GameObject >> Move To View**</color> = Ctrl+Shift+F : **씬 뷰의 회전 정보까지 동일하게 일치하는 화면 중심으로 이동하고 싶을때** \\ 카메라를 선택하고 이 기능을 실행해보면, \\ 내가 씬 뷰에서 보고 있는 화면 그대로 보여지는 위치로 카메라가 이동된다. = : 메뉴에서 <color orange>**GameObject >> Align with View**</color>
표면 접점 기능
아래의 키를 모두 누른 상태에서 실행
= Shift + Ctrl : <color orange>Shift + Ctrl</color> 키를 누르면, 표면 스냅 기능이 활성화되어 (계속 이 두개의 키를 누른 상태로) 이동하면 표면에 붙는다. = Shift + Ctrl + V : 특정 버텍스를 중심으로 표면에 스내핑 된다. 오브젝트 표면에 착 붙이고 싶을때 유용하다.
프로젝트 구조
계층 형식으로 이런 형태를 갖는다.
- 프로젝트
- 씬(Scene)
- 게임오브젝트(GameObject)
- 컴포넌트(Component) :
트랜스폼, 카메라, 라이트, 메쉬필터, 메쉬렌더러, 스크립트 
 
 - 에셋(Asset)
- 모델링 데이터
 - 텍스쳐 데이터
 - 오디오 데이터
 
 
 
에셋들은 Edit » Import New Asset 메뉴 (또는 프로젝트뷰로 드래그앤드드롭) 불러 오는데, Asserts 폴더에 저장된다.
- 탐색기에서 에셋을 변경 (파일이름변경)등을 하면 깨질 수 있으므로 주의
 
패키지
- 패키지를 불러올때는 한글이면 잘 안된다고 함.
 - 나머지는 필요할때 보지 뭐, 패스.
 
프리팹 Prefab
- 프리팹Prefab 오브젝트 생성과 관리를 수월하게 해주는 편리한 기능.
 - 프리팹 에셋을 제작하고 이미 만들어진 게임 오브젝트를 드래그해서 설정(???)
 - 프리팹을 변경하면, 프리팹으로 만든 다른 실제 오브젝트들에도 변경된 설정이 동일하게 적용된다. (편리하겠네)
 
만드는 방법
- 계층 구조를 가진 오브젝트 그룹을 만든다. (부모,자식 관계겠지) ← (A)
 - 프로젝트Project 뷰에서 Create 버튼을 누르고 Prefab를 선택
 - Prefab에 이름을 짓는다. ← (B)
 - 계층Hierarchy 뷰에 있는 (A)를 프로젝트Project 뷰의 (B)에 갖다 놓는다. (Drag And Drop)
 - 만들어진 Prefab를 사용한다.
 
지형
퀵 만들어보기
- <color darkorange>Terrain » Create Terrain</color>
 
포그Fog
- 나중에 다시 정리.
 
스카이박스sky
- 스카이 에셋 로드
 - <color darkorange>Edit » Render Settings</color> 에서 스카이 선택
 
물효과
플레어/헤일로
프로젝터
특정 위치에 카메라 영역을 설정하고, 이 영역과 어떤 물체가 교차하는 표면에 특수효과를 부여하는 컴포넌트…., 바닥에 동그란 그림자를 만들 수 있다
간단한 예,
- 프로젝트 뷰에서 <color darkorange>Import » Projects</color> 메뉴를 선택해서 프로젝터 샘플을 읽어온다.
 - 바닥을 바라보도록 조정해보면 바닥에 동그란 그림자가, 그림자라고 생각하면 그림자, 보인다.
 - 그림자가 적당해지만, <color darkorange>GameObject » Create Other >. Sphere</color> 메뉴를 사용해서 구를 생성하고 프로젝터 아래쪽에 배치한다.
 
구체에 그림자가 생기기 않게 하려면,
- Edit » Project Settings » Tags 메뉴를 쓰거나 인스펙터Inspector의 Layer 버튼을 누르고 Add Layer 메뉴 선택.
 - User Layer 8번 (아무 곳이나) 'noProjector' 로 레이어 추가
 - 프로젝터를 선택하고 인스펙터에서 Ignore Layers에서 noProjector 선택.
 - 구체를 선택하고 인스펙터에서 Layer를 noProjector로 선택.
 
1인칭 컨트롤러 추가
- 카메라가 2대 이상일 경우, 사용할 것만 acitve. 나머지는 off.
 - 바닥에 딱 붙어 있지 않은 경우, 기즈모 툴에서 이동선택 » <color darkorange>Ctrl + Shift</color> 누른 상태에서 가운데 영역을 드래그 하면 딱 바닥에 붙일 수 있다.
 
렌더링 시스템
쉐이더
- 맥/아이폰/안드로이드 전용 : GLSL 구문도 오케이. 하지만 멀티 플랫폼이면 Cg로 작성 필요.
 
내장 쉐이더 규칙
- Transparent Cutout : 재질 일부분을 완전히 없애서 보여줌
 - Vertex-Lit : 메쉬의 정점 단위로 빛을 계산 후 정점간 보간을 통해 물체를 표현..
 - Unlit : 빛을 고려하지 않고 물체를 표현. gui나 2d이미지를 그대로 표현할때 사용
 - Decal : 재질 위에 이미지를 덧 씌운 효과를 낼때
 - Mobile : 모바일용
 
셰이더랩
- 셰이더이름 / 속성(Property) / 서브셰이더(SubShader)
 
서브셰이더
- 셰이더랩에 선언된 서브셰이더가 실행 되고, 하드웨어 문제로 실행 되지 않으면 다음에 선언된 서브셰이더가 실행 된다.
 - 태그(Tag)와 패스(Pass)로 구성.
 
태그
동작방식을 지정하는 설정항목. 키와 값으로 구성
- Queue : 렌더링 순서
 - IgnoreProjector : 프로젝터의 영향을 받는지?
 - RenderType : 셰이더 종류를 분류하는데 사용. 셰이더가 분류 되면, 특정 카메라에 지정한 셰이더 종류만 보이게 하는 셰이더 리플레이스먼트(??) 기능이 사용 할 수 있다.
 
패스
음 복잡해서 다음에 읽어보면서 다시 정리
물리엔진
물리엔진의 구성 요소
- 리지드바디(RigidBody) : 질량(mass) / 저항(drag) / 중력(Gravity)
 - 충돌체 : 물리재질 –> 마찰(Friction) / 반동(Bounciness)
 
충돌체
- 박스형 / 구형 / 캐슐형(사람이나 나무 같은)
 
메쉬충돌체
- FBX 임포터에서 모델링을 불러들일 때 “Generate Mesh Collider” 옵션을 설정하면 자동으로 생성 된다.
 
프로그래밍
오브젝트마다 코드를 추가하면 자동을 찾아서 실행하는 함수
- Awake : 구동준비가 끝나면
 - Start : 첫 프레임을 그리기 전에
 - Update : 매 프레임마다 호출
 - LateUpdate : Update 다음에 호출
 
이벤트 발생시마다 호출되는 함수
- OnDestroy : 삭제될때
 - OnEnable : (vs OnDisable) 게임 오브젝트가 활성 또는 비활성 될때
 - OnCollsionEnter / OnCollsionStay / OnCollsionExit : 리지드바디간 충돌발생시
 - OnTriggerEnter / OnTriggerStay / OnTriggerExit : 충돌체에 물체 접근이 감지 될때
 - OnControllerCollideHit : 캐릭터 컨트롤러가 충돌될때
 
유니티 스케일 : 단위
- 1의 단위는 1m. 이렇게 정해놓으니 편하네.
 
나중에 다시 정리
3D 모델을 유니티에서 불러올 때 고려할 사항
정점 데이터 증가
- 유니티 : 정점1개 = 노멀1개, 색상1개, UV1개.
 - 한 정점에 노말이나 색상 정보가 한개 이상일때, 추가 정점을 만들어버린다.
 
권장포맷
- FBX
 - 3dsmax나 maya 모델링을 읽어올 수는 있지만 내부에서 FBX로 변환해서 읽어옴.
 
다른 좌표축을 사용하는 모델러들
- 유니티 : Y축이 위쪽
 - Z축이 위쪽인 sw의 경우 트랜스폼 필요
 
유니티 스케일
- 1은 1m
 
재질
쉐이더
- 미리 만들어진 쉐이더 제공
 - 쉐이더 속성을 변경해서, … 어쩌라는거지.
 
텍스쳐
- 텍스쳐의 용도에 맞게 항목 선택
 
나중에 다시 정리 2
- 메쉬를 스크립트에서 만드는 경우, 플레이를 눌러야 제대로 반영이 된다.
 
키워드정리
gameObject Transform Rotate Translate Input Time TimeDelta Space.World Space.self eulerAngles





