SH 개인공부용 문제 해결 정리

텍스처(Texture)

텍스처란 3D 모델의 표면에 그려지는 이미지 파일을 지칭한다. 마네킹에 다양한 옷을 입힐 수 있는 것처럼 3D 모델에 텍스처를 입힌다고 표현하면 이해하기 쉽다.

유니티는 텍스처의 원본을 보존한 상태로 압축하는 기능을 제공하며,텍스처의 크기는 가로세로가 2n 형태일 때 압축을 지원하며 속도가 가장빠르다.


머티리얼(Material)

텍스처는 3D 모델에 적용하기 위한 이미지 파일로, 중간에 머티리얼이라는 매개체가 필요하다. 머티리얼은 3D 모델에 적용할 텍스처의 다양한 속성을 설정하는 역할을 한다.

텍스처 적용 방법

Material 생성 -> 텍스처 이미지를 Material에 적용 -> Material을 게임오브젝트에 적용


셰이더(Shader)

셰이더는 머티리얼에 적용한 텍스처를 렌더링할 때 표면의 재질감을 표현하는 방법을 결정한다.


프리팹(Prefab)

프리팹의 사전적 의미는 조립식 주택 또는 미리 부품을 만들어 놓고 현장에서는 조립만 하는 건축 기법을 의미한다. 즉, 자주 사용하는 객체를 미리 부품처럼 만들어 놓고 재사용할 수 있게 하는 것이다.

프리팹으로 만든 게임오브젝트를 10개를 배치했다면 변경사항이 생길시 원본 프리팹만 수정하면 나머지
복사본들도 한꺼번에 적용되는 장점이 있다.
조명(Light)

Directional Light – 전체 화면에 균일하게 빛을 비추는 태양과 같은 조명이다.
Point Light         – 백열전구와 같은 성격을 띤다. Point Light의 중점을 기준으로 주변으로 퍼져나간다.
Spot Light          – 손전등과 같이 콘(Corn) 모양으로 빛을 발하는 조명이다.
Area Light          – 사각형 형태의 조명으로 한쪽 면에서 빛을 발하는 조명이다.
하늘 표현 방식

① Skybox – 카메라가 볼 수 있는 하늘의 여섯 방면의 이미지를 Cube 형태로 배치해서 표현한다.
Material을 생성한 후 Shader 속성을 RenderFX – Skybox로 설정 -> 텍스처 지정
-> Edit – Render Settings를 선택 후 Skybox Material을 지정

② SkyDome – Dome 형태의 메쉬에 하늘의 이미지 텍스처를 입혀 구현한다.
Skybox와는 다르게 DrawCall을 1장만 소모한다는 장점이 있다.
게임 오브젝트

3D 모델을 Scene 뷰에 배치하는 방법으로 두 가지가 있다.

1. 3D 모델을 그대로 사용하는 방식
2. 빈 게임오브젝트를 먼저 생성하고 그 게임오브젝트에 사용할 3D 모델을 하위로 배치해 차일드화 하는 방식

전자는 스테이지 디자인에 사용되는 정적인 모델을 배치할 때 사용하고, 주인공 캐릭터나 적 캐릭터 등 로직이 들어가는 모델은 대부분 후자의 방식이 좀 더 편리한 경우가 많다. 또 후자의 방식으로 캐릭터를 배치했을 경우
위치 이동시 Scene 뷰에서 직접 마우스로 클릭하지 말고 반드시 Hierarchy 뷰에서 해당 오브젝트를 클릭한 후
배치시켜야 한다.

컴포넌트

유니티는 컴포넌트 기반 개발(CBD : Component Based Development) 방법론을 제공한다. 오브젝트에 필요한 기능을 하나씩 추가하는 방식으로 개발 속도가 빠르고 재사용성이 높은 효율적인 개발 방법론이다.

컴포넌트 중 Transform 컴포넌트는 유일하게 삭제할 수 없다. 3D 공간에서 오브젝트를 표현하기 위한
가장 기본적인 속성이다.

 

기준 좌표계: unity에서는 local좌표, world좌표 두 개의 기준 좌표를 가지고 있다.

 

레거시 애니메이션(Legacy Animation): 3D Animation Tool에서 제작한 애니메이션

로컬 좌표(Local 좌표): 해당 게임오브젝트의 고요좌표, Space.Self

메카님 애니메이션(Mecanim Animation): 모션 갭처 애니메이션. 리타겟팅을 이용해 기존 애니메이션을 재활용 할 수 있다.

변위 값: 물체가 위치를 바꾼 값

월드 좌표(World 좌표 or Global 좌표): 3차원 공간에서 바뀌지 않는 기준이 되는 좌표.   Space.World

오일러 각(Euler Angle): 수학자 오일러가 고안함. 3차원 공간의 절대 좌표를 기준으로 물체가 얼마나 회전했는지 측정하는 방식.

짐벌락 현상(Gimbal Rock): 같은 방향으로 오브젝트의 두 회전 축이 겹치는 현상. 오브젝트가 회전하려고 하는 방향으로 오브젝트가 회전하지 않는 것.

쿼터니언(Quaternion): 4차원 복소수(four-dimensional complex number). 세 개의 축을 동시에 회전.

Attribute: 속성

colider: 충돌체

inspector: 속성

iso: 2D 화면

normalized: 벡터 정규화 ex)Vector3.normalized

Magnitude: 벡터의 크기

Mathf.LerpAngle(float a, float b, float t): t 시간 동안 a부터 b까지 변겨오디는 각도를 반환
ex) float angle = Mathf.LerpAngle(flaot a, float b, Time.time);

mesh: 랜더링을 구성하는 점들의 집합

persp: 사람이 보는 시각 화면

pivot: 오브젝트의 중심점

prefabs: 공장에서 찍어낸 벽돌, 오브젝트 복사

Roate: 게임 오브젝트를 회전
ex) transform.Rotate(회전할 기준 좌표축 * Time.deltatime * 회전속도 * 변위값)

scene: 게임의 한 페이지

Time.deltatime: 이전 프레임부터 현재 프레임까지 걸린 시간을 의미

Transform.position: 해당 축의 값을 변경해 게임 오브젝트를 이동시킨다.
ex)Transform.position += new Vector3(0, 0, 1);

Transform.Translate: Transform.position을 좀 더 편하게 사용할 수 있게 하는 이동 로직
ex)Transform.Translate(이동방향 * 속도 * 변위값 * Time.deltatime, 기준좌표계);

Update(): 매 프레임(frame)마다 한 번씩 호출되는 함수. Update에서 접근해야 할 컴포넌트
는 Awake나 Start 함수에서 미리 변수에 할당해 주는 것이 좋다.
ex)30프레임 디바이스 환경을 경우 1초당 30번 호출된다.

Project 

1 Project = 1 Game or 1 Contents (하나의 게임을 관리하는 기본 단위)

Project(프로젝트)는 가장 큰 단위의 집합으로 여러분이 작업하시고 저장하게 되는 하나의 콘텐츠은 한개의 프로젝트 안에서 관리되어 집니다.

유니티를 실행하면 오픈 프로젝트가 있는데, 어떤게 프로젝트 파일인지 모르겠더군요.

프로젝트 저장.만 있지 Save as Project… 라는게 없어서 어떻게 저장되는지도 모르겠어요.

그래서 항상 씬을 더블클릭해서 유니티를 열고 있습니다.

Scene 

게임제작을 위해 제공되는 3차원 가상 공간을 뜻하며 씬을 여러개로 분리하여 작업 할 수 있습니다.

즉 만드는 컨텐츠는 여러 개의 씬이 모여 만들어 진다고도 볼 수 있겠습니다.

예를들어 여러분이 자동차 게임을 만든다면 그 자동차 게임이 Project(프로젝트)가 될 것이며, 한국 트랙, 일본 트랙, 미국 트랙, 자동차 정비소 등등이 각각의 Scene(씬)으로 분리된다고 보시면 되겠습니다.

Scene을 분리하는 이유를 설명드리자면 집을 안방, 거실, 마루 등 구역을 분리하여 그 공간을 효율적으로 사용하는 것과 비슷하다고 보시면 되겠습니다.

제가 유니티 관련 서적을 보니 대부분 로그인 씬, 게임 씬, 게임 결과 씬, 메인 메뉴 씬 등으로 나누어 제작되더군요.

Game Object

Game Object(게임 오브젝트)는 말 그대로 오브젝트를 뜻합니다.

사람, 자동차, 적, 공, 집, 빛 등등 콘텐츠 안에서 실제적으로 보여지는 각각의 물건, 물체라고 보시면 되겠습니다.

 

Components 

Components(컴퍼넌트)는 게임 오브젝트를 구성하는 요소들로 보시면 되겠습니다.

예를들어 자동차의 컴퍼넌트는 자동차의 위치, 크기, 방향, 색, 무게, 재질 등등 오브젝트의 특성들을 관리하기 위한 것들로 볼 수 있습니다.

때문에 모든 오브젝트에는 자세한 특성을 다루워 주어야 하는 컴터넌트가 있어야 하며 컴퍼넌트들이 모여 하나의 게임 오브젝트를 만든다고도 볼 수 있습니다.

 

Assets 

Assets(에셋)은 씬을 구성하기 위해 공용으로 사용되는 물질적인 자원을 뜻합니다. 여기서 중요한 말은 공용이 될것 같네요.

쉽게 설명드리자면 여러분이 그림을 그릴때 사용하는 도구들 중 물감을 에셋으로 볼 수 있습니다.

여러가지 물감(에셋)을 파레트에 옮기고 물과 물감을 섞어 색을 만들에 되면 그것이 컴퍼넌트이며,

그림을 그리는 것이 게임 오브젝트를 만드는 과정이며 하나의 도화지가 씬이라고 볼 수 있을것 같습니다.

그렇기 때문에 씬에서 보이는 이미지나 모델링 정보는 모두 에셋에서 관리되어 진다고 볼 수 있습니다.

Package 

Package(패키지)는 에셋에 부과 정보를 포함 시킨 파일 형태로 보시면 되겠습니다.

원본 파일 정보에 부가 설정 정보가 포함되어 있는 것입니다.

예를들어 여러분이 새롭게 오브젝트를 Unity3D로 불러 들인다면 기본적인 정보만이 포함되어 있겠지만

패키지 안에는 오브젝트의 위치, 스케일, 애니메이션, 각종 효과들까지 함께 저장이 될 수 있습니다.

또한 패키지는 불러올 수도 있지만 내보낼 수도 있어 A 프로젝트에서 작업한 물 효과를(여러가지 설정을 마친 상태)

패키지 형태로 내보내고 B 프로젝트에서 불러들인다면 작업했던 정보가 포함된 그대로를 이용할 수 있는 것입니다.

패키지는 오브젝트 형태로 내보내고 받지만 한개의 오브젝트가 아닌 수십~수천개의 오브젝트를 엮어 보낼 수도 있습니다.

마지막으로 유니티에서는 기본으로 제공하는 패키지가 있습니다.

매우 많고 유용한 패키지들이 있으며 이 패키지들만 잘 이용해도 만들고자 하는 콘텐츠를 빠르게 완성하는데 도움이 될 것입니다.

 

Prefab 

Prefab(프리펩)은 프로젝트를 관리하는데 있어 가장 중요하고 편리한 기능이라고 볼 수 있습니다.

오브젝트의 생성과 관리를 수월하게 만드는 일종의 설계도면으로 붕어빵 기계와 비슷한 역할을 한다고 볼 수 있습니다.

예를들어 건물의 기둥이 100개가 필요하다고 하면 한개의 기둥을 프리펩화 시키고

이를 100개 복사하면 똑 같은 기둥이 100개가 생기고, 만약 그 기둥의 길이를 몇 미터 줄이고 싶다면 프리펩 한개의 길이만 줄이게 되면 나머지 99개의 기둥도 똑같이 길이가 줄어 들게 됩니다.

만약 프리펩을 시키지 않았다면 나머지 99개의 길이도 일일히 다 조정해야 겠죠?

 

1. 3D용어

3D 그래픽스 좌우, 앞뒤, 상하를 표현한 그래픽스
3D 그래픽스는 삼각형 폴리곤이 기본이고 이를 모아서 만든것이 Mesh라고 하며 모델을 생성한다.
vertex는 두선의 정점
edge는 모서리
point는 점
segment
3d오브젝트 좌표계 y,x,z축으로 구성
world 좌표계
PS) 카메라 셋팅이 중요하다. 건물이 안보일수도 있다.

2. 카메라
– 카메라 오브젝트와 대상이 되는 오브젝트의 위치를 카메라에 오브젝트가 개발자가 의도한대로 위치 시킨다.
– 카메라 속성

– 투영법 -> 직교투영 – 원근감이 없는것 3d이지만 2d게임을 만들고 싶을때 쓴다. Orthographic

-> 원근투영 – 원근감이 있는것 뒤에 있는것은 작아진다. Perspective
– frustum : 절두체 피라미드 머리를 날린다. Far와 Near를 이용하여 화면을 비율적으로 본다.
near이 0.3으로 되어 있는 이유 보이는 것이 있어야 하긴 때문에 0이 될수 없다.

Far을 잡아 랜더링 할 부분까지 정해준다. 즉 최대 시야 범위를 정한다. 이 범위 만큼 리소스를
먹기 때문에 잘 정해줘야 한다. Far끝부분은 포그로 막아준다.
– field of view : 화면의 각도를 늘리고 줄인다.

– 원근법
3. 화면구성
Scene – 화면 배치
Game – 실제 게임에서 보이는 화면
Project – 는 클래스라고 보면된다
Hierachy – 는 인스턴스라고 보면된다.
Inspector – 구성요소
transform – 객체 크기 위치 기울기 조정
GameObject – 객체
Component – 구성 메서드
PS) 3D는 오브젝트의 크기가 별로 중요하지 않다. 카메라 위치가 중요.

4. Scene
– 오브젝트를 배치하고 연결하는 것

5. GameObject

plane – 장소 지형 texture(u,v) vertex(x,y,z) normal(x1,y1,z1)

plane의 한 폴리곤의 각점은 normalVector 값을 가지고 있다.
directional light 는 한방향에서만 쏟아지는 빛
-게임 오브젝트는 서로 부모 자식 관계를 가질수 있다. 자식은 부모의 행동을 따라 한다.

6. Vector

크기와 + 방향을 가진
Vector2(x,y)
Vector3(x,y,z)
내적 , 외적? – ㅅ ㅡ ;
벡터를 꼭 마스터 하라!~
normal(x1,y1,x1)는 벡터의 크기를 없애버린다. – 정규화 1로만들어 버린다. 방향만을 알려준다. 바라보고 있는 방향을 나타낸다,
ps. 빛은 최소한으로 사용 하라 !! 리소스를 많이 먹는다.
7. 텍스처를 들고와 material를 이용하여 폴리곤에 표면상 이미지를 셋팅할수 있게 해준다.
8. 스크립트 적용
– 메인 카메라에 스크립트 달아 적용하는 방법 : 화면 전체에 일어 나는 변화는 여기에 다는것이 좋고
– 오브젝트에 스크립트를 달아 적용하는 방법 : 오브젝트에 일어 나는 변화는 여기에 다는것이 좋다.

9. JavaScript 구조
private var box:GameObject; // 받아올 오브젝트 변수

function Start(){ // 화면이 처음 만들어 질때 호출 스타트 할때 최대한 변수를 초기화 해주는것이 좋다.
box = GameObject.Find(“Cube”); // 받아올 오브젝트의 이름을 찾아 변수에 할당을 해준다.

}

function Update () {// 프래임을 연속 해서 뿌려주는 작업을 하는 함수
// 백버퍼 플리핑 1프레임은 백버퍼에 잡은 화면 을 프론트 버퍼에 한번 뿌려 줬을때 한번 작업을 나타낸다.
// 모든 단말기의 프레임 속도를 고려 해서 타임을 맞춰 주어야 한다
box.transform.position.x +=1 * Time.deltaTime;
// transForm 은 게임 오브젝트의 크기, 위치, 기울기를 수정 할 수 있다.
// Time.deltaTime 를 넣어줘야 프렝미 속도 뿌리른 타임이 통일 된다.
}
10.Prefab

– 게임오브젝을 구성과 모양을 저장해서 재사용을 가능하게 해준다.

(게임오브젝을 리소스로 만든다.)
게임오브젝트 중 파란 색이 들어오는것은 prefab의 오브젝이다.
11. 접근한정자
private는 : 속성에서 숨겨 사용을 못하게 한다.
public : private가 없으면 public이며 게임 오브젝에 속성으로 나타난다.

12. Camera
ViewportToWorldPoint : Transforms position from viewport space into world space.
– 뷰 좌표를 월드 좌표로 바꿈
ScreenToWorldPoint : Transforms position from screen space into world space.
– 스크린 좌표를 월드 좌표로 바꿈
ScreenToViewportPoint :Transforms position from screen space into viewport space.
– 스크린 좌표를 뷰폴트 좌표로 바꿈

13. 3D 설계 수학
1)Vector – 좌표
2)Matrix – 행렬
3)Quaternion – 각도 // 거의 쓸일없음

14. 배경
Mesh Collider – plane에 대한 이벤트를 체크 하고 충돌과 효과를 준다.
Mesh Renderrer – plane에 대한 그래픽적 작업을 한다.
ps. 이둘을 잘 확인하여 bg맵을 만들어야 한다. 맵을 만들때 충돌 이벤트가 있는 부분은 따로 Collider로 만들어주는것이 좋다.

Component : 오브젝트의 역활을 담당. 물리 규칙 적용, 효과, 사운드, 재질 등 각각의 역활을 결합하여 사용한다.

Hierarchy tab : 오브젝트의 계층 구조 관리 담당.

Project tab : 작업에 사용되는 각종 리소스 계층 관리. 프로그램에서 사용되는 asset을 관리

Inspector tab : 오브젝트에 대한 세부정보를 설정. 오브젝트에 추가한 컴포넌트들을 설정

 Component

Mesh : 다각형 혹은 다면체. 3차원 CG에서 다면체의 형태를 구성하는 폴리곤과 정점들의 집합.(삼각형)

Mesh Filther : 오브젝트에 할당된 메시 데이터를 읽고 그 형상을 모델링해서 표시하는 기능

Collider : unity에서 물체의 충돌을 식별하기 위해 사용하는 Component. 오브젝트의 충돌 감지하여 이펙트를 발생한다. unity에서는 총 6가지 Collider가 존재함.

Texture : 오브젝트의 표면에 채색이나 무늬등을 넣기 위한 이미지

Mapping : 오브젝트의 겉면에 세부적인 표현 혹은 texture를 입혀주는 작업

Rendering : 모델링, 애니메이션, 카메라, 텍스쳐 매핑, 빛 등의 과정을 모두 연산처리하여 2차원적인 화면으로 만들어 내는 작업

Mesh Renderer : 재질 관리 컴포넌트로써 오브젝트에 Mapping을 하기위해 Material이 표현되는 영역

Transform : 오브젝트 컴포넌트로, 3차원 공간에서 물리적인 위치, 회전 각도, 확대or축소, 비율이 공간 벡터롤 표시됩니다.
– Hand Tool : 씬 카메라 이동(Q)
– Translate Tool : 선택한 오브젝트 좌표 이동(W)
– Rotate Tool : 선택한 오브젝트 회전(E)
– Scale Tool : 선택한 오브젝트 크기 변경(R)

Gizmo : 디자인 창에서 오브젝트를 선택하면 이동 및 회전, 확대or축소의 방향을 표시하는 아이콘.(x – 적색, y – 초록, z – 파랑)

Light 
– Directional Light : 태양 광성과 같으며 방향만 있고 거리는 없음. 화면 전체의 밝기와 분위기를 조성하며 그림자를 만듭니다.
– Point Light : 특정 지점을 잡고, 그 점에서 사방으로 퍼지는 라이트로 거리와 방향이 존재 특정한 장소를 밝히는 국지적인 조명으로 사용.
– Spot Light : 원뿔 형태로 거리와 방향이 존재. 특정한 장소나 오브젝트를 강조하는 조명으로 사용
– Area Light :사각형 영역 내에서 어떤 방향으로도 비추는 라이트입니다. 조명이 고르게 확산됩니다

 

  • 복사수준 -> 추후 정리해야함

참고 사이트:

http://psun.tistory.com/entry/Unity-%EC%9A%A9%EC%96%B4%EC%A0%95%EB%A6%AC

http://polarbearworld.tistory.com/entry/%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC

http://cafe.daum.net/_c21_/bbs_search_read?grpid=1TtXb&fldid=3fBQ&datanum=14

http://moguwai.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%EC%9A%A9%EC%96%B4-%EB%B0%8F-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC

http://crefo13.blogspot.kr/2015/05/unity.html

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading