Unity를 개발할때 MonoDevelop을 이용하여 Script를 작성하게 되는데,

MonoDevelop에서 한글 지원이 제대로 되지 않아서 많은 불편이 있다.

그래서 한번 웹서핑을 하면서 알아본 결과 Text Edit로 많이 쓰는 SublimeText를 이용하여 개발할 수 있는것을 찾았다.

 

SublimeText를 이용할때의 장점과 단점으로는

장점 :   - unity에서 script파일을 열때 실행속도가 빠르다. (script파일의 개수가 많을때)

- 한글 주석처리가 가능하다.

단점 :   - 디버깅을 하지 못한다.

 

일단, 이정도로 파악이 된다.

단점은 보안하고 장점을 살리면서 개발을 할 수 있는 방법을 설명해보도록 하겠다.

1. 단점 보안.

- MonoDevelop에서 디버깅을 해야되기 때문에 먼저 MonoDevelop에서 한글 지원 가능하도록 설정을 해보자.

메뉴에서 Preferences->Fonts->Text Editor->더블클릭 후에 Nanum폰트로 변경.

변경하게 되면 한글로 처리된 주석이 보이게 된다. 하지만 한글을 타이핑 하려고 하면 자음과 모음이 분리되는 현상을 볼수 있다.

 

2. SublimeText 설정.

 

2-1. 준비하기.

http://www.sublimetext.com/2 해당 사이트에서 SublimeText2를 다운 받는다.

http://wbond.net/sublime_packages/package_control/installation 해당 사이트에서 Package파일을 다운 받는다.

 

2-2. Unity 설정하기.

- unity 프로그램의 메뉴에서 Preferences->External Tool->External Script Editor 에서 Browser를 선택하여 응용프로그램에 있는 SublimeText2를 선택한다.

- 위와 같이 하게되면 unity에서 Script파일을 더블 클릭할때 MonoDevelop프로그램이 실행되는게 아닌 SublimeText2가 실행되는 것을 확인 할수 있다.

 

2-3. SublimeText2 설정하기.

- SublimeText2 프로그램의 메뉴에서 Preferences->Browser Packages를 선택하면 Finder창이 열린다.

Finder창이 열리면 2-1 준비하기에서 받은 Package파일을 Installes Packages에 옮긴다.

- SublimeText2를 재실행 한다.

- SublimeText2 프로그램의 메뉴에서 Tool->Command Palette를 선택하면 창이 하나 뜨는데 거기에서 'P'를 입력하면 Package Control: Install Package가 보이게 된다. Package Control: Install Package을 선택한 후에 입력창에 Unity3D를 선택한다.

- 위와 같은 방법으로 Unity3D Builder System, Unity3D Snippets and Completes를 설치한다.

 

2-4. SublimeText2 프로젝트 설정 및 빌드.

- 작업하고 있는 Unity프로그램의 Script파일을 더블 클릭한다.

- SublimeText2 프로그램이 열리면 메뉴에서 Project->Add Folder to Project를 선택하여 unity 프로젝트 폴더를 선택한다.

- 다시 Project->Save Project As...를 선택하여 unity 프로젝트 폴더안에 [프로젝트명].sublime-project  형식에 맞춰서 저장을 한다.

- 메뉴 Tools->Build System->Unity를 설정하여 준다.

- 그후 command + b 를 눌러서 빌드가 잘 되는지 확인하여 보면 된다.


출처 : http://blog.naver.com/gedog31?Redirect=Log&logNo=100196601003


이상입니다.





Unity - Preferences - Always Show Project Wizard (체크)


터미널에서 


open -na Unity


하면 됩니다.~


EGLView::getInstance()->setDesignResolutionSize(width , height, policy)




EXACT_FIT

 - 비율을 고려하지 않고 디자인된 해상도를 화면에 맞추어 그린다.비율에 의한 왜곡이 발생할 수 있다.게임 화면이 늘어 나거나

   압축되어 보일수 있다.


NO_BORDER

 - 비율을 지키며 디자인된 해상도를 화면에 가득차게 그린다.왜곡은 발생하지 않으나 게임 화면의 일부가 단말기 화면 밖으로      잘려 보일 수 있다.


SHOW_ALL

 - 비율을 지키며 디자인된 해상도를 화면에 맞추어 그려준다.디자인된 리소스와 다른 비율의 화면에서는 화면의 양쪽 사이드

   에 검은색의 Border가 등장하게 된다.


FIXED_HEIGHT

  - 디자인된 해상도의 높이에 맞추어 단말기 화면의 비율에 따라 높이를 결정한다. 왜곡은 발생하지 않으나 비율이 고정되지 않     기 때문에 비율에 상관없이 정상적으로 동작하는 것을 개발자가 보장해 주어야 한다.


FIXED_WIDTH

  - 디자인된 해상도의 넓이에 맞추어 단말기 화면의 비율에 따라 넓이를 결정한다. 이하 FIXED_HEIGHT와 동일


MAC에서  cocos2d-x 3.x 세팅 하는 방법을 나열 하겠다.


1. 당연히 xcode는 기본적으로 설치가 되어 있어야 한다.(mac App Store 에서 다운로드 가능)

2. JDK 설치 하기(http://www.oracle.com) 최신 버전으로 설치 하기.(MAC용)

3. ADT Bundle 설치 하기(http://developer.android.com)

    - 다운로드 완료후 원하는 경로에 압축 해제를 하면됨.

    - eclipse 실행시 혹시 보안 경고 팝업창이 발생이 되면 (참고 :http://flyburi.com/573)


4. Android NDK 설치하기(http://developer.android.com/tools/sdk/ndk/)

    - ADT와 마찬가지로 다운로드 완료후 원하는 경로에 압축 해제 하셔서 사용 하면 됨.

   


5. Python 설치하기(www.python.org)


6. cocos2d-X 설치하기(http://www.cocos2d-x.org)


이상~

포인터 상수 , 상수 포인터 상당히 헷갈린다.


차근 차근 풀어써 이번에 꼭 기억 해야지.... 기억 보다는 이해가 좋을듯


포인터 상수


흔히 배열을 포인터 상수 라고 합니다. 


char test[] = "abcde";    test는 포인터 상수 라고 한다. 


위 배열의 선언에서 배열명은 test , 배열명은 배열 전체를 의미 하기도 하지만 

배열의 시작 주소 값을 나타 내기도 한다.

배열의 시작번지는 test[0]의 주소값 &test[0] 이다.

배열은 시작번지 부터 차례로 메모리상에서 연속적으로 붙어 있는 상태 인데 test의 주소가 변하게 되면 배열이 

엉망으로 이루어 진다. 

따라서 test의 주소가 변하지 않도록 현재 주소 값이 상수로 지정되어 있다.


캬.... 쉽다.... 이렇게 하니깐 쉽네.. 배열은 흔히 알수 있듯이 주소가 이어져 있다 근데 주소가 바뀌면 안되니깐 상수로 되어 있어야 한다. 따라서 배열은 포인터 상수다 . 포인터 상수는 주소값이 바꿀수 없도록 한 상태 이다.~!


단, 주소값은 고정 되어 있지만 주소값이 가리키는 대상체는 얼마든지 바꿀 수 있다..~!~! 명심 하도록 ~!~!




상수 포인터 


const는 변수를 상수화 해주는 키워드 이다. #define도 특정 문자열을 상수화 하지만 const와 다르게 전처리기에 의한 치환에 의해 코드에 삽입된다는 것이 다르다..


const char *test = "abcde";   여기서 test는 상수 포인터(상수지시포인터)


*포인터 상수는 주소값이 상수 이기 때문에 주소값이 변화가 안되지만 대상체는 

 변경이 가능 하고 (값을 변경)

 상수 포인터는 타입만 맞다면 다른 대상체로 가리킬수가 있다.


const char *test = "abcde";

test = "12345";


그런데 const 가 앞에 있을때가 있고 뒤에 있을때가 있다..~! (어렵다 ㅜㅜ)


const char *test =  "abcde";       // 상수 포인터

char *const test = "12345";      // 포인터 상수

const char *const test = "good"; // 상수지시포인터상수 (완전 변경 불가능)


배열이 포인터 상수 인 부분이 제일 중요 한것 같다..


외울려고 하지 말고 컴퓨터를 이해 하자~~


참고) http://thrillfighter.tistory.com/88





 















int iVal = 10;  // 전역 변수


int ScopeFunc() 

{

int iVal = 15; // 지역 변수

iVal += 10;   // 지역 변수

:: iVal += 10; // 전역 변수

}


신기 ~!~! 신기 ^^




참고 하세요~~~


NSString <-> const char *


const char* convert = "hello remove this: *";

NSString *input = [[NSString alloc] initWithUTF8String:convert];// convert 

//remove * FROM THE STRING          
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"*"]; 

// REPLACE * WITH NOTHING                   
input = [[input componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];

// CONVERT BACK         
const char *converted_back = [input UTF8String]; 


참고 링크 : http://stackoverflow.com/questions/10284011/convert-const-char-to-nsstring-and-convert-back-nsautoreleasenopool




#define 와 inline의 차이점


#define


장점 : 일반적인 함수에 비해 실행속도의 이점이 있다.

단점 : 정의하기가 어렵다. 복잡한 함수를 매크로의 형태로 정의하는데 한계가 있다.


#define SQUARE(x) ((x)*(x))


int main(void) {

std::cout<<SQUARE(5)<<std::endl;

return 0;

}


inline

장점 : 매크로 함수 지만 일반 함수 처럼 정의가 가능

단점 : 자료형에 따라 함수를 늘려야 한다.(다만,템플릿을 이용하면 제외)


inline int SQUARE(int x) {

return x*x;

}


int main(void) {

std::cout<<SQUARE(5)<<std::endl;

return 0;

}


템플릿을 이용한 inline

자료형에 구애 받지 않고 매크로 함수 구현 가능 하게 된다.


template <typename T>


inline  T SQUARE(T x) {

return x*x;

}


int main(void) {

std::cout<<SQUARE(5)<<std::endl;

return 0;

}



HashTable 사용법

HashTable로 인자를 넘길때 iTween.Hash() 함수를 통하여 넘기는방법과 직접 HashTable을 생성하여 전달하는 방법이 있다.

하지만 iTween.Hash() 를 써도 내부적으로는 HashTable을 직접생성하기때문에 HashTable을 직접생성하여 전달하는 방법을 알아야 한다.

Ex)

Hashtable hash = new Hashtable();

hash.Add("position", Vector3.zero);

hash.Add("orienttopath", true);
hash.Add("islocal", true);
hash.Add("speed", 5.0f);
hash.Add("easetype", iTween.EaseType.linear);
hash.Add("onstart", "ItweenStart");
hash.Add("onupdate", "ItweenUpdate");
hash.Add("oncomplete", "ItweenEnd");        

iTween.MoveTo(gameObject, hash);

혹은

아래와 같이 사용 하면 됩니다.~


iTween.MoveTo(mGrid.gameObject,iTween.Hash("x",(mGrid.localPosition.x - (mBossCount * 100)) ,"easeType","spring","loopType","none","time",1,"isLocal",true,"oncomplete","fBossAniEnd")); 

위 예제처럼 HashTable은 Key,Value을 한쌍으로 하는 자료구조이다.

iTween함수마다 내부적으로 사용하는 Key값이 다르며 함수마다 사용하는 Key값은

 http://itween.pixelplacement.com/documentation.php 에 잘나와있다.

 

위에 예제에서 사용한 Key값들은  MoveTo함수에서 자주 사용하는 옵션들이다.

"position" : 말그대로 위치값이다.

"orienttopath" : 이동하는 방향으로 Look 벡터를 자동 회전시켜준다.
"islocal" : 로컬좌표계로 이동
"speed" : 이동 속도이며 "time"대신 사용되어진다.
"easetype" : 보간 방법을 설정한다. iTween은 다양한 보간법을 지원하며 http://www.robertpenner.com/easing/easing_demo.html 에서 확인 가능하다.
"onstart" : Itween이 시작될때 호출되는 함수
"onupdate" : 매프레임마다 호출되는 함수
"oncomplete" : Itween이 끝날때 호출되는 함수

호출되는 함수 같은 경우 내부적으로 SendMessage로 구현되어 있다. 그래서 onupdate인자를 남용한다면 성능상 불이익이 올수 있다.


+ Recent posts