블로그 이미지
1인 개발자 (므쮸 컴퍼니) 개인 블로그 입니다. MMZZUU

카테고리

므쮸 컴퍼니 (22)
▣ Game (3)
▣ Unity 게임 만들기 (14)
▣ 정보공유 (5)
Total
Today
Yesterday

"디페노이드" iOS 출시를 준비하면서 리젝이 됐습니다.


그래서 빌드를 수정하고 다시 인앱을 연결하려는데...



어찌된 노릇인지 "순위표" 밑에 "앱내구입" 이 있어야하는데 아예 뜨질 않는 겁니다.



그래서 봤더니...
앱 내 구입이 반환되었다고 써있고

저렇게 죄다 "개발자의 조치가 필요함" 이라고 처리가 된 상태...



하나를 찍어 들어가 보니
App Store 정보에 빨간 점이 똭...

이게 한번 반환된 앱내구입 중 간혹 "개발자의 조치가 필요함" 처리가 되는 경우가 있는데



이럴 땐 "표시이름 (Display Name)"을 바꿔주면 해결됩니다.

이름을 바꿔주고 "저장" 하시면 "심사 대기 중" 으로 바뀐걸 볼 수 있습니다.



간단히 이렇게 적었지만 해결방법을 찾으려고 날린 1주일을 생각하니... 피토할 지경이네요 ;;;

다시 심사넣고 기다려야 출시가 가능할지 말지 확인 가능하겠지만...;;;

역시 안드로이드 출시가 정말 쉬운편이었다는 걸 다시한번 뼈저리게 느낀 1주일 이었습니다 ;;;

역시 갓구글이었고 애플은 개발자들에게 좀 더 친절할 필요가 있음을 느낍니다. ㅠㅠ


Posted by MMZZUU
, |

일반적으로 컴퓨터에서 테스트 할 땐 잘되지만 모바일로 빌드 후 테스트를 하면


터치가 한번에 잘 되지 않는 경우가 있다.


일반적인 버튼은 괜찮은데 Scroll Rect에 자식으로 속해있는 경우

즉, 스크롤되는 오브젝트에서의 버튼이 On Click이 잘 되지않는다.


이 경우는 캔버스가 생성될 때 EventSystem 오브젝트도 같이 생성되는데


EventSystem 스크립트의 Drag Threshhold 값을 올려주면 된다.




[ 스크립트 ] 로 처리할 경우


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private const float inchToCm = 2.54f;
     
[SerializeField]
private EventSystem eventSystem = null;
     
[SerializeField]
private float dragThresholdCM = 0.5f;
//For drag Threshold
     
private void SetDragThreshold()
{
    if (eventSystem != null)
    {
        eventSystem.pixelDragThreshold = (int)(dragThresholdCM * Screen.dpi / inchToCm);
    }
}
  
  
void Awake()
{
    SetDragThreshold();
}
cs


dragThresholdCM = 0.5f;

이 수치가 터치한 지점으로 부터 0.5센티미터 정도는 밀려도 눌린 상태를 유지하겠다~ 뭐 이런 뜻이다

스크롤 내부에 있는 버튼들이 터치를 하더라도 스크롤이 살짝 밀리면서 눌린 상태가 해제되는 문제를 해결하기 위한 방법인 것이다.

 



Posted by MMZZUU
, |

저는 유니티로 게임을 제작할 때 


특별한 경우가 아니면 업데이트 버전관리나 여러측면에서 실수 할 가능성이 낮기에


프로젝트를 하나로 두고 프로젝트 내에서 각 플랫폼별 분기처리를 하는 형태로 처리합니다.


구글 Android에는 구글 플레이 게임 서비스 (이하 GPGS)를 사용하기 위해 플러그인을 사용하는데요


애플 iOS에서는 사용하지 않고 iOS자체 GameCenter를 사용하기에 GPGS를 빌드시에 포함시키지 않습니다.



무식한게 용감하다고...


이걸 업데이트때 마다 Android 빌드, iOS 빌드별로 파일을 삭제해준다거나 이런식으로 하다보니 쓸데없이 손이 많이 가더라구요.


플러그인 사용법을 꼼꼼히 좀 읽어 봤더라면 이런 개고생은 하지 않았어도 되는거였는데;;



각설하고 방법을 알려드리겠습니다.


빌드 할 때  (iOS) Player Settings > Scripting Define Symbols > NO_GPGS 추가


기존에 입력 되어있던 글자들 뒤에 새미콜론(;)으로 구분해주시고 NO_GPGS를 넣으시면 됩니다.




참 쉽죠?



이렇게 간단한 것을... 


여러분은 고생하지 마세요 ㅋㅋㅋ

Posted by MMZZUU
, |

 환경 


  • 작성일 2017/06/08
  • MacBook Pro (Retina, 15 inch)
  • OS X EI Capitan 10.11.6
  • Unity 5.5.0f3
  • Xcode 8.2


 이슈내용 


안드로이드에 '디페노이드'를 출시하고 iOS버전도 출시를 위해 빌드를 하고 Xcode에서 컴파일 하는데

계속 마지막에 아래 에러를 뿜뿜합니다.


2 duplicate symbols for architecture arm64

Linker command failed with exit code 1




 해결방법 


위 에러는 다양한 증상에서 나올 수 있는 경우이긴 하지만 잘 읽어보면


'arm64 아키텍쳐', '중복된 심볼' 


영어를 모르는 제가 봐도 단어 뜻은 대충 이해가 가더군요.


뭔가가 중복됐으니 처리하도록 해라~!!! 뭐 이런뜻 같습니다.



일단 저같은 경우 바로 구글신 검색신공을 펼친결과 전부다 해결방법이 Xcode에서 처리하는 방식이었습니다.


근데 이게 같은 중복관련 에러라도 사용자마다 원인이 다양하기도 하고


심지어 내 프로젝트에서 중복된 파일명이라곤 아예 보이질 않아서 framework를 모두 다 까발려 볼 수 도 없고... 대략난감해 하고 있었습니다.


거의 3일을 온갖 방법을 총동원 해보다가 자포자기하고 있다가 불현듯 게임제작 도중에 유니티를 버전업 했던 기억이 나더라는...


그 때 유니티 광고 (UnityADS)를 2.0으로 버전업 하고 1.0 unitypackage를 삭제했었는데 혹시 그쪽에 문제 있는게 아닐까 해서


구글링해보니 저 같은 경우를 겪은 외쿡인들이 꽤 많더라구요.


검색도중 알게된 꿀같은 정보는~


유니티 패키지를 설치하고 지우는 과정에서 유저가 직접 파일을 삭제하다가 깔끔하게 지우지 못하고 찌꺼기파일이 남는 경우도 있다는 겁니다.


그와중에 알게된 'Unitypackage Uninstaller'  (유니티 패키지 삭제도우미 같은 겁니다 ㅋㅋㅋ)



다운로드 링크 : https://www.assetstore.unity3d.com/kr/#!/content/35439




사용방법은 아래에 친절히~ ㅋㅋㅋ




이렇게 딱 실행을 하면 지금까지 설치했던 유니티 패키지 리스트가 뜨고 선택해서 깔끔히 지워주는 역할을 합니다.


꿀~!!!!


역시나 살펴보니 유니티 1.0의 잔해가 남아있더군요


그패키지 남은 찌꺼기 파일들을 삭제했더니 Xcode에서 에러뿜뿜이 없어졌습니다~ ㅋㅋㅋㅋ


아오~ 10년묵은 체증이 내려가는 순간~!!!


암튼 Xcode에서도 좀 더 샅샅이 뒤져봤다면 해결 했을 수도 있겠지만 유니티에서 눈에보이는 처리를 하고 넘어가니 뭔가 더 후련한 느낌적인 느낌~


참고하시기 바랍니다.

Posted by MMZZUU
, |

게임을 시작하기 전 부분에서 프레임 속도를 세팅해 줍니다.



void Awake () {

Application.targetFrameRate = 60;

}



특히 iOS같은 경우는 기본 FrameRate가 30이 기본값이기 때문에 필히 해주어야 합니다.


이렇게 하고도 iOS는 안되는 경우가 있다는 이야기를 들었는데 (저는 잘됩니다만...)


그럴 땐 빌드한 XCODE 프로젝트를 열고 AppController.mm 파일을 열어



#define kFPS 30 이라고 된 부분이 있는지 확인합니다.



이부분을 



#define kFPS 60 이라고 수정 해 주시면 됩니다.



위의 셋팅값이 60 FPS로 렌더링 하는 셋팅값 입니다.



Posted by MMZZUU
, |

2017-02-15 기준


자~ 유니티로 게임을 만들려면 우선 유니티를 설치해야겠죠?


유니티 홈페이지 : https://unity3d.com/kr


위 링크주소를 클릭하면 홈페이지로 이동합니다.



 [ 지금 Unity 다운로드 ] 를 클릭하면





다운로드 할 수 있는 항목이 쭉 있습니다만~

저는 가난한 1인개발자이므로 무료버전을 다운받을 겁니다. ㅋㅋㅋ

Personal 라이센스의  [ 지금 다운로드 ] 를 꾹~ 클릭





고민없이 최신버전을 다운받고자 하시는 분은  [ 설치 프로그램 다운로드 ] 를 누르시면 됩니다.

현재는 5.5.1 버전이군요.


그리고 바로아래에 지금 다운받는 Personal라이센스에 대한 설명이 적혀 있습니다.

개발물을 상업적으로 출시해서 연간 총 수익이 미화로 10만 달러(화 약 1억1,440만 원)를 넘으면 Personal라이센스를 사용할 수 없다고 나옵니다.


일년에 1억이상 수익을 내는게 쉽지도 않지만...


혹시나!!! 설마!!! 말도안되는!!! 대박이나서 1억이상 버신다면~ 

다른 유료라이센스로 구매해서 사용해야 합니다~ ㅋㅋㅋ


유료라이센스를 구매하는 날이 왔으면 좋겠네요... ㅠㅠ




최신버전이 아닌 이전 버전을 다운받고 싶으신 분들은



화면 맨 아래로 스크롤을 내리고 Unity 이전버전을 누르시면





유니티 5, 4, 3 버전대까지 이전버전을 자유로이 다운로드 받으실 수 있습니다.




자~ 이제 해당버전을 선택하고 다운로드를 받습니다.

저는 5.4.1 버전을 다운받아 보겠습니다.

현재 진행중인 프로젝트가 5.4.1버전에서 만들고있어서요 ㅋㅋ

여러분은 최신버전을 받으세요~


제 사용운영체제가 윈도우라  [ 다운로드(Win) v  탭을 누르고 하단에서  Unity 설치 프로그램 를 눌러 다운로드를 시작합니다.




다운로드가 완료되면 파일을 확인하여



실행~!





자신있게 [ Next > ] 클릭!




라이센스 확인 체크하고 [ Next > ] 클릭!!!




운영체제가 64비트인지 32비트인지를 선택하고

[ Next > ] 를 클릭~


※간혹 64비트를 선택해서 설치하면 실행하면 오류나는 경우가 있습니다.

이럴땐 32비트로 설치하시면 됩니다.




저는 모바일 (안드로이드 , 아이폰)에 빌드할거라서

추가로 Android Build Support와 iOS Build Support를 체크했습니다.




저는 기본 설치 경로를 그대로~ [ Next > ] 를 클릭합니다.




마구 설치하기 시작합니다.




순조롭게 잘 설치되고있구요~




설치가 끝나고 [ Finish ] 를 클릭하시면~


설치를 완료하였습니다.


그럼 이제 열심히 게임만들러 유니티의 세계로~ 궈궈!!!!


수고하셨습니다. ㅎㅎ

Posted by MMZZUU
, |


# 사운드 / 오디오


1. 모바일에서 스테레오 및 고사양은 의미가 없다

  • wave, aiff : 44khz가 아니더라도 일반적으로 음성 영역에서는 22khz(절반용량)도 잘 동작, 특히 폭발음이나 충격음 등등 중저음 계열11khz(1/4용량)로도 잘 동작

  • mp3, ogg : 압축률을 96kbps 이하로 조정하여 낮춤


2. 사운드 파일을 임포트하면 기본적으로 3D 사운드로 설정이 된다

  • 모바일에서는 굳이 3D 사운드가 필요하지 않으므로 2D 사운드로 변경하자


3. 압축 사운드 (mp3, ogg), 비압축 사운드 (wav, aiff) 구별

  • 순간적인 효과음, 이펙트 (비압축 사운드) : wav, aiff

  • 배경 음악 (압축 사운드) : mp3, ogg (경우에 따라 시작시 딜레이가 발생 할 수 있기에 게임에 영향을 가장 덜 받을 수 있는 배경음악에 사용) 



# 그래픽 / 텍스쳐


1. 배경 크기는 최종 스크린사이즈에 맞게

  • 제작물에 따라 다르겠지만 현재 아이폰 7+ 의 경우 1920 X 1080으로, 그보다 큰 배경은 사실상 의미가 없습니다.

  • 몇몇 고해상도가 필요한 경우 외에는 1/2 X 1/2 또는 2/3 X 2/3 사이즈로 사용해도 충분합니다.


2. 캐릭터 최종크기를 고려한 사이즈

  • 화면에서 캐릭터가 차지하는 사이즈를 고려하여 굳이 화면해상도 크기만한 텍스쳐를 만들 필요는 없겠죠.

  • 캐릭터의 땀구멍까지 보일정도로 Zoom In하는 연출이 많지않다면 주로 화면에서 차지하는 비율에 맞게 텍스쳐사이즈를 줄여도 큰 차이를 보이지 않습니다.


3. iOS 빌드에서 지원하는 PVRTC 압축 포멧을 적극 활용

  • 빌드에서 iOS로 플랫폼을 바꾸고 나면, 임포트된 모든 텍스쳐 메뉴에서 PVRTC압축모드를 사용 할 수 있게 됩니다.

  • 빌드 메뉴를 변경한ㄴ 후 모든 텍스쳐를 제대로 설정하게 되면 최적화면에서 꽤 이득을 볼 수 있습니다. (20~30% 감소효과)

  • 가로세로 크기는 2의 배수(32X32 , 64X64, 128X128 ...) 로 맞춰야합니다. 맞지않을 경우 다시 사이즈조정하는 처리를 하므로 쓸데없는 처리공정이 생깁니다.

  • 알파값이 필요없는 텍스쳐는 거기에 맞게 압축모드를 설정하면 용량이 더 효과적으로 줄어듭니다.

Posted by MMZZUU
, |

 환경 

  • 작성일 2016/12/02
  • OS X El Capitan 10.11.6
  • Unity 5.3.6f1


 이슈내용 

게임 개발중 갑자기 오류가 뜨고 비정상 종료가 됐는디~ 

다시 프로젝트를 열었더니 하얀화면만 뜨고 내 맥북이 죽을 듯이 돌기만 할 뿐...

열리지도 에러메시지가 뜨지도 않고 더 이상 진행되는 것 없이 뻗어있다!!!


 해결방법 

Library (라이브러리) 폴더를 삭제하고 다시 열기를 합니다.


그리고 프로젝트를 다시 열면~

뭔가 다시 임포트해야 한다고 뜨는데~ 과감히  [Continue]를 클릭~!


삭제된 에셋들을 마구 불러오기 시작합니다.


그리고 조금만 기다리면~?

만들어둔 프로젝트가 아주 잘열립니다.

빈 씬이지만~ 아주 잘 열립니다.

저장해 둔 씬을 로드해보면 아무 이상없이 열리고

플레이어 세팅도~ 저장이 잘 되어 있습니다.


감사합니다 이번 이슈도~ 극뽁~!

Posted by MMZZUU
, |

유니티에서 UI객체를 클릭 혹은 터치를 했을 때 게임 중 입력 이벤트를 처리하는 부분과 같이 처리되는 문제가 발생하는 경우가 많은데요~


이런경우엔,




using UnityEngine.EventSystems;


...


if (EventSystem.current.IsPointerOverGameObject(pointId)return;




EventSystem.current.IsPointerOverGameObject(pointId)


함수는 포인터가 중간에 UI객체를 만나면 true 를 뱉어내는 함수입니다.


pointId : 터치 또는 마우스 ID 입니다


요걸로 게임중 입력이벤트 이전에 컷트해버리는 식으로 처리하면 됩니다.




예제코딩


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Update () {
    if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) {
        if (Input.touchCount > 0)
        {
            for (int i = 0; i < Input.touchCount; i++) {
                if (EventSystem.current.IsPointerOverGameObject(i))
                    return;
            }
        }
        print ("터치!!!");
    } else {
        if (Input.GetMouseButtonDown (0)) {
            if (EventSystem.current.IsPointerOverGameObject())
                return;
            print ("클릭!!!");
        }
    }
}
cs


위 코딩으로 테스트 해보시면 모바일 터치환경과 에디터환경에서 테스트 차이를 확인가능합니다.

Posted by MMZZUU
, |

모바일 플렛폼 작업 시 유의사항

  1. 메쉬 정점 수 ( 최대한 소프트 엣지로 제작 )
  2. 단순 셰이더 ( 퍼픽셀 연산은 자제 )
  3. 알파블렌딩 피하기 ( 이펙트 및 GUI 제작시 신경쓰기 )
  4. 기기별 최적의 텍스쳐 포맷 사용
  5. Reference Type 사용 자제 ( 최대한 Value Type, struct사용 )
  6. Conroutine 사용
  7. Update보다 FixedUpdate사용
  8. 자주 연산이 불필요한 루틴은 InvokeRepeating 사용
  9. Light Map Bake 반드시 필수
  10. Application.targetFrameRate 옵션 필수 ( iOS )
  11. VSync Off 옵션 필수
  12. 자주사용하는 지역변수는 전역변수 선언 사용
  13. Object Pool은 선택이 아닌 필수
  14. Drawcall 체크(100 이하 권장)


Posted by MMZZUU
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함