태그 : unity3d

Sublime Text 2를 Unity3D 에디터로 사용하기

일단 사용해 보면 vi도 갖다 버린다는 Sublime Text 2(ST2) 에디터를 Unity3D와 함께 사용하는 방법에 대한 글입니다. 

ST2로 Unity3D의 스크립트를 편집하기 위해서는 ST2의 몇 가지 패키지들을 설치해야 합니다. 아래 참조에 나와 있는 링크들에 자세하게 설명이 나와 있지만, 실제로 사용하기 위해서 설정해 보니 아래 링크들에서 설명하고 있는 부분과 조금 다르거나 설명이 미흡한 부분이 있어, 보충해서 글을 올립니다. 

Unity3D의 스크립트를 편집할 때 Mono IDE가 불편해서 Visual Studio 플러그인을 사용해서 Visual Studio를 사용하는 분들도 꽤 있는 것으로 압니다만 많은 분들이 기본적으로 제공되는 Mono IDE를 사용하고 있을 듯 합니다. ST2를 사용하게 되면 다음과 같은 장점을 기대할 수 있습니다. 

  1. Mono IDE는 꽤 무겁습니다. Unity3D에서 스크립트를 더블 클릭하면 Mono IDE가 열리는데, Mono IDE가 꽤 무겁기 때문에 스크립트를 보기까지 꽤 시간이 걸리는데 ST2를 사용하게 되면 이러한 지연이 없습니다. 
  2. Mono IDE에서 편집후 저장한 다음 다시 Unity3D로 돌아와야지 편집이 끝난 스크립트들이 빌드되는데, ST2에서는 에디터 내에서 바로 빌드할 수 있습니다. 
  3. 에디터 내에서 원하는 Unity3D의 API에 대한 도움말을 선택하여 웹브라우저에 출력하도록 할 수 있습니다. (Unity3D의 도움말은 html로 되어 있습니다)

아래는 Unity3D 스크립트 편집을 위한 Mac에서의 ST2의 설정 방법입니다. (Windows에서도 거의 동일한 방법으로 설정이 가능합니다)


1. Sublime Text 2 인스톨

아래의 링크에서 Sublime Text 2를 다운 후 인스톨한다. 라이센스 등록은 $70 이지만 등록 없이 사용할 수 있다. 



2. Sublime Text 2용 Unity3D package 설치 

Tools > Command Palette 열기 (mac에서 'cmd + p')

Package Control:Install Package 선택

혹은 'ctrl + `' 로  sublime text에 아래의 패키지 리스트를 직접 입력 (Sublime Package Control 페이지 참조: http://wbond.net/sublime_packages/package_control/installation)

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print('Please restart Sublime Text to finish installation')

인스톨을 완료한 후 Sublime Text 2 다시 실행한다.

3. Sublime Text2 Unity3D 패키지 설치

Command Palette에서 아래의 세 패키지를 모두 선택해서 설치한다. (Command Palette 창에서 'u'를 타이핑하면 쉽게 찾을 수 있다)
  • Unity3D
  • Uniyt3D Builder System
  • Unity3D Snippets and Completes
설치시 Sublime Text 창 아래에 인스톨 진행이 표시됨.
정상적으로 인스톨 되었다면 View > Syntax 메뉴에 Unity3D가 나타난다.
여기까지 완료했다면 이제 Unity3D 스크립트 코드의 syntax를 지원하는 Sublime Text 2 편집이 가능하다. 

2, 3번의 과정이 잘 이해되지 않는다면 아래 링크의 동영상을 참고한다.
Using Sublime Text 2 With Unity3D: http://www.jacobpennock.com/Blog/?p=647

4. Sublime Text 2 에서 Unity3D 빌드하기

2번 과정에서 Unity3D Builder System 패키지를 설치했는데, 이를 이용하면 Sublime에서 편집한 코드를 바로 빌드('cmd+b')할 수 있다.

아래의 과정으로 Sublime 에서 Unity3D 프로젝트를 빌드를 테스트해 볼 수 있다. 
1) 새로운 Unity3D 프로젝트를 생성한다.
2) Unity3D의 Preference를 선택, External Tools 의 External Script Editor로 Sublime Text 2를 선택한다.
    3) 새로운 C#  스크립트를 생성한 후 더블 클릭해서 Sublime Text 에디터에서 생성한 스크립트 파일을 연다. 

    4) Sublime Text  에디터에서 Project > Add Folder to Project 메뉴를 선택하여 생성한 Unity3D 프로젝트 폴더를 선택한다. 

5) 생성한 Unity3D 프로젝트가 SublimeTextTest라면 SublimeTextTest 폴더를 선택하면 된다. 
6) Sublime Text 에디터의 Unity3D Builder System 패키지를 사용하기 위해서는 *-csharp.sln 파일이 프로젝트 폴더 내에 존재해야 한다.

  7) Sumlime Text 에디터에서 'cmd+b' 로 작성한 스크립트를 빌드한다. 

아래 그림과 같이 나온 다면 빌드에 성공한 것이다. 


Sublime Text 에디터의 Unity3D Builder System 은 빌드시 Unity3D의 설치 위치가 Mac 의 경우 Applications/Unity 위치에 설치된 것으로 설정되어 있다.

만약 여러 버전의 Unity3D 설치를 위해서 Unity3D 의 설치 위치가 Applications/Unity 가 아닌 경우 Unity Builder System의 빌드 파일을 수정해야 한다. 

Sublime Text 에디터의 Preferences > Browser Packages  메뉴를 선택한다. 

Finder에서 Unity3D Build System 폴더의 Unity.sublime-build 파일을 Sublime Text 에디터로 드래그앤드롭한다. 

파일에서 "osx"으로 설정된 부분의 "Applications/Unity" 경로를 사용하고자 하는 Unity의 경로로 변경해 준다. 만약 Unity3D가 Applciations/Unity 4.0f7 이라면 아래처럼 변경해 주면 된다.  (Windows 에서는  "windows" 부분의 Unity 경로를 Unity3D가 설치된 경로로 변경하면 된다)

Windows 라면 "windows" 부분의 경로를 Unity3D가 설치된 경로로 변경해 주면 된다. 

Sublime Text 에디터의 Project > Save Project As 메뉴를 선택해서 Sublime Text 에디터의 프로젝트로 저장한다. 

이 때 주의할 점은 저장하는 프로젝트의 이름이 *.sln 파일에서 '-csharp'을 제외한 이름으로 저장해야 한다는 점이다. 

e.g.) SublimeUnityTest-csharp.sln 인 경우 저장하는 Sublime Text 에디터의 프로젝트 이름은 SublimeUnityTest가 되어야 한다. 

Sublime Text 에디터의 Unity Builder System에서는 빌드시 .sln 파일을 사용하는데, 사용하는 .sln 파일을 Sublime Text 에디터의 프로젝트 파일 이름에 '-csharp' postfix가 추가된 .sln 파일을 찾아서 빌드하기 때문이다. (이미지의 "cmd" 부분 참조)

다시 Sublime Text 에디터에서 빌드해서 제대로 작동하는지 확인한다. 


5. Unity Helper 사용하기 

Sublime Text 에디터에서 선택한 Unity3D API의 도큐먼트를 오픈하는 것도 가능하다. 사용 방법은 아래 링크에서 참조:


6. 참조

  1. Sublime Text 2: http://www.sublimetext.com/
  2. Perfect workflow in Sublime Text 2: https://tutsplus.com/course/improve-workflow-in-sublime-text-2/
  3. Integrating Sublime Text2 and Unity - part 1: http://www.holoville.com/blog/?p=512
  4. Using Sublime Text 2 With Unity3D: http://www.jacobpennock.com/Blog/?p=647
  5. Using Sublime Text 2 with Unity3D - Part2: http://www.jacobpennock.com/Blog/?p=568
  6. Call Unity’s Mono Complier From Within Sublime Text: http://www.jacobpennock.com/Blog/?p=663
  7. Sublime Text 2 package for Unity3d build: http://blog.fredericvauchelles.com/2012/09/sublime-text-2-package-for-unity3d-builds/#
  8. Using Notepad plus plus as script editor: http://wiki.unity3d.com/index.php?title=Using_Notepad_Plus_Plus_as_a_script_editor

by kimsama | 2013/03/01 15:29 | Unity3D | 트랙백 | 핑백(1) | 덧글(7)

Reflection: from Script side to Tool's UI

이번에는 리플렉션과 관련해서 스크립트 코드를 리플렉션을 이용하여 툴의 UI에 반영시키는 예에 관한 이야기입니다.

http://unity3d.com/support/documentation/Manual/Scripting.html


// 스크립트의 변수들은 자동으로 UI에 반영된다.
var speed = 5.0;

function Update () {
transform.Rotate(0, speed*Time.deltaTime, 0);
}

스크립트에서 변수를 발견하면 아래와 같이 툴의 UI에도 자동으로 반영이 됩니다.



위의 스크립트는 JavaScript이지만 단순히 자바스크립트를 엔진과 바인딩해서는 이러한 기능을 얻을 수는 없습니다. JavaScript의 인터프리터쪽을 손을 봤다는 이야기겠지요.

스크립트와 관련한 다른 이야기를 하자면 스크립트쪽은 간단하게 사용해 보니 컴파일 오류의 경우 해당 오류 라인 번호가 어느 객체인지를 매칭시켜서 보여 주므로 오류난 객체를 찾는 것은 어렵지 않습니다만 디버깅 기능이 없는 것은 좀 아쉽군요. (사실 이런 기능이 있는 엔진도 드물긴 합니다. 언리얼 스크립트가 외부 스크립트 IDE를 사용하면 Visual Studio와 유사한 디버깅 툴을 사용할 수 있다고 들었고, 또 Torque 엔진의 경우에도 브레이크 포인트 기능 등을 제공하는 몇 가지 스크립트 에디터가 유료, 무료 버전으로 있습니다. In-house 툴로는 N사의 팀장님-지금은 이사님-이 만든 엔진이 Lua를 엔진 툴에서 콜스택을 볼 수 있도록 만든 것이 기억납니다. 그게 몇년 전이었으니 대단하죠. 아, 선릉에 있는 N사가 아니라 분당에 있는 N사입니다. ㅋ)

아키텍처 관점에서 본 다면 Nebula2의 망갈로 게임 프레임워크가 C++이라면 Unity의 경우 스크립트 기반이라는 것이 차이점인데 기본적인 개념은 이란성 쌍둥이 처럼 서로 닮았습니다. 그래서 개인적으로는 이해가 쉬운 것도 마음에 듭니다.

by kimsama | 2009/02/15 22:58 | Development | 트랙백 | 덧글(0)

Asset Import Pipeline

게임 에디터에 모델과 같은 에셋(Asset)을 임포트하는 다른 방법이 있어 소개합니다. (이전에 Custom Schematic Editor의 FBX 이야기에 대한 답글이기도 합니다)


DCC 툴에서 작업한 게임 데이터(Assets)를 게임으로 삽입하는 방법은 별도의 플러그인을 사용하는 것이 일반적이다.

이 방법의 문제점이라면 게임 엔진이 사용하는 파일 포맷을 위해서 DCC 툴마다 별도의 플러그인을 작성해야 한다는 점과 게임으로 임포트한 데이터가 수정이 필요한 경우 DCC 툴에서 수정한 다음 다시 익스포트해야 한다는 것이다.

그런데 Unity3D에서는 모델의 임포트가 정반대로 이루어진다. Unity3D에서는 기존의 익스포트 플러그인을 사용하는 파이프라인 대신 DCC 툴에서 저장한 파일을 게임 에디터에서 바로 읽어 들이는 방식을 사용한다.

백문이 불여일견. 다음의 동영상에서 작업 방법을 확인하자.

http://unity3d.com/support/documentation/video/5.html

작업 방법을 간단하게 요약하면 이렇다. 처음에 마야에서 작업한 모델을 unity3d의 Asset 디렉토리에 저장하고 unity3D로 돌아간다. unity3d에서 해당 모델을 클릭하여 scene에 삽입하고 다시 마야로 돌아가서 모델을 수정하고 다시 unity3D로 돌아간다. 이 때 unity3D에서는 Asset 폴더의 내용이 갱신되면 이를 자동으로 감지하여 unity3D의 scene도 자동으로 업데이트된다. 때문에 아티스트는 DCC 툴에서 변경한 것을 별도의 익스포트 없이 바로 게임 에디터로 돌아가면 자신이 변경한 내용이 게임 에디터에도 업데이트 되어 있는 것을 볼 수가 있다. 피드백이 실시간으로 이루어진다는 이야기다.



다음의 방법들을 사용하면 크게 어렵지 않게 구현이 가능한 방법이다.

데이터 포맷 - FBX

플러그인을 사용하지 않고 DCC툴에서 저장한 데이터 포맷을 바로 게임 에디터로 임포트하려면 게임 에디터에서 DCC툴이 지원하는 다양한 포맷 중 하나를 사용해야 하는데 이 때 편리하게 사용할 수 있는 포맷이 바로 FBX 포맷이다.
FBX 포맷은 마야뿐만 아니라 3dsmax와 같은 여러 다른 DCC 툴에서도 지원하는 범용적인 데이터 포맷이다. 익스포트 플러그인의 경우 DCC 툴마다 플러그인을 작성해야 하지만 게임 에디터에서 FBX를 바로 읽어 들이는 방법을 사용하면 DCC 툴의 종류에 신경 써지 않아도 된다.

즉각적인 피드백 - Hot-loading

DCC 툴에서 데이터를 수정하고 저장하면 이를 게임 에디터에서도 자동으로 수정된 부분을 게임 에디터의 뷰에도 반영 시키는데 이것은 hotloading을 이용하여 구현할 수 있다. hotloading은 GPG6권의 "Stay in the Game: Asset Hotloading for Fast Iteration"에 자세한 설명이 있다. 이 방법은 애플리케이션이 특정 디렉토리(혹은 파일)를 정해진 시간마다 검사해서 변경이 된 경우 자동으로 해당 파일을 읽어 들이는 방법이다.

후처리 - Post Build

에디터에서는 FBX 포맷을 그대로 사용했지만 실제 배포시에도 이 포맷을 사용할 수는 없다. 게임에서 사용할 최적화된 형태로 변경하여 저장해야 하는데 이러한 처리는 게임을 배포할 때 포스트 빌드 과정에서 배치처리(모든 메쉬 데이터에 대해서)를 통해서 변경해주게 된다. 또 마지막 포스트 빌드 과정은 Cruise Control 등을 사용하는 게임의 전체 공정에 대한 빌드 자동화와 연결하여 자동화 시키는 방법도 고려해 볼 수 있다.

결론

프로그래머 입장에서 보면 스튜디오 내에서 Maya, 3dsmax의 여러 가지 DCC툴을 사용해도 엔지니어 그룹에서는 모델 임포트를 위한 하나의 코드 베이스만 작성하면 된다는 장점이 있다. 아티스트의 입장에서 본다면 익스포트의 번거로움이 없어지니 작업이 그만큼 빠르다. 전체적인 작업 파이프라인에서는 분명 시간 단축의 이점이 있는 방법이다.

by kimsama | 2008/12/23 23:34 | Development | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶