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)

ROOF OF THE POSTS

- For whom he or she is not a native or does not use Korean for their primary language, translation button(coarse though) for Japanes and English are provided below the visitor location viewer right side of the page. And any comments except spam are welcome. =)

If you want to contact with me, drop an email on the following:

by kimsama | 2011/12/31 23:49 | General | 트랙백 | 덧글(7)

2010년 새해 복 많이 받으세요


이 블로그에 오시는 분들 모두, 올 2010년 한 해에도 늘 즐겁고 행복한 일들과 함께 하시길 바랍니다.

(사진은 정초에 오른 북한산의 동장대에서 바라본 풍경입니다)

by kimsama | 2010/01/03 23:44 | General | 트랙백 | 덧글(3)

[소설] 검은빛

검은 빛
미우라 시온 지음, 이영미 옮김 / 은행나무
나의 점수 : ★★★★

작은 외딴 섬에 밀어 닥친 쓰나미라는 불가항력의 폭력이 살아 남은 소수의 욕망에 어떻게 전이되어 발아되는지를 추리 소설의 형식을 빌어 표현한 책.

폭력으로 엮이고 얽힌 등장 인물들의 관계도 흥미롭고 이것을 아내와 남편 그리고 아내의 정부(더 이상이 자세한 언급은 스포일러라 생략)의 시선으로 이야기한 점도 재미있다. 또 매끄러운 번역도 추리 소설의 긴장감을 더한다. 작가의 명성에 걸맞게 번역도 흠잡을데가 없다. (...작가 미우라 시온은 나오키 상 수상자라고)

처제 집에 갔다 눈에 띄길래 잡고 읽어 내려 갔는데, 하룻밤 순식간에 읽어 내렸다. 희안하게도 일본 소설은 기가 막히게 잘 고른단 말야. 이 집 거실에 있는 일본 현대 소설 중에서 들고 읽어 재미 없었던 것이 없다. 굼벵이도 구르는 재주는... 요즘은 집에 가면 거실에 책이 없는지 먼저 살필 정도... 

비고 모텐슨,마리아 벨로,에드 해리스 / 데이빗 크로넨버그
나의 점수 : ★★★

책의 '폭력'에 대한 고찰은 영화 '폭력의 역사'와도 묘하게 닿은 부분이 보인다. (영화를 볼 때에는 마라아 벨로만 보였는데, 말이다 - 쿨럭)

폭력에 대한 철학적 사유가 필요하거나 궁금한 분들에게는 양쪽의 콤비네이션을 적극 추천. 굳이 이런 이유가 아니더라도 '검은 빛'은 재미라는 추리 소설의 순수한 목적만으로도 충분히 기대를 충족시킬 작품이다. 짧지 않은 분량임에도 지루함을 찾을 수 없다. 

by kimsama | 2009/12/29 01:08 | Lifetamine | 트랙백 | 덧글(0)

Integrating Physics with the game engine

오늘자 Sweng-Gamedev mailing list에 "물리 시스템의 게임 엔진에의 통합"과 관련한 답변으로 Jon Watte씨가 올린 글입니다.

물리 시스템은 대부분 Havoc, PhysX 등의 외부 미들웨어를 통합하는 방식을 취하고 있는데, 이 경우에도 참고하면 많은 도움이 되는 내용입니다.

아래 내용만으로는 부족하다면 Nebula2의 Mangalore 부분에서 ODE 물리 엔진을 어떻게 통합하고 있는지 아래 내용을 코드와 함께 보기 바랍니다. 쉽게 이해하는데 도움이 됩니다. 반대로 Nebula에서 물리 엔진이나 기타 시스템의 통합을 *왜*이러한 방법으로 하는지가 궁금하셨던 분들에게도 나름의 답이 될 수 있겠군요.

어느 정도 감을 잡았다면 Nebula3의 Raknet 네트워크 시스템의 통합도 같이 살펴 보길 권합니다. 방법은 거의 동일합니다.

그리고 아래 내용의 세 번째 항목에서 언급한 데이터와 관련한 내용, 사실 이 내용은 통합과는 직접적인 관련이 없을지 몰라도 외부 물리 시스템 사용시 제일 중요한 내용이라고 봅니다. 최근에는 PhysX 쪽도 3dsmax 2010용 플러그인(베타)이 나왔더군요. 시스템의 사용은 그리 어렵지 않지만 데이터를 생산하는 적절한 방법이 함께 고려되지 않으면 반쪽짜리 해결책이 되거나 사용하지 않으니만 못할 수 도 있기 때문입니다.


Integrating Physics with the game engine

I am not making a physics engine, just implementing 'as-much' physics as
required for my game


Once you start doing proxy-against-concave-mesh, and
multiple-contact-constraints, the difference will start to diminish.
Especially the "handle multiple contacts" part ends up more or less leading
you to actually write a physics engine. If you want physics without writing
a physics engine, use either an open source physics engine (Bullet, ODE) or
a "free for PC" commercial physics engine (NVIDIA PhysX, Havok Physics).

Regarding structure, I find that each subsystem should have its own data
structures, optimized for that subsystem. Thus, you may have a RigidBody
with some BodyCollisionShapes on it. Separately, you have an AnimatableMesh
with some Materials and Animations on it. You may also have a SoundSource
with some PlayingCues, and one or more SpecialEffects, and maybe even an
InputListener. Each of those are for a separate subsystem (physics,
animation, sound, scene graph, input in these cases).

The "game object" as such is the union of all these sub-components. There
are a few ways of doing that union:

1) Each subsystem allow *you* to define the ID of each subsystem object. You
say "create a rigid body, and call it '3'." A game entity is then just the
ID, and it's created as a collective hallucination of all the subsystems
that happen to have an object with that ID.

2) There's a bit struct with a pointer to every kind of component: struct
Entity { RigidBody *body; AnimatedMesh *animated; ... }; An entity comes to
life with NULL everywhere, and you populate it as appropriate.

3) You build an abstraction for "being a component" and for "containing
components." The entity is then a container for components. You write
component wrappers for each of rigid body, animated mesh, sound source, etc.
The entity is then created as a component container with whatever components
in it that you need. If you want editor support for arbitrary component
packages, for a fancy designer-built world, then this approach, plus XML
serialization, will get you there. The container will generally contain a
message bus, reflection support, etc.

The main problem you have to solve is how to get data from "here" to
"there." For example, the physics object collides with a wall, and thus
needs to adjust the animation to not penetrate an arm. Or the graphics scene
graph node moves, and you need the sound emitter to move as well. Generally,
this kind of data ends up in the "entity" component, so the "pure" ID
approach is not too common. However, if each of the subsystems can accept
some kind of "pull" input for common data like position, and the
authoritative source of that information can "push" it, then it can still be
done reliably and without pain.

Sincerely,

jw

by kimsama | 2009/12/17 14:16 | Development | 트랙백 | 덧글(0)

디지털 네이티브

디지털 네이티브
돈 탭스코트 지음, 이진원 옮김 / 비즈니스북스
나의 점수 : ★★★★★

위키노믹스 저자의 신작. 저자는 현재 10대에서 30살 정도까지의 세대를 넷세대(net generation)이라고 규정하고 첵을 통해 이들의 특징과 사회의 변화에 대해서 이야기하고 있다.

그러니까 넷세대는 X세대(내가 속한 세대이기도 하다)의 다음 세대에 속하는 세대로 지금까지의 세대와는 확연히 구분되는 독특한 세대로 특히나 현재의 40, 50대의 베이비붐 세대에 속하는 기성 세대로서는 이해하기가 어려운 세대이다. (물론 X세대라고 해서 이해가 쉬운 것도 아니다)

전체의 구성은 세 부분으로 나눌 수가 있는데 첫 번째 부분은 이들 세대의 특징에 대해서 소개하고 두 번째 부분은 이들 세대가 가지는 가족과의 관게에 대해서 설명한다. 마지막으로는 이러한 넷세대의 변화의 방향과 전망 그리고 여러가지 조언을 제시한다.

자신이 넷세대에 속하더라도 넷세대의 소비로 밥벌이하는 게임 (혹은 다른 IT) 개발자들에게 반드시 필독을 권한다. 적어도 책의 첫 번째 부분이라도 읽어 보면 느끼는 점이 많으리라. (사실 책이 좀 두껍다) 두 번째로 자녀가 있으신 분들처럼 넷세대의 이해를 원하시는 분들은 끝까지 꼼꼼히 읽어 보시는 것도 좋겠다. 특히나 자녀들의 비디오 게임이나 과도한 컴퓨터 사용 시간에 대해서 굉장히 부정적인 시각을 가지고 계시다면.

약간의 흠이라면 저자의 자녀들에 대핸 이야기가 넷세대의 긍정적인 사례로 자주 등장하는데 저자 자녀들의 환경을 추측컨대 이들이 넷세대의 보편성을 대변하기는 힘들어 보인다. (저자의 가정 환경이 어떤지가 책에 나오는 것은 아닌데, 이 분이 출장 등을 갈 때 유명한 분들이 자가용 비행기 등을 빌려 주기도 하는 것으로 봐서 평범과는 매우 거리가 있어 보인다.) 사실 가까운 일본의 바이트족이나 덕후님들이나 우리의 88만원 세대를 보면 넷세대의 문제 중에는 만만치 않은 것들도 꽤 된다.

by kimsama | 2009/12/07 17:17 | Lifetamine | 트랙백 | 덧글(0)

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