미로가 그려진 판넬을 움직이며 그위에 투사되는 공을 굴리는 게임이다. 카메라의 위치와 프로젝트의 위치 뷰포트 등의 불일치 때문에 실제 판넬과 투사되는 그래픽의 차이가 발생했다. 작은 집이 아닌 좀더 높은 공간에서 투사하면 사물에 그래픽을 일치 시킬 수있다. 증강현실(Augmented reality)가상현실은 보이는 모든 화면 컴퓨터 그래픽으로 구성되어있지만 증강현실은 실 생활에서 보이는 사물위에 가상의 가상의 그래픽을 투사하여 서로르 겹쳐보이게 하는 컴퓨터 그래픽 기술이다. 스마트폰이 많이 보급되면서 스마트폰의 카메라와 GPS 등을 이용한 증강현실 앱들이 등장하면서 친숙해졌다. Workflow카메라로 입력된 영상이 컴퓨터로 전달된다. 전달된 영상을 컴퓨터에서 실시간으로 분석하고 타겟을 찾는다. 다음 가상..
템플런2의 추가다운로드 화면 추가 다운로드게임을 설치하면 바로 실행가능한 게임이 있고, 추가로 파일을 받아야 하는 게임있다. 추가로 파일을 다운로드 받도록하는 이유는 무엇일까? 처음부터 추가파일을 포함한채로 빌드하였다면 나중에 업데이트가 필요할 때도 모두 포함한채로 빌드해야한다. 그리고 그것을 다시 배포해야한다. 하지만, 추가 파일 다운로드 방식이라면 업데이트가 필요한 파일만 다시 다운로드 하도록 한다. 이 방법은 빌드와 재배포 과정이 생략되므로 보다 효율적인 버전 관리와 운영이 가능한다. 애샛번들유니티에서는 애샛번들을 이용하여 위와같은 상황에서 추가 다운로드가 가능한 기능을 제공한다. 스크립트를 제외한 리소스들을 번들로 묶어 서버에 업로드하고 이것을 클라이어트가 다운로드하여 사용하는 형태이다. (현재는..
다루는 내용- Sprite Slice- Anchor- UI Tweener- TypeWriter Effect 말풍선은 게임의 많은 곳에서 사용된다. 튜토리얼을 진해할 때, NPC와 대화 할 때 등.. 이러한 말 풍선을 NGUI를 사용하면 쉽게 만들 수 있다. 아래와 같이 말풍선이 커지는 트위닝과 글씨가 자동으로 써지는 타이핑 효과 그리고 말풍선 배경이 문구의 크기와 위치에 맞게 변하도록 하는 앵커의 개념을 이해한다.준비물NGUI, 캐릭터 이미지, 말풍선 이미지, 폰트 (NGUI는 상용 플러그인이므로 예제를 첨부할 수 없음.) NGUI 아틀라스 만들기먼저 위의 그림들을 NGUI를 활용하여 아틀라스를 만든다. 메뉴의 NGUI - Open - Atlas Manker 를 차례로 클릭하여 아틀라스 메이커를 실행한다..
NGUI유니티에서 많이 사용되어지고 있는 UI 제작 플러그인으로 NGUI가 있다. 유니티 4.6버전에서 자체적으로 UGUI가 추가되었지만, 그래도 NGUI는 아직까지 많은 사용자가있다. 사용법이 편리하고 익히기 쉽게 만들어졌기 때문에 NGUI에 익숙한 사용자에게는 UGUI 로 갈아타는 것에 큰 이유를 못 느낀다. 게임에 사용되는 이미지 뿐아니라 사운드, 로컬라이징, UI트위닝까지 지원한다. 가격은 조금 비싼편이지만 그만큼의 역할을 충분히 한다고 생각한다. 아틀라스(Atlas)게임에서 사용하는 이미지들의 집합이다. 여러 이미지 파일을 하나의 이미지로 묶은 것이다. 사용할 때에는 필요한 영역만 사용한다. 이것을 스프라이트라고 부른다. 하나의 아틀라스에 여러 이미지가 있고 이것들을 서로 다른 오브젝트에 적용한..
드로우 콜(Draw call) 오브젝트, 파티들 등은 CPU에 의해 연산된 정보를 GPU에서 가공하여 최종적으로 화면에 보이게된다. CPU에서 생산된 정보를 버퍼를 통해 GPU로 전달한다. 쉽게 말해 CPU가 GPU에게 이거 화면에 그려(Draw)달라고 요청(call)하는 것이다. 이것을 드로우 콜(Draw call) 이라한다. 유니티 현재 버전(5.x)에서는 Batches로 표시된다. 병목현상 게임 중 화면에 표시할 오브젝트가 많아서 Draw call 도 많아졌다. CPU에서는 정보들을 빨리 연산하여 GPU에게 넘겨줘야하지만 오브젝트가 너무 많아 신속하게 처리가 안된다. 이러한 병목현상이 나타마면 갑자기 화면이 멈춘것처럼 보이거나. 끊기는 현상이 발생한다. CPU의 부담이 커져서 열도 많이나고 베터리 ..
시리얼라이즈 시리얼라이즈(직렬화)는 클래스나 오브젝트를 스트링이나 일차원 배열형태로 변환하는 것이다. 스크립트에서 만든 클래스의 각종 변수들을 한줄로 늘어서게한것이다. 이렇게 한줄로 줄을 세워놓으면 그 데이타를 컴퓨터의 저장장치에 저장 하거나 네트워크로 전달하기에 편리하기 때문이다. 오브젝트나 클래스를 한줄로 직렬화 해주는 놈을 시리얼라이저라 부르고 직렬화된 값을 다시 오브젝트나 클래스 상태로 복원하는 작업을 디시리얼라이즈(deserialize)라고한다. 시리얼라이즈 가능한 것 1. 클래스 스스로 시리얼라이즈 할 수있는 것아니다. 일단 [Serializable]를 붙여 줘야한다. 2. 기본 데이터 타입 ( ‘int’, ‘float’, ‘double’, ‘bool’, ‘string’, etc) 가능함 3...
코루틴과 쓰레드닷넷은 멀티쓰레드를 지원하지만 닷넷을 사용하는 유니티는 단일 쓰레드로 동작한다. 멀티쓰레드를 가지는 코드르 작성함으로써 버그 발생률이 높아지고 멀티쓰레드간 교착 상태 경합 등, 신경써야 할 부분이 많아진다. 그래서 깔끔하게 단일 쓰레드만 사용하는 것에 찬성한다. 그렇다면 쓰레드를 사용하지 않고 어떻게 멀티 태스킹을 구현할 수 있을까? 이것을 해결해 주는 것이 유니티 코루틴(Coroutine)이다. 일반적인 쓰레드 방식의 프로그래밍을 유니티에서는 코루틴을 사용함으로써 멀티 쓰레드를 흉내 낼 수 있다. 코루틴의 동작방식쓰레드를 사용하지 않고 멀티 테스킹을 가능하게 한다. 어떻게 이것이 가능 할 수 있을까? 코루틴 함수가 IEnumerator 를 반환하는데 힌트를 얻을 수있다. C#에서 이터레이..
유니티 프로파일러의 메모리 부분에서 Mono 가 힙영역을 의미한다. 타임라인에서 계속 크기가 변하는 것을 확인할 수 있다. 메모리 힙영역 프로그램이 돌아가면서 생성되는 값들은 값들은 메모리의 힙영역에 할당된다. 이것을 동적 메모리 할당이라 부른다. 게임을 예로들면 캐릭터를 새로 생성으로 인한 값 생성, 네트워크 작업을 통해 일정한 데이타를 받아 배열을 생성하거나 등등.. 많은 부분에 동적이 메모리 할당이 일어난다. 이러한 메모리 할당 요청이 발생하면 힙 메모리를 관리하는 관리자가 필요한 만큼의 영역을 힙에 예약한다. 예약된 영역은 다른 값이 할당될 수 없는 곳이된다. 예약된 곳은 핸들러나 포인터를 반환하여 값을 할당하는 등의 접근이 가능하게 된다. 누수 현상(memory leak) 오류로 인한 영역을 가..
벡터벡터는 좌표와 방향을 나타낸다. 유니티에서는 Vector2,Vector3,Vector4 를 사용한다. Vector4는 쉐이더를 다룰 때 사용하고 평소에는 쓸일이 없다. Vector2는 x와 y 좌표를 나타내고 Vector3는 이것에 z 축을 추가한 것이다. 유니티에서는 왼손 좌표계를 사용하여 z 축의 증가 방향이 앞쪽을 향하게 된다. Vector3 의 forward(앞) 값을 보면 z 축이 1 증가한 값을 나타내는 것을 알 수 있다. 유니티에서 사용하는 기즈모 기즈모의 각 부위를 클릭하면 카메라가 해당 방향으로 이동하여 물체를 바라본다. 자주쓰는 벡터 값Static 값들을 편하게 사용하자. 벡터를 생성할 때 new Vector3(0,0,0) 이런식으로 생성한다. 하지만 new 키워드를 사용하지 않고 ..
트위닝 트위닝이란 게임에서 사용되는 오브젝트의 시간당 변화를 의미한다. 일정시간동안 크기, 위치, 방향 등의 움직임을 모두 트윈이라한다. 게임에서는 이러한 움직임이 매우 많이 사용된다. 오브젝트 뿐아니라 오디오나 카메라에도 사용된다. iTween 그 중 인기가 많은 itween에 대해서 살펴본다. 유니티에서 트위닝을 돕는 플러그인은 itween 이외에 다양한 플러그인이 존재한다. 대부분 무료이며 성능의 차이가 있다고하는데 최근 버전이 높아지면서 그 차이는 느끼기 힘들다. 에셋스토어에서 무료로 다운받아 사용할 수있다. itween 홈페이지에서 사용설명과 예제등을 제공한다. 사용법 iTween.MoveBy(gameObject, iTween.Hash("x", 2, "easeType", "easeInOutExp..