회사에서 쓰려고 만들었는데 혹시 필요한 사람이 있을까 싶어 올린다.

바이러스 이딴거 없으니 안심하고 쓰시길...

 

요렇게 생긴 녀석이고 사용법은 간단하다.

Auto Clicker by moon

사용법

  1. MoonClicker.exe 파일에서 마우스 오른클릭 후 '관리자 권한으로 실행' 선택
  2. 자동클릭 하고 싶은 위치로 커서를 옮긴 후 F2키 누름 (여러 포인트를 저장할 수 있다.)
  3. 실행 간격을 지정 한다. (ex 500 = 0.5초, 1000 = 1초, 10000 = 10초)
  4. 포인트 저장이 완료 되었으면 F7키로 오토클릭 시작~!
  5. F8는 오토클릭 종료

* 여러 포인트가 저장된 경우 포인트 1번부터 순차적으로 자동 클릭한다.

 

MoonClicker.zip
0.01MB

'개발 > Tip' 카테고리의 다른 글

xcode 라인 삭제  (0) 2015.12.12
이클립스 프로젝트 총 라인수 세기!!  (0) 2013.05.29
이클립스 매크로 설정 (templates 등록)  (1) 2011.05.11

이 작업을 시작하게 된 썰


현재 만들고 있는 게임은 데이터들을 xml 형식으로 읽어온다.

그런데 전체 데이터 로드를 게임 진입부에서 한꺼번에 하기 때문에 (왜 그렇게 했을까... ㅠ_ㅠ)

데이터량이 많아지면 많아질수록 당연하게도 데이터 로딩시간은 점점 늘어날 수 밖에 없다.


전체적으로 데이터 로딩 구조를 바꾸기엔 손봐야할 부분이 너무 많기 때문에

일단 기존에 사용하던 기본 xml 파서를 가볍고 날렵한 놈으로 바꿔보기로 했다.


여기 저기 구글링을 통해 알아보니

TinyXml, Mono.xml, RapidXml 등 유니티에서 사용할 수 있는 몇몇 파서가 있었는데

그 중 RapidXml을 소개해보겠다.




먼저 기본 System.xml 파서와 Mono.xml, RapidXml 파서를 사용한 xml 데이터 로딩, 파싱에 소요되는 시간은 다음과 같다.

퍼포먼스 테스트 - 데이터 로딩 : xml 데이터 로드 10회 반복 


  • System.xml (유니티 기본) : 53.96 / ms


  • Mono.xml : 34.63 / ms

  • RapidXml : 0.39 / ms


  • 퍼포먼스 : RapidXml >>>>> Mono.xml > System.xml

0.39 !!!!????
잘못잰건가 싶어서 몇번을 다시 돌려봐도 결과는 비슷했다.
우앙 ㅋ 굿



그렇담 이번엔 파싱.


퍼포먼스 테스트 - 데이터 파싱 : xml 데이터 파싱 10회 반복 


  • System.xml (유니티 기본) : 293.79 / ms


  • Mono.xml : 242.64 / ms


  • RapidXml : 252.11 / ms

  • 퍼포먼스 : Mono.xml > RapidXml > System.xml



결론


파싱에서는 Mono.xml이 수치적으로 젤 퍼포먼스가 좋았지만 RapidXml과 근사치였다.
하지만 RapidXml의 어마무시하게 빠른 로딩속도까지 생각해보면

RapidXml의 압승!!!


사실 간단한 xml 로딩은 기본 파서를 사용해도 전혀 상관이 없다.

하지만 나와 같은 고민을 해본 개발자라면 Parser 교체를 해보는것도 좋은 대안이 될듯하다.

(현재 개발중인 게임도 RapidXml로 파서를 바꿔서 사용중인데 데이터 로딩 시간이 대폭 감소되었다. ^^;;)


교훈 : 데이터 구조 설계부터 잘 해라...   ㅜ_ㅜ





첨부된 파일 설명



첨부된 파일은 https://github.com/sczybt/UnityRapidXml의 샘플 코드를 기반으로 작성한 유니티 테스트 프로젝트이며
유니티 에디터 (Mac osx, Windows), Android 디바이스에서 사용 가능하도록 라이브러리를 추가해두었다.



- Plugins > Android > libs > 하위 파일들 : Android 빌드용 라이브러리


- Plugins > RapidXml.dll : PC용 라이브러리


- Plugins > RapidXml.bundle : Mac용 라이브러리


- Plugins > RapidXml > RapidXml.cs : RapidXml c# wrapper


- Assets > RapidXml > Scenes > Main.unity : 테스트 씬




Plugins 폴더 이외의 파일들은 테스트용이므로 실제 사용시에는 plugins폴더만 본인의 프로젝트로 임포트해서 사용하면 된다.












구문 레이블


반복문이나 조건문에 이름을 달자!!! 근데 왜??


말이 필요없다.  코드로 확인해보자.


1
2
3
4
5
6
7
8
9
10
label_1 : for i in 1...9
{
    label_2 : for j in 1...9
    {
        if j == 5
        {
            break label_1
        }
    }
}
cs

j 가 5가 되면 break로 for문을 빠져나가게 되는데 구문 레이블을 사용하지 않을 경우 다시 바깥에 있는 for문을

수행해야 한다.

하지만 구문레이블을 사용하면 바깥에 있는 label_까지 바로 빠져나갈 수 있다.


짱좋음!!



'개발 > Swift' 카테고리의 다른 글

#available  (0) 2015.12.22
extention  (0) 2015.12.12
willSet didSet  (0) 2015.12.11

#available


버전별 사용자 처리를 위한 키워드라고 할 수 있겠다.


유니티를 예로 들자면 각 유니티 버전에 대한 타입 분류를 


1
2
3
4
5
#if UNITY_4_6_5
    //4.6.5 버전 사용자 처리
#else
    //그 외 버전 사용자 처리
#endif
cs


이렇게 c# 전처리 define을 사용해서 처리할 수 있는데
스위프트는 #available 키워드로 코드상에서 좀더 세밀하게 처리가 가능하다.

1
2
3
4
5
6
7
if #available(iOS 9*)
{
    //ios 7 버전 사용자 처리
}else{
    //그 외 버전 사용자 처리
}
 
cs

또한, 여러개의 플랫폼을 구분지어서 체크할수도 있다.

#available(iOS 9, OSX 10.11.2, *)

여기서 주의할점은 항상 마지막엔 *을 넣어서 입력이 끝났음을 알려주어야 한다.



'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
extention  (0) 2015.12.12
willSet didSet  (0) 2015.12.11

xcode 라인 삭제


지금이 때가 어느때인데 말야

라인 삭제가 안되는 에디터라니!!!  이게 말이됨???!!


안되면 되게하자..

(참고로 난 이클립스 + 모노디벨롭 + 기타등등의 모든 에디터에서 라인 삭제는 command + d로 사용하고 있음)


1) xcode 종료 후 Finder > 이동 > 폴더로 이동 선택





2) 아래 링크 복 붙 후 이동 버튼 ㄱㄱ!!

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist



3) 발견한 파일을 다른 곳으로 복제

(해당 파일은 바로 열어서 수정이 안되기 때문에 복제 후 수정 해야함)



4) 텍스트 편집기로 열어서 <key>Deletions</key> 를 찾는다.




5) 제일 마지막 부분에 아래 항목 추가

<key>Delete Line</key>

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>




6) 저장 후 저장된 파일을 원래 있던 위치 

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist 에 붙여넣기!!

(주의!! [대치] 로 덮의 씌워야함)






7) xcode 실행시킨 후 XCODE > Preferences... > Key Bindings 

Filter 입력창에서 delete line으로 추가한 항목을 검색 후 원하는 키로 설정해주면 끝!!





주의!)

입력한 키가 기존에 사용중일 경우가 있으므로 꼭 Conflicts에 들어가서 중복되는 키가 없는지 확인 후 사용해야함!!










extention


확장!??


음...    이럴때 써먹으면 좋을 듯 하다.


일단,

"안녕하세요" => "요세하녕안" 이렇게 역순으로 글자를 바꾸려면 


1
2
var testString:String = "안녕하세요"
String(testString.characters.reverse())

cs


이렇게 해주면 된다.

그런데 저렇게 사용해야할 부분이 많다면??

매번 저렇게 해줘도 되겠지만 

extention으로 String을 확장해서 사용하면 

아주 간단히 사용이 가능하다.


1
2
3
4
5
6
7
8
9
extension String
{
    func backwards() -> String
    {
        return String(self.characters.reverse())
    }
}
 
"안녕하세요".backwards()
cs

이 얼마나 아름다운 기능이냐....  ㅠㅠ  
swift 너란놈은..


'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
#available  (0) 2015.12.22
willSet didSet  (0) 2015.12.11

willSet didSet


아직 공부중이라 어떻게 사용하는게 Best일진 모르겠지만 암튼 사용 용도에 따라 엄청 쓰임새가 많은 놈 임에는 틀림이 없다.


간단하게 정의하자면 저놈들은 한마디로 


변수를 감시하는 감시자!!


그럼 어떻게 동작하는걸까?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ObserverTest
{
    var testWill = 0
        {
        willSet
        {
            print("\(testWill) <= 바뀌기 전이야!!")
        }
        
        didSet
        {
            print("\(testWill) <= 값이 바꼈어!!")
        }
    }
    
    var testDid:Int = 0
        {
        didSet
        {
            if testDid > 5
            {
                testDid = 0
            }
            print(testDid)
        }
    }
}
var observer = ObserverTest()
observer.testWill = 10
cs


observer.testWill = 10 이 실행되는 순간 

0 <= 바뀌기 전이야!!

10 <= 값이 바꼈어!!


이렇게 찍힌다.

특정 변수를 모니터링 하고 있다가 값이 바뀌게 되면 

바뀌기 바로 직전에 willSet

바뀐 직후 didSet이 실행되는거다.


특정 변수의 값이 변하는 순간을 체크하고 싶을때 print를 걸어둔다던지

변수의 값이 제한 범위를 넘겼을 경우 다시 초기화 하고 싶다던지..

이런 경우 사용한다면 완전 편리하지 싶다!!!

'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
#available  (0) 2015.12.22
extention  (0) 2015.12.12

1. 3D Max의 System Unit을 미터(m)단위로 맞추고 Display Unit은 사용자 편의에 맞춰 설정


2. 모델링 export 시 Scale Factor를 1로 설정.


3. Unity 임포트 시 Inspector의 Scale Factor를 0.01 => 1로 변경 

(보통 max의 System Unit이 cm 단위로 되있어서 유니티 transform의 unit(m)와 맞춰주기 위해 디폴트로 0.01로 설정되있는듯)

Windows7 환경에서는 아무 문제없이 안드로이드 프로젝트 작업을 진행했었는데

얼마전 개발 환경을 imac으로 바꾼 후 Unity 셋팅을 하다 멘붕이 왔다.



이게 무어야;;;


No platforms found ???


분명히 sdk가 버전별로 설치되어 있음에도 불구하고 안드로이드 빌드 시 저놈의 팝업이 계속 뜨면서

빌드 실패...


구글 신에게 물어봤지만 뾰족한 해결방법을 찾지 못해 하루 반나절을 끙끙 대던 중 어찌저찌해서

해결방법을 알아냈다.


sdk 다운로드 시 최신이 아닌 이전 리비전을 다운 받은 후 다시 최신으로 업그레이드 하는 방법이다;;

[mac 용 sdk r21 down : http://dl.google.com/android/android-sdk_r21-macosx.zip]


1. 기존에 설치된 sdk 폴더 삭제.

2. 위의 링크에서 sdk를 받은 후 적절한 위치(왠지 간단한게 좋을 것 같아 Android/sdk/ 로 생성;)

3. 설치된폴더 > tools > android 를 실행 (Terminal에서 실행시킬 필요 없다. 그냥 클릭 ㄱ ㄱ)

4. sdk 4.0 (API 14)를 설치해본다.

5. unity에서 빌드 테스트

6. 성공


허무하게 해결..





윈도우 환경에서만 유니티 개발을 해오다가 이번에 맥 환경에서 개발을 하게되어

이것 저것 셋팅을 하다보니


아니 이게 뭐여;; 맥용 Monodevelope에선 한글 주석 입력이 더럽게 힘들구나!!!


라는걸 느끼고 바로 다른 에티터툴을 알아보기 시작했다.

그래서 찾아낸것이 바로  Sublime text 2


코딩에 많은 편의성을 주기 때문에 요즘 많이 사용하는 에디터라는데 오늘에야 처음 들어보다니.. 

일단 셋팅 ㄱ ㄱ 


1. Sublime text 2 를 다운 받는다.  http://www.sublimetext.com/2

    (라이선스 비용은 70$지만 라이선스 등록을 하지 않고 사용을 해도 가끔 등록 팝업 뜨는 것 말곤 기능상의 제약은 없다고 한다.)


2. Package install을 편하게 관리할 수 있는 Package control을 설치한다. 

   (http://wbond.net/sublime_packages/package_control/installation 참고)


- Package 파일 다운로드  [다운로드

  링크가 깨졌을 경우 http://wbond.net/sublime_packages/package_control/installation


Sublime text 2 > Preference > Browse Packages... > 




- 패키시 선택창이 뜨면 좀전에 다운받은 패키지 파일을 패키지 선택창의 Installed Packages에 옮긴 후 파일 선택


- Sublime text 2 재실행


3. Tools > Command Palette... > p 입력




4. Package Control: Install Package 선택 후 패키지 검색창에 unity 입력



위와 같이 유니티 관련 패키지들이 나오는데 설치하고자 하는 항목을 클릭하면 바로 설치가 된다.

(패키지 제거는 Package Contol: Remove Package선택.)


5. View > Syntax > 유니티 관련 항목이 있으면 정상 설치





Sublime가 Monodevelope의 대용으로 훌륭한 에디터 역할을 할 수 있을 진 좀 더 사용해봐야 알겠지만

대략적인 장점을 몇개 꼽자면


1. 모노디벨롭에 비해 엄청 가벼운 느낌 (그냥 메모장 여는 기분??;;)

2. 한글 주석 사용 가능 (한글 주석 사용이 가능하지만 UTF-8만 지원하기 때문에 이부분을 잘 고려해야함)

3. 에디터 내에서 빌드 가능

4. 유니티 API 확인이 가능하다. (에디터 내에서는 아니고 웹브라우저를 띄운다.)

5. 코드 하일라이터, 구문 자동 완성 기능 사용 가능


이정도??


모노디벨롭의 디버깅 기능과 St2의 장점을 활용해서 코딩을 하면 조금이나마 생산성 향상에 도움이 되지 않을까 싶다~!!




+ Recent posts