midas+son의 크리에이티브(creative) 이야기

이제 1주일 정도 유니티를 공부하였다.

처음에는 이미지나 3D오브젝트 들을 

쉽게 다룰수 있어서 재밌었는데

지금은 마냥 쉽다거나 재밌다거나 생각만 드는 것은 아니다.


좀 부정적인 생각도 드는게

유니티가 C# Base로 되어있다고 했었나...

객체를 동적 할당으로 만들었으면 나중에 사용하지 않을 때 

지워주지 않는 이상 메모리를 차지 하고 있잖아??

그렇다면 유니티로 생성하고 지우지 않은 것은 언제 지워주는 걸까?

사용하지 않고 있지 않은 것은 어떻게 되는 거지?

가비지 컬렉터에 무조건 의존하고 있나?

Destroy() 함수를 사용하면 해결 되나? 

꽤 깊숙히 내부를 아는 건 아니니까 불안요소인것 같다.

천재들이 만든다는 엔진이니 어련히 잘 했을까 하지만

메모리 처리에 대해서는 c++이 더 나았던거 같고

그런 면에서 c++이 Base인 언리얼 엔진이 더 좋지 않나 싶다.

(어짜피 나중에 기회되면 언리얼도 공부 할 것이다.)


유니티의 물리엔진에 대해서는 대체적으로 다 고맙지만

내가 짜면 더 빠르게 완성하거나 

쉽게 할 것 같은 기능도

유니티에서 구현을 해놓아도

옵션 버튼이나 뭘 사용하고 뭘 클릭할지 모르면

할 수 없다는 건 좀 불편 한 것 같다. 

기능을 많이 안다고 

공부를 많이 한 것 같은 기분도 안든다. 

이제 겨우 찾았다는 느낌? 

유니티 홈페이지와 친해지는 기분?

그래도 다시 말하지만 물리엔진은 진짜 좋다.

.

.

.

음...

이건 유니티 자체에 대한 문제는 아니고

전혀 다른 방향성의 또 다른 문제인데

만드는 게 누구에게나 쉽다라는게 장점인가? 

 - 프로그램으로서 그건 장점이다.


하지만 3D에 대한 개념을 잘 모르는 사람도 

게임을 양산 할 수 있다는 것은

보기좋은 개살구만 늘어나는 것이 아닌가 싶은 것도 있다.

게임 적으로도 인적자원으로서도...


이런 생각을 한다고 본인이 그렇게 실력자는 아니지만

왠지 회사 입장에서 생각을 해보면

유니티를 좀 다룰줄 아는 신입은

쓰다가 버리고 다른 사람 뽑기 좋은 

그냥 소모품으로써 사용되기 좋지 않나 싶다.


DirectX를 안배우고 3D개념을 아예 안모르고

Unity먼저 배우고 뛰어드는 사람도 꽤 있다고 생각된다.

그 사람들은 나중에 벽에 부딪힐지도 모른다.


이론, 원리, 개념... 

기초와 기본 토대 없이 세워진 건물은 작은 지진에도 쉽게 무너진다.

Unity는 좋은 살이 될 수 있다.

그렇지만 남들이 봤을 때 살안에 뼈대가 있는지 없는지는

찔러보기 전까지는 모르는게 문제가 될 것 같다.


누가 나를 찔러 봤을 때 "이 사람 통뼈다"라고 생각을 할 수 있을 만큼 

공부에 더 열을 올려야 겠다. 

유니티의 스크립트(script)에서 자신과 상속관계에 있지 않은

하이어라키(hierarchy)에 있는 오브젝트 들을

찾아 사용 하는 것도 가능하다.


      GameObject test1 = GameObject.Find("오브젝트 네임");    //오브젝트 이름으로 찾기

GameObject test2 = GameObject.FindGameObjectWithTag("태그 네임");    //태그로 찾기. 단일 반환

GameObject[] test3 = GameObject.FindGameObjectsWithTag("태그 네임");     //태그로 찾기. 복수 반환.


그렇다면 오브젝트 네임으로 찾아 가져오게 된 

GameObject는 원하는 태그로 되어있는지 어떻게 비교해야할까?

if(test1.tag == "test") 와 같이 string 비교도 가능하다.

하지만 string비교는 불필요한 리소스를 잡아 먹어 비효율적이다.

if(test1.CompareTag("test")) 와 같이 유니티에서 만들어 놓은 비교 함수를 권장한다.




유니티는 프로젝트를 만들 때 

별도로 WorkSpace가 생기지 않는다.

프로젝트를 Open할 때에도 

파일이 아닌 폴더를 지정하여 불러온다.


그렇다고 폴더를 통째로 복사하기에는 용량이 꽤 된다.

Library 같은 경우는 다시 만들어 주므로 

유니티 설정을 통해 최소화 시켜보자.


1. Edit -> Project Settings -> Editor 에서

Version Control Mode를 Visible Meta Files 로 바꾸고

Asset Serialization Mode를 Force Text 로 바꾼다.

종료...


2. 이제 Assets에 Meta파일이 같이 생기고 아래의 2폴더만 백업을 해둔다.


3. Unity를 실행하여 폴더를 잡아 Open하면 

Project의 오브젝트들은 그대로이지만 

Hierarchy는 기본 값으로 되어있다.

Open Scene을 해주면 된다.


4. 자신이 만든 Scene(파일 명.unity)을 불러오자. 보통 Assets폴더에 저장해 두거나 그 아래에 Scene폴더를 둘것 이다.


5. 불러오면 Hierarchy에 설정했던 것들이 다시 보이게 된다.

//끝.

정~~~말 쉽게 3D프로그래밍을 할 수 있게 

잘 만들어진 엔진 툴인거 같다.


DirectX로 게임 하나 만들 때에는 

Vector3하나부터 갖가지 Matrix 변수들까지 

신경 써줄게 많았는데

Unity는 오브젝트 생성이나 각각의

world의 location, scale, pos컨트롤

메테리얼 적용,

카메라 컨트롤, 

충돌 함수, 조명, 

심지어 셰이더로 어렵게 써야하는 그림자 까지

유니티는 그냥 된다.

말 그대로 기본적으로 되어있더라.....그냥이다...그냥...


정말 크나큰 감동이다.

아예 쌩초보자가 보기에는 

위의 설명들도 어려울수 있겠고

Unity 자습서동영상을 봐도 

뭔말인가 싶겠지만

DirectX에서 3D의 개념을 공부하고

익힌 사람이라면(게임 좀 쟈기가 만들어 봤다면)

Unity는 정말 쉬운 툴이다.


이렇게 첫 초행길에 감동을 받았는데 

앞으로 중, 고급 스킬을 익힐 때는 어떨지 기대가 된다.


유니티는 책이 있으면 좋지만 

책 없이도 유니티 홈페이지 제공하는 자습 공간이 있어

누구나 쉽게 접근 하고 배울 수 있다. - 인터넷만 되면 된다.

심지어 동영상으로 되어있고 한글 자막이 달린 것도 있다.


http://unity3d.com/kr


1. 위의 홈페이지 주소에 접근하자.

2. 홈페이지 상단의 교육 자료를 클릭 


3. 자습서 메뉴를 클릭


4. 엔진 부분의 프로젝트에서 보고 싶은 것을 클릭


5. Introdution은 소개니까 굳이 안봐도 되고 아래부터 하나씩 보기


// 모두 한글 자막이 있으면 좋지만 후반 부로 갈 수록 자막이 없는 것도 나온다.

// 그럴 땐 동영상을 보면서 단어의 키포인트를 잡아 따라해보자.