2017년 11월 4일 토요일

유니티 DOTween TweenCallback 버그

프로젝트 애니메이션등에 쓰려고 구글링을 통해 DOTween을 알게 되었다.
그 중에서 콜백이 제일 필요한 기능이기도 했다.
녹스에서 실행한 뒤 게임에 버그가 있어 뒤지다보니 그 원인이 DOTween에 있었다.

코드오류라고 판단하고 몇시간을 삽질하다 명확하게 이상한 부분에 로그를 남겨 확인해보다 5번 실행되게 해놓은 함수를 6번 실행하는 로그가 남는걸 확인했다.

해당 함수를 TweenCallback으로 실행하고 있었기에 따로 간단한 테스트코드를 작성해서 에디터와 안드로이드 두곳에서 실행해보니 에디터상에서도 확인할 수 있는 버그였다.

빈도가 안드로이드에서 더 빈번하게 나는 것 뿐이었다.

버그가 발생하는 조건이 있었는데 Sequence에  AppendCallback, AppendInterval을 같이 사용해 총 100회를 실행하게 했을 경우 102회의 콜백을 했다.

에디터에서는 처음 한번 오작동한후 그 후에는 정상작동하였지만 안드로이드의 경우에는 지속적으로 1~2회 더 중복콜백하는 결과가 나왔다.

유니티에서 SpriteAtlas 사용시 주의사항

유니티 5.x 버전에서 SpritePacker를 사용했었는데 2017로 넘어오면서 SpritePacker를 사용할 수 없었다.
그래서 구글링을 좀 해봤더니 SpritePacker가 SpriteAtlas를 사용하게끔 바꼈다는 글을 보게 되었다.
사용법이 이해되지 않아 좀 헤매긴 했지만 여러 예제를 참조하며 프로젝트에 적용했다.
패킹이미지와 원본이미지가 둘 다 APK파일 안에 들어가는 이상한 점이 있긴하다.

그렇게 적용하고 프로토타입이 완성되어 프로파일링을 하게 되었는데 object count가 지속적으로 증가하는 현상이 발견되었다.
처음에는 코드적 오류인가 싶어서 이것저것 테스트를 해봤지만 object count가 늘어나지않아 또 삽질을 시작했다.
그러다 스프라이트 이미지를 바꿀때 object count가 미친듯이 늘어나는 것을 확인하게 되었다.

결론적으로 여러 예제에서 볼수있었던 SpriteAtlas.GetSprite(string) 이 함수를 호출해 sprite를 가져올때마다 object count가 증가하고 있었다.

아직도 이해가 안가는건 가져와서 sprite에 넣었다가 다른 sprite로 변경되면 참조값이 없어지면서 gc에 의해 사라진다던지 해야되는게 아닌가하는 생각이 들긴하지만 사용할 sprite를 전부 캐싱해서 사용하는 방법으로 해결을 보게 되었다.


2017년 3월 8일 수요일

모바일 게임 결제(IAP)에 관한 내용 정리

인디팀을 구성한 후 게임을 힘들게 완성시켰었다.
출시 하기전 IAP를 앱에 적용하기 위해 고민했던 내용과 결론에 대해 말하려고 한다.

우선 비소비형 아이템으로 구성된 게임의 경우에는 결제 서버를 넣지 않는 경우가 있다.
(비소비형 아이템은 길건너친구들(초창기를 말하고 바꼈는지는 모름)과 같이 케릭들을 결제를 통해 구입할 수 있지만 물약과 다르게 소비하지 않고 하나 이상 구매할 수 없게 구성된 게임을 말함. 아이템 구매시 구매 여부를 구글서버에서 저장하고 있기때문에 해당정보를 통해 클라내에서 복구해줄수 있음.)

유저가 아이템을 구매후 문제가 생겨 복구를 해줘야 할때 클라자체에서 해결할수 있기 때문이다.

하지만 소비형 아이템을 가진 게임의 경우에는 클라에서 해결해주기가 애매하다.
경험을 해보시거나 평점댓글에서 보신 적이 있으실 건데 "결제했는데 아이템이 안들어 왔어요" 와 같은 문제를 해결해 줘야 하는데 보통 이런 문제는 서버와 DB를 사용해야 한다고들 말한다.

그 이유가 Java의 dex파일, C# dll파일이 해킹에 취약하기 때문이다.
(나중에 이부분에 대해 글을 쓰려고 한다.)

각종 결제 해킹 방법에 대해 클라에 적용해봤자 단순(난독화 X)하게 구성되어있을수록 초심자도 쉽게 우회하거나 무력화 시킬수 있기때문이다.
Java로 구성되어있으면 쉽고 C#으로 구성되어 있으면 좀더 귀찮은 정도의 차이가 있긴하다.

하여간 유저의 항의와 해킹때문에 결제 서버가 있어야 된다고 결론이 났다.
(해킹에 대해서는 무시하고 유저의 항의에만 대응하는 방법으로는 무조건 환불이라는 방법도.....)

그래서 서버는 어떻게 구성해야 할까?
이전에 이미 개발을 해봐서 직접 구성하는 것에는 문제가 없었다.
하지만 직접 결제서버를 구성하는게 귀찮은 일이고(또한 IOS는 해본적도 없다) 유저의 정보를 DB로 관리하는 것또한 작은 프로젝트, 인디팀에서는 선택하기 껄끄럽다고 생각했다.

내가 내린 결론은 이렇다.
결제관련은 TOAST IAP를 사용 - 결제 해킹에 대한 것은 모두 이것으로 해결(클라 IAP에셋을 구매할 필요도 없어짐)
결제 오류 유저에 대한 대응 - TOAST IAP 로그 확인 후 환불
유저 정보(젬같은) - 암호화한 후 클라에 저장
간단한 결제로그를 저장할수 있는 DB서버
(TOAST에 로그 작성후 아이템을 발급하는 형식이기 때문에 이부분에서 오류가 발생해도 결제는 성공했지만 아이템을 발급받지 못하는 경우가 엄청나게 낮은 확률로 발생할수도 있다. 이런 경우에도 환불을 해주면 되긴 하지만 유저가 거짓말을 하는 경우가 있을수도 있다. 그리고 계속 반복하는 경우에 어떻하지?라는 고민에 빠졌다. 그래서 여기에 DB를 추가해 아이템 발급로그를 남기도록 했다. 아이템 발급로그가 없을때만 환불을 해주기로 했다. DB서버를 구성했음에도 유저 정보를 클라에 저장하는 것은 서버를 최대한 단순하게 구성하기 위함이다.)

참고) http://cloud.toast.com/service/iap

2017년 2월 16일 목요일

주거시설을 사무실로 사용하는 개인사업자의 게임제작-배급업 신청에 관한 이야기

게임회사를 다니다 퇴사한 후 개인개발자의 길로 들어선지 1년이 다 되어 갑니다.
고향으로 내려와 사무실을 구해 작업을 하고 있지만 너무 추워 계약이 끝난 후에는 집에서 작업을 하기로 정하면서 알아본 내용에 대해서 글을 쓰려고 합니다.

사무실을 구한 후 자의반 타의반에 의해 개인사업자를 등록했었습니다.
현재는 휴업상태로 전환해놓은 상태인데 수익여부와 상관없이 앞으로 만들 게임들이 청소년이용불가 게임이라 심의를 받아야 하는데 개인으로 신청시 심의비가 더 저렴하기 때문이죠.
또한 사업자로 심의를 받으려면 게임제작-배급업등의 절차를 진행해야 하는 등 추가 비용이 들어가게 됩니다.

그래서 우선은 개인으로 시작한 후 수익이 나는 시점에 개인사업자를 살리는 쪽으로 계획을 세웠습니다.
아마 그 시점은 제가 사무실 계약기간이 끝난 후 집으로 들어간 이후가 될 것이고 그래서 주거시설을 사무실로 이용할 때 생길 수 있는 일들에 대해 미리 알아보고자 했습니다.

그래서 맨 처음 주무부처라고 생각되는 문화체육관광부에 다음과 같은 문의를 했습니다.

2016-12-12 문화체육관광부 문화콘텐츠산업실 콘텐츠정책관 게임콘텐츠산업과
[소프트웨어 제작업이나 개발관련 업종형태로 개인사업자를 낼때 영업소가 주거지역이거나 근린2종이거나 상관없이 사업자등록을 할수 있습니다. 
그런데 게임제작업 등록 신청시에는 영업소가 근린2종이여야 하는걸로 알고 있는데 맞는지요?
만약 맞다면 해당 내용을 알수 있는 법적근거를 알수 있는 방법이 있나요?
제가 찾아보려고 했지만 2015년도 이전에 써진 일반인들이 작성한 블로그에서 해당내용으로 등록을 거부당했다는 것만 몇가지 찾은게 다입니다.
게임제공업이라면 당연히 근린2종이여야 겠지만 제작업은 주거지역에서 회사를 차릴수 있는데도 불구하고 왜 근린2종을 요구하는지 궁금하기도 합니다.
]


오랜 기간이 지난후 다음과 같은 답변을 받았습니다.

2017-01-04 
[질의 관련, 2종근린생활시설 등 관련 사항은 건축법 상 용도별 건축물의 종류 등에 관련된 것으로 판단되는 바, 건축법 등 소관부처인 국토교통부 또는 해당 지차체 건축담당 부서로 문의하여 주시기 바랍니다.]

다른 곳에 물어보라더군요. 그래서 국토교통부에 문의했습니다.

2017-01-24(같은 내용에 문화체육관광부에 답변을 첨부해 문의)

국토교통부의 답변

2017-02-02 국토교통부 국토도시실 건축정책관 건축정책과
[질의하신 게임제작업 또는 게임배급업 등록은 「게임산업진흥에 관한 법률」에 따라 시장,군수, 구청장에게 등록하여야 하는 사항으로, 보다 구체적인 사항은 해당지역 허가권자에게 문의하여 주시기 바랍니다.]

국토교통부 역시 지자체에 물어보라고 답변을 받았습니다.
그래서 마지막인 지자체에 문의를 넣어 놓고 답변을 기다리고 있습니다.

해당 사항을 진행하면서 인터넷 뉴스에서 기사를 하나 찾았습니다.

[게임을 만드는 장소가 통상 사무실로 쓰이는 근린생활시설(휴게음식점, 제과점, 의원, 우체국 등 사람들의 일상생활과 밀접한 관련이 있는 시설)이어야 하는지, 주거시설이라도 상관이 없는지 명확하게 제시하고 있지 않다. 이 때문에 일선 지자체 담당자들의 판단에 따라 허가 여부가 엇갈리고 있는 실정이다.]
기사링크 - http://www.kihoilbo.co.kr/?mod=news&act=articleView&idxno=676381  

수원같은 경우는 주거시설이라고 하더라도 게임제작업등록시 문제가 되지 않는다고 하더군요.

해당 기사를 보면서 게임제작업에 관한 문의에서 왜 상급기관이 답변을 하지 못했는지 알게되었습니다.


저희 지역 담당자의 판단에 따라 사무실을 구해야 할지 아니면 또다른 방법을 찾아봐야 할지 정해지게 된다는 결론을 얻게 되었습니다.......