본문 바로가기

전체 글

Java.lang.ClassNotFoundException : com.google.android.gms.games.PlayGames 에러 Google play game 로그인이 제대로 안될 경우, 먼저 Logcat을 확인해 보자. 이런 식으로 ClassNotFoundException 에러가 나온것을 볼 수 있다. 이것을 해결하는 방법은 Project Setting > Player > Minify 설정에서 Release를 꺼두는 것이다. Release 옵션을 켜두고 싶다면, Build > Custom Proguard File 옵션을 켠다. proguard-user.txt 파일은 다음과 같이 편집한다. -keep class com.google.android.gms.games.PlayGames { *; } -keep class com.google.android.gms.games.leaderboard.** { *; } -keep class com.. 더보기
Safe Area로 안심하고 UI 만들기 스크린 가장자리의 상태가 제각각인 모바일 기기가 상당히 많다. 노치가 있는 아이폰이라던지, 스크린 귀퉁이에다가 셀카를 박아버린 갤럭시라던지 말이다. 처음엔 모두 깔끔한 네모 사각형 디스플레이를 고집했는데, 아이폰이 변태짓을 시작하니까, 히힛 그럼 나도...? 하면서 모두다 전면 스크린에 이상한 짓을 하기 시작했다... 어쨋든 우리가 만들 앱들은 모든 모바일 기기에서 정상적인 디스플레이를 보여주어야 한다. 그래서 Safe area라는 개념이 있다. 스크린 안쪽에 온전히 출력되는 것이 확실한 사격형의 영역이다. 예를 들어 노치와 라운드 처리된 귀퉁이를 가지고 있는 아이폰의 Safe area는 이렇게 되어있다. 우리는 중요한 UI와 이미지들을 저 Safe area안쪽에 표시하도록 만들어야 한다. Safe ar.. 더보기
Block Puzzle 만들기 (9) 이제 인앱을 등록해 보자. 1. 유니티 에디터를 설정한다. Project Setting > Services Gerneral Settings로 이동한다. 13세 미만 게임인지를 확인하는 부분이 있다. 난 No로 선택했다. In-App Purchasing Settings 를 On 시킨다. Purchasing Package 버전을 확인해보고 해야한다면 Install Latest Version을 눌러서 설치한다. 2. 이제 구글 개발자 콘솔로 이동한다. 수익창출 > 수익창출 설정 을 열어 BASE64 키를 복사한다. 3. 다시 Unity에디터를 연다. Services > In-App Purchasing > Receipt Validation Obfuscator를 연다. 2번 항목에 복사한 키를 붙여넣는다. 그리고.. 더보기
Block Puzzle 만들기 (8) 지난 시간에는 구글 플레이 SDK를 설치했다. 이제 SDK를 이용해 구글 플레이에 접속하고 리더보드를 갱신하는 코드를 만들어 보자. 1. 먼저 리더보드를 생성해야 한다. 개발자 콘솔에 들어가서 Doku Block Puzzle 앱을 연다. 성장 > Play 게임즈 서비스 > 리더보드 로 이동한다. 리더보드 생성을 누른다. 리더보드의 이름과 아이콘을 등록한다. 임시보관함에 저장을 누른다. 이전 단계로 돌아가면 리더보드가 등록된 것을 볼 수 있다. 2. 업적도 등록해보자 성장 > Play 게임즈 서비스 > 업적으로 이동하여, 업적만들기를 누른다. 필요한 내용을 입력하고, 임시보관함에 저장을 눌러준다. 이전 단계로 돌아가면 업적이 등록된것을 확인할 수 있다. 이런 방식으로 필요한 업적을 여러 개 만들어 줄수 있.. 더보기
Block Puzzle 만들기 (7) 이제 구글 플레이 서비스와 연동하여 리더보드를 구현해 보겠다. (나도 할 때마다 헤깔려서 절차를 기록해 놓는 목적도 있다.) 먼저 안드로이드로 출시하기 위한 사전 작업을 해야 한다. 일단 플랫폼을 안드로이드Android로 전환해야다. Unity3D가 멀티 플랫폼을 지원하기 때문에 별다른 플랫폼 종속 기능이 있는게 아니라면, 버튼 한번으로 해결되는 일이다. 빌드 셋팅에서 Android를 선택하고 Switch Platform 버튼을 누르면 된다. 문제는 한번 Switch를 실행하면 엄청 오래 걸린다는 것 정도? 그래도 이번 프로젝트는 아무 문제없이 전환이 되었다. 이제 Player Setting을 손보자. Edit > Project Setting > Player 순으로 들어가면, 앱에 관련된 여러 설정들을 .. 더보기
Block Puzzle 만들기 (6) 이번에 넣어볼 것은 콤보 시스템이다. 연속으로 클리어에 성공하면 콤보 카운트가 쌓이면서 추가 점수를 얻는 시스템 되시겠다. 일단 디자인부터 하자. 정말 간단한 도형들로 콤보 카운트를 표시할 수 있도록 디자인했다. 자! 이런 식으로 콤보를 표시하면 되겠지? 그리고 에니메이션을 추가하면 좀 더 예쁜 그림이 나올것이다. 이렇게 해보자 Fix : UI가 감춰진 상태 (기본 상태) Open : UI가 등장하는 에니메이션 Repeat : UI가 튕기는 에니메이션 오! 괜찮아 보인다. 그리고 드디어! 게임의 전반적인 틀이 모두 완성되었다. 아자! 아자! 그럼 이제 끝인가? 그건 또 아니다. 당연히 아직 할 일이 산더미처럼 남아있다. 리스트를 정리해 보자 사운드 추가 옵션 기능 추가 안드로이드 프로젝트로 전환 인앱기능.. 더보기
Block Puzzle 만들기 (5) 지난 번에 이어서 외관을 변경할 생각이다. 하얀색 뿐이었던 배경색을 변경해보자. 배경 스프라이트를 선택하고 색깔을... 뭐하나 스므스 하게 넘어가는게 없냐? 지난 번에 SpriteRenderer에 그림자를 넣어 보겠다고 쉐이더를 끼워넣을 것을 기억할 것이다. 아마 그때 만들어 넣은 쉐이더에는 SpriteRender의 Color를 사용하는 기능이 없는 것 같다. 음... 일단 Unity Forum을 찾아 보자. 역시 나랑 같은 문제를 질문한 사람이 있었다.(그럼 그렇지..) 해답으로 제시된 코드는 이렇다. ... OUT.texcoord = IN.texcoord; OUT.color = IN.color * _Color; ... Input에서 Color를 가져오라는 것 같다. (사실 Shader를 공부한 적이 .. 더보기
Block Puzzle 만들기 (4) 기능들을 거의 다 만들었으니, 이번에는 연출 쪽을 보강해 보기로 하자. 이 게임은 기본적으로 SpriteRender를 사용하는 2D 게임이지만 약간 3D 같은 느낌을 가미하면 어떨까? Directional Light의 그림자를 이용해 보는게 어떨까? Shader "Sprites/Beat/Diffuse-Shadow" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _Cutoff ("Shadow alpha cutoff", Range(0,1)) = 0.5 } SubShader { Tags { "Queue"="AlphaTest" "IgnoreProjector".. 더보기