페이지

2017년 2월 27일 월요일

[Unity3D]디바이스 터치 이벤트 처리 개발을 쉽게 - Unity Remote

일반적으로 터치 처리 기능을 구현하려면 아래 루틴을 반복해야 한다.

 > 구동이 잘 되는지 빌드를 하고,
 > 빌드한 것을 폰에 넣어 설치를 하고,
 > 설치된 앱을 실행해서 직접 터치 처리 관련 테스트를 한다.

의도된대로 동작이 잘 될 때까지 위의 3단계 반복이다. 그야말로 무지막지하게 시간이 낭비되는 루틴이다.

지난 주말, 그리고 오늘. 간만에 터치 처리 기능 구현을 하게 되었다. 
다행히도 Unity3D에서는 Remote기능을 제공하고 있고, 이 기능을 사용하면 위와 같은 지옥의 루틴은 돌리지 않아도 된다.

난 자연스럽게 Remote기능이 떠올랐고 간만에 Remote기능을 사용해 볼 수 있었다.

Remote기능은 Unity엔진의 실행화면을 폰의 USB를 통해 전달 후, 폰의 화면에 동일한 화면을 띄워준다.
또한 폰은 그 상태에서 자신이 받는 터치 입력 정보를 Unity엔진에 보내준다.
이 기능을 활용하면 굳이 빌드&설치 루틴을 겪지 않고 터치 관련 처리를 손쉽게 구현할 수 있다.
바로 코딩하고 로그 확인하고, 터치 테스트 해서 결과를 확인할 수 있다.

Remote실행을 위해서는 먼저 테스트 폰에 Remote앱을 설치해야 한다.


플레이 스토어 다운로드 링크

5버전용 리모트앱 사용은 처음이다. 4버전때보다 룩이 깔쌈해졌다.
스샷에 나와 있는대로 유니티 메뉴에서 Edit > Project Settings > Editor로 들어가서
추가 설정을 해 준다. 그리고 구글링해서 나온 스택오버플로우의 어떤 현자께서 일러주신대로
나는 아래 설정을 끝내고 현자가 일러준대로 엔진을 껏다 켜주었다.


이제 Remote앱을 실행한 상태로 유니티 엔진의 PLAY버튼을 누르면
Remote가 잘 실행되는 것을 확인할 수 있다.

간만에 필요한 기능이 너무나 손쉽게 구동되서 기분이 좋았다.
굳굳.

그런데 삼성 갤럭시 폰에서는...
삼성 갤럭시 폰에서 Remote앱이 동작 안되는 것을 방금( 2017/03/21 ) 확인했다.
아마 삼성폰은 Kies를 별도로 설치해 주어야 되는 것 아닌가 예상해 보았다.

그 다음날, 위 증상을 겪은 분께서 Kies설치 이후 정상 동작을 확인 하셨다고 한다.

2017년 2월 24일 금요일

민주당 경선 - 이재명 vs 문재인 vs 안희정

민주당 경선 참여 신청 링크 : http://www.minjoo2017.kr

곧 민주당 경선이 시작된다. 난 이재명 시장을 밀어주기로 결심했다.
그 계기는 최근 SBS에서 있었던 대선후보 국민 면접에서 확인한
각 후보의 대표 공약 때문 이었다.


시대교체? 무슨 시대를 교체하겠다는건가?
단어가 담는 에너지 자체는 강렬하지만 무슨 가치를 우선 하는지 알기 어려운 공약이다.
게다가 최근에는 아무런 대안 없이 내일이 되면 과거가 될 문제를 얘기하면 안된다,
하셨는데( http://www.hankookilbo.com/v/cd1d4dee85ff4b0c88f9f64ed83c26d4 )

기득권들이랑 손 잡으신가? 그분들께 지원 좀 받으시는건가?
과거를 잊은 민족에게 미래가 없다.  요즘 이미지 좋아져서 나도 좋게 보려고 했는데 대실망이다. 최근 오르는 지지도가 의심스럽다.
누군가의 개입? 혹은 지원이 있는건 아닐까?


20대 정규직 비율이 10%가 안되는 요즘, 중요한 가치임에는 분명하다.
하지만 일자리가 부족한 오늘날의 현실. 그 원인은 무엇인가?
발본색원이 필요하다.


그렇다. 적폐 청산이어야말로 시대 정신이다.
우리에게 가장 필요한 것은 적폐 청산이다.
적폐야말로 모든 문제의 제1 원인이다.


조정래씨의 소설 태백산맥 1권의 내용 두 부분을 발췌해 보겠다.

( 42쪽 )
나라가 금하는 일을, 그것이 제아무리 옳고 바르다고 해도
나라와 맞서 이기는 것을 보지 못했던 것이다.
판석 영감이 칠십 평생을 통해서 겪어온 경험이었다.

( 63쪽 )
봐라. 양반이란 것들은 그 많은 백성들의 피를 빨며 배를 불리다가 나라를 빼앗겼고,
다시 일본놈들과 작당해서 일본놈들의 보호를 받으며 같은 민족을 짐승취급하고 있다.
일본놈들보다 더 나쁜 놈들이 그놈들인지 모른다.

우리나라는 돈 많은 사람이 참 살기 좋은 나라라고 정평이 나 있다.
기득권자의 나라인 것이다. 정확히 언제 부터인지는 모르겠지만,
아무리 늦게 쳐 줘도 조선 후기 시대부터 이후인 것은 분명하다.

자격도 없고 능력도 없는 인간들이 선천적으로 물려 받은 권력과 재산을 이용하여
선량한 인간들을 착취하고 나라의 곳간을 털어 먹어온 사기꾼들의 나라. 
그게 바로 조선. 대한민국이다.

최근 최순실 사태를 봐도 착취와 사기의 역사가 계속되고 있음은 여실히 증명된다.

그나마 아이러니한게 그에 반하여 정의롭고 능력 있는 사람들이 때마침 존재해주어
힘겹게 그 명맥을 유지해 온 나라이기도 하다. 그렇지 않았다면 진작에 사라졌을 나라이다.


하지만 이제 세상이 변했다. 
더 이상 정보의 은폐가 힘들어지는 세상에서 대중들은 깨어나기 시작했다.
이제는 저들의 기만과 협잡에 놀아나서는 안된다. 우리가 할 수 있는 것은 무엇인가?



모든 문제의 시작은 그들이다. 친일, 독재, 부패로 대표되는 그들.
대한민국 역사가 진행되는 내내, 그들은 그들이 만들어 놓은 판 아래서
힘 없고 무지한 대중들을 기만하고 착취해 왔다. 덕분에 나라가 점점 기울고 있다.
더 이상 늦기 전에 악의 뿌리를 뽑아야 한다. 


문재인님도 적폐청산을 얘기하시기는 했다.
하지만 아쉬운 점은 적페청산을 그의 공약 최우선상에 두지 않은 점이 아쉽다.
이재명과 동일하게 '적폐청산'을 그의 대표공약으로 삼았어야 했다.

이재명에게도 단점이 있다. 
정동영과 통하는 사람들이라는 모임의 행동대장으로서 친노 정치인들을 공격하는등,
민주당의 혁신을 저해하는 세력들과 한통속이라는 루머들이 있고,
이는 이재명을 지지해도 괜찮을까라는 걱정을 하게 만든다.

하지만 나는 '적폐청산'이라는 가치에 힘을 실어주고 싶다.
이재명이 경선에 패배하더라도 이재명을 지지한 사람의 의지만큼
경선의 승리자에게 '적페청산'이라는 가치가 전달될 것이기에,
나는 이재명을 지지한다.

내 생각에 안희정은 아니다. 과거가 될 문제를 얘기하지 말라고?
과거가 계속 현재에 남아 되풀이 되고 있기에 우리가 이토록 고통 받고 있는 것이다.

아직 중립에 계신 분들은 이재명이 맘에 안 든다면 문재인님이라도 지지해 주시라.

여러 가지 지표들이 나라가 망해 가는 것을 여실히 보여주고 있다.
더 늦기 전에 나라를 살리자. 
민주 경선에 참여하자.

민주당 경선 참여 신청 링크 : http://www.minjoo2017.kr

2017년 2월 19일 일요일

공포박물관 1.0.3 업데이트 수기 - 5편 : 마치며...


업데이트 작업 전에 이런저런 욕심이 생겼다.
리마스터버전으로 업그레이드 하면서 스토리도 새로 쓰고,
유저분들이 리뷰로 요구 하셨던 SAVE / LOAD, 오마케 모드등도 추가 하고,
그 핑계로 무료로 제공하던 게임을 유료로 전환한다던가......

근데 이미 설날 연휴 플러스, 약 1주 정도의 시간을 더 투자하며
ezGUI, obb downloader, 애셋 번들 이슈들과 씨름하고 나니
리마스터 버전에 대한 야욕은 깔끔히 사라져 버렸다.

개인 프로젝트는 이래서 문제다.
혼자 하기 때문에 포기하고 싶은 순간이 찾아 왔을 때, 아무도 말리지 않는다.

물론 공포박물관이라는 프로젝트가 좀 더 매력적이었다면 어떻게 됐을지 모르겠다만
내 의지가 좀 더 강려크 했다면 또 어떻게 됐을지 모른다.

곧 다음 프로젝트를 시작할 예정이다.
앞으로 더 잘하자.
진짜로.

공포박물관 1.0.3 업데이트 수기 - 4편 : 임시방편( obb downloader로 이전 버전 obb파일 받기 )

실행 불가 현상의 핵심 원인은 obb downloader의 호환성 문제였다. obb downloader를 최신 버전으로 업데이트 한다.
이제 게임이 크래쉬 되던 지점은 무사히 통과된다. 하지만 obb 파일이 다운로드 되는 것 같지 않다. 왜지?

obb파일을 업데이트 할 필요를 당장 못 느꼈기에 버전업한 앱을 업로드 할 때,
업데이트에 사용할 obb는 이전 버전의 것으로 설정 했다.

하지만 이게 문제 였다. 원인을 찾기 위해 obb downloader플러그인 소스를 훑어보던 중, 다음과 같은 코드가 눈에 들어왔다.
private static void populateOBBData()
{
 if (obb_version != 0)
  return;

 using (AndroidJavaClass unity_player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
 {
  AndroidJavaObject current_activity = unity_player.GetStatic<AndroidJavaObject>("currentActivity");
  obb_package = current_activity.Call<string>("getPackageName");
  AndroidJavaObject package_info = current_activity.Call<AndroidJavaObject>("getPackageManager").Call<AndroidJavaObject>("getPackageInfo", obb_package, 0);

                // 플레이어 셋팅의 Bundle Version Code값이 obb_version에 할당 되는 듯 하다.
                obb_version = package_info.Get<int>("versionCode");

               // 만약 아래와 같이 하드 코딩 하면 내가 원하는 버전의 obb파일을 얻을 수 있다.
               // 아래 코드 같은 경우, 버전 코드 3에 매칭되는 obb파일을
               // 다운로드 받을 수 있게 해 준다.
               obb_version = 3;
 }
}

업데이트를 위해 플레이 스토어 개발자 콘솔에 APK를 업로드 하기 위해서는 이전에 올렸던 APK보다 높은 버전 코드를 설정해야 한다.
따라서 위의 코드 내용 대로라면 obb_downloader를 사용할 떄, 버전 코드를 올리는 것 이외에도
obb파일도 버전에 맞게 새로 만들어서 같이 올려야 한다.


리소스 내용이 바뀔 필요가 없는데 obb_downloader때문에 obb파일을 새로 업로드 하고 싶진 않았다.
그래서 테스트 삼아 위와 같이 obb_version = 3이라고 코딩 후 어떻게 동작하는지 테스트 해 본 결과,

다운로드가 된다!!!

이후 obb_downloader 호환성 문제 때문에 문제를 일으켰던 폰에서도 obb파일이 잘 다운로드 됨을 확인할 수 있었다.
하지만 이후 obb파일을 애셋번들링 했던 엔진과 앱을 빌드했던 엔진의 버전 불일치 문제 때문에 결국 obb 파일은 새로 빌드 해야 했다 ㅠ ㅠ

3년 지난 후의 애셋번들링 툴이라서 툴 코드에 대한 안전성에 자신이 없어서 웬만하면 애셋번들은 다시 굽고 싶지 않았다.
하지만 앱과 애셋번들과의 버전 불일치 문제 때문에 결국 obb파일도 새로 갱신했다.

이후 obb 다운로드도 계속 잘 되고, 애셋번들 파일 로딩도 잘 처리되어 공포 박물관의 타이틀 화면을 폰에서 확인하는데 성공한다.

임시방편으로 빨리 일을 처리하고 싶었지만 결국 정공법으로 문제를 해결해 나가야만 했다.
이렇게 업데이트를 위한 8부능선을 넘는다.

2017년 2월 16일 목요일

공포박물관 1.0.3 업데이트 수기 - 3편 : 의외의 복병( ezGUI 호환성 문제 )

obb downloader업데이트를 하기 전에 Unity3D 엔진을 최신 5.5버전으로 업데이트 해보았다.
하지만 이내 ezGUI 때문에 발생하는 각종 경고와 에러 메시지 때문에 5버전에서 업데이트 작업을 진행 할 수 없었다. 
ezGUI는 국내에 Unity3D가 태동하던 무렵 NGUI 탄생 전까지 자주 쓰이던 UI개발 플러그인으로 더 이상 애프터 서비스를 지원하지 않는다.

절판 됐기 때문에 애셋 스토어에서 구매한 사람만 다운로드 받을 수 있다.
수백 개의 경고 메시지가 무섭지만 다행히 Unity3D 4 최신 버전에서 동작한다.

공포박물관 작업 당시에는 Unity3D 4버전으로 개발 했기 때문에 5버전은 포기하고 4버전을 재설치해 보았다. 

유니티3D 4버전 다운로드 링크

여전히 오류가 확인 되지만 많은 수는 아니다. 적당히 오류만 나지 않게 코드를 수정해 본다.
다행히 이제 컴파일 오류가 나지 않는다. 안심하고 다음 문제를 해결하기 위해 분석하고, 코딩하고, 빌드하고 폰에서 실행해 본다.

갓뎀!!! 터치 인식이 안된다. 

최대한 빨리 고민하지 않고 문제를 해결하고 싶다!
절판된 버전이지만 간절한 마음으로 ezGUI를 애셋 스토어에서 다운 받아 임포트해 본다. 순간 또 한 번 뜨악한다.
이전 버전의 ezGUI와 폴더 구조가 완전히 바뀐 것이다. 쉐이더 및 테스트용 애셋을 제외하고는 최신 스크립트들을
이전 ezGUI 스크립트 폴더로 하나하나 복붙해 나간다.

휴~ 이제 터치 인식이 잘 된다.

만약 공포박물관 작업 당시 사용했던 엔진 버전을 기억했다면, 그 버전으로 다운로드 받는 것이 속 편했을 것이다.
하지만 그 때가 3년 6개월전 일이라 정확히 버전도 기억이 나지 않는데다, 현재 공식 사이트에서 제공하는 Unity3D 버전도
4.3이 가장 올드한 버전이다. 결국 그나마 4버전의 최신 것으로 작업 환경을 꾸미는게 최선이었던 것이다.

워낙 과거의 산물이라( IT기술은 10년이 아니라 2년만 지나도 강산이 변한다 ) 이제 ezGUI는 다시 쳐다볼 일이 없을줄 알았다.
근데 최근 입사한 회사에서 인계 받은 프로젝트가 ezGUI를 쓰고 있었고 개인 프로젝트 업데이트 때문에도 ezGUI를 다시 열어보게 된 것.
회사 프로젝트에서 ezGUI는 이제 tk2d로 교체해 나가는 중이고 공포 박물관도 무사히 업데이트 했다.
앞으로는 이제 ezGUI를 다시 보지 않길 소망해 본다. 과연......



2017년 2월 11일 토요일

공포박물관 1.0.3 업데이트 수기 - 2편 : 문제의 원인( unity3d obb downloader )


증상은 일부 폰에서 게임 실행 후, 스플래쉬 화면이 확인되면 얼마 안 가 앱이 강제 종료 되는 현상 이었다.
일부 폰에서만 발생하는 문제라 직접 확인할 방법이 없어 곤란했는데
마침 설날 연휴때 잠깐 보기로 한 친구의 폰에서 이 문제를 확인할 수 있었다.

확인 결과, 앱이 죽는 시점이 Unity3d 공식 플러그인, OBB 다운로더가 리소스를 초기화 하는 시점 이었다.
최근 출시된 폰과 호환성 문제를 일으키는 듯 했다.


플레이 스토어 공식 APK 파일 사이즈 확장 매뉴얼

유니티3D 공식 OBB 지원 매뉴얼


플레이 스토어에서는 용량이 큰 앱을 그대로 출시하지 못한다.
앱의 리소스 파일 일부를 분리하여 obb라고 불리우는 파일로 분리해서
앱과 obb파일을 같이 업로드 하여 출시해야 한다.

공포 박물관 출시 직전 당시( 2013년 4월 ), 
플레이 스토어의 앱 사이즈 제한 정책을 그제서야 확인했고
이것 때문에 안드로이드 네이티브 코딩이 필요할지 모를 상황이라 멘붕 직전 이었다.

그나마 다행이었던게 지금처럼 obb 자동 분할 기능은 없었지만
그 때 당시에도 Unity3D에서 공식적으로 obb 다운로더 플러그인을 애셋 스토어를 통해 제공하고 있었다.

그래서 안드로이드 버전에서는 게임의 이미지 리소스 대부분을 애셋번들로 분리했고,
이렇게 분리한 애셋 번들 파일을 앱의 obb파일로 업로드 했고 다운로드는 obb downloader로 해결했다.
애셋 번들 다루는게 꽤나 손이 가는 작업이라 공포 박물관 개발 막바지의 잊지 못할 난관이었다.

일단, 플러그인을 최신 버전으로 업데이트 해 보기로 한다.

iOS 개발 인증서와 프로비저닝에 관한 설명


그러하다...

2017년 2월 10일 금요일

공포박물관 1.0.3 업데이트 수기 - 1편 : 동기


<공포박물관>
플레이 스토어 링크

공포박물관은 약 3년 6개월전,
한 동네에서 같이 자랐던 게임 원화가 후배와 합심하여 만든 디지털 호러 게임북이다.

불투명한 회사 프로젝트의 미래. 상당히 긴 기간의 취업난. 각자의 사정을 안고,
우리 끼리라도 간단한 게임 하나 정도는 직접 출시해 보자는 목표를 잡았었다.
덕분에 게임 심의를 받느라 삽질을 했던 웃픈 경험도 했었고.

게임물등급위원회 심사 과정

그리고 결국 출시했다. 나름 보람 있었고 의미 있었던 작업이라 생각된다.
이후 3년 6개월의 시간이 흘렀고, 게임 원화가 후배에게서 연락이 왔다.

최근 입사한 회사에서 동료들에게 공포박물관 자랑을 했는데,
막상 상당 수의 동료들 폰에서 공포박물관이 실행이 안된다는 것이었다.

그렇다. 나도 종종 게임 실행이 안된다는 제보를 종종 전해 들었던 것 같다.
심지어는 직접 어떤 폰에서 실행이 안되는걸 본 것 같기도 하다.

공짜로 내놓은 게임이라고 관심을 껐던 것일까?
게임의 컨셉 및 원작이 내 것이 아니여서 관심을 껐던 것일까?

회사 동료들에게 자랑했지만 실행이 안되었던 게임.
그 상황이 머리 속에 그려진다.
거기서 내 맘이 움직인다.

그렇게 해서 3년 6개월만에
<공포박물관> 1.0.3버전 업데이트 작업을 시작하게 되었다.

그릿( GRIT )


67페이지
모든 완성한 것에 대해 우리는 그것이 어떻게 생겨났는지 묻지 않는다.
우리는 마치 그것이 마법에 의해 땅에서 솟아난 것처럼 현재의 사실만을 즐긴다.

우리의 허영심과 자기애가 천재 숭배를 조장한다.
왜냐하면 천재를 마법적인 존재로 생각한다면
우리 자신과 비교하고 우리의 부족함을 느끼지 않아도 되기 때문이다.
누군가를 '신적인 존재'로 부르면 우리는 그와 경쟁할 필요가 없어진다.

by 니체

84-85페이지
탁월성에 도달하는데는 지름길이 없기 때문이에요.
진정한 전문 기술을 개발하고 대단히 어려운 문제를 이해하기까지는 시간이 걸리죠.
대다수의 사람들이 생각하는 그 이상의 시간이 걸려요.
그런 다음에 그 기술들을 적용해서
사람들에게 가치가 있는 재화와 용역을 생산해내야 해요.

자신이 사랑하는 일을 하는 거지만 그냥 사랑에 빠지면 안 되고
사랑을 지속시켜 나가야만 하죠.

88-89페이지
열의는 흔히 볼 수 있지만 '지속적인 열의'는 드물다.

183페이지
열심히 하는 거죠. 재미가 없을 때도 해야 할 일은 해야죠. 
왜냐하면 결과를 달성하면 엄청 즐거우니까요. 
마지막에 '아하'하는 즐거움,
그것 때문에 먼 길을 참고 가는 것 입니다.

216페이지
그랜트의 연구에 의하면,
개인적 흥미와 친사회적 관심, 둘 다를 지닌 지도자나 직장인들이
100% 자기중심적인 동기만 가진 이들보다 장기적으로 실적이 좋았다.