본문 바로가기

unity3d

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 만들기 (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 만들기 (3) 기본적인 기능을 어제부로 완성했다. 이제 부가적인 기능들을 채워 넣어야 한다. 가장 처음에 만들 것은 조각을 드래그할때, 놓을 공간이 있는지 없는지 쉽게 알수 있도록 하는 것이다. 조각을 채워넣지 못하는 상태라면 붉은색 음영으로 쉽게 알수 있도록 하자. 된다... 되긴 됐는데... 어째 잘 안보이는데? 조각 UI에 가려서 조금 갑갑한 느낌이 든다. 이럴 때는 생각할 필요없이 보강 작업에 들어가는 것이 좋다. 새로 작업해 보자. 이번에는 조각 UI 자체의 색을 바꾸는 방법으로 진행하겠다. 오케이! 아까에 비해서 훨씬 잘 보이게 되었다. 이대로 진행해도 될 것 같다. 다음에 넣을 기능은 제거가능한 블록들을 미리 보여주는 기능이다. 이번에도 쭉 진행해 본다. 중간에 좀 시간이 걸렸지만, 어떻게든 완료했다. 원.. 더보기
Block Puzzle 만들기 (2) 어제에 이어서 계속 작업한다. 오늘은 게임의 백미라고 할수 있는 '라인 제거' 시스템을 만든다. 먼저 작업해야 할것은 9x9 데이터를 검토하여 어떤 블럭을 제거해야 하는지 검사하는 함수를 만드는 것... 일단 로직 자체가 간단하기 때문에 쉽게 만들 수 있을 것 같다. /// _Table에서 없어져야할 블럭을 찾아서 tempState에 표시한다. return clearBlockCount public int FindAndMakeClearBlock() { for (int i = 0; i < _tempState.Length; i++) _tempState[i] = 0; /// 가로 방향으로 제거블럭을 탐색한다. for (int i = 0; i < Constants.TableSize; i++) { int count.. 더보기