[유니티] APK 용량 줄이기

 퍼갈 땐 출처 표기! 안녕하신가, 오늘은 모바일 빌드와 관련된 APK 용량 줄이는 방법에 대해서 알려주겠다. 게임을 만들면서 용량이 늘어나는 것은 당연한 것이다. 하지만 이 당연한 것을 당연하게만 여기면 안 된다. 당연히 스토어에 올릴 생각이면 더욱더 그렇다. 용량이 작고 빨리 설치된다면 유저 유입이 많겠지만 설치가 오래 걸린다면 중간에 이탈할 수 있기에 용량이 중요하다. 본인도 출시 경력이 있다. (그렇다고 대박난 건 아니다.) 그렇기에 많은 사람들이 이 글이 도움이 될 것이다. 이미지지 해상도 설정 이미지를 2제곱 수 or 4제곱 수로 하는 것이 좋다. (4제곱 수로 맞추는 것이 제일 좋다.) 그리고 플랫폼별로 알맞은 압축 방식을 지정한다. 이 방식은 거의 필수이며 효과가 좋다. 아틀라스 압축 이미지들을 아틀라스로 묶는 것을 추천한다. 아틀라스를 간단하게 설명을 해주자면 이미지를 하나로 통합한다고 생각하면 좋을 것이다. AppBundle로 빌드 만약 스토어 출시를 한다면 AppBundle로 빌드를 하는 것이 좋다. 거의 필수다. 에디터 로그 확인 빌드 후 콘솔 창 오른쪽 맨 위에 있는 드롭다운 메뉴를 클릭하고 Open Editor을 선택한다. 로그 파일을 열고 필요 없는 파일이나 제대로 되지 않은 리소스가 있는지 확인하다. 은근 이런 곳에서 많은 용량이 줄어든다. 폰트 정리 프로젝트에 추가된 폰트는 사용하지 않아도 빌드에 포함된다. 그렇기 때문에 빌드 할 때에는 사용하지 않는 폰트들을 지워줘야 한다. 폰트 최적화 Packed Fonts 방법을 이용하면 가능하다. 장점은 당연하지만 용량이 줄어든다. 하지만 좋은 것만 있지는 않다. 단점은 아래와 같다. 각각의 RGBA 채널에 저장해서 그림자 같은 효과들을 사용할 수 없다. 알파블랜딩이 불가능해진다. NGUI Atlas 사용이 불가능 해진다. 필요 없는 오브젝트 삭제 빈 오브젝트나 사용하지 않는 오브젝트들을 삭제해두자. (아무거나 삭제하면 큰일 난다.) 리소스 여백 이미지 등의 여백이 있는 경우 없애는...

[유니티]새 프로젝트 생성은 어떻게 하면 좋을까?

이미지
 퍼갈 땐 출처 표기! 안녕하신가, 오늘은 유니티에서 새 프로젝트를 생성할 때 어떻게 하면 좋을지에 대해서 알려주겠다. 일단은 유니티 허브를 설치해둬야 하니 저번 글을 참고하면 좋을 것같다. 유니티허브설치하기! 일단 본론에 앞서 여러 가지 이야기들을 해주고자 한다. 당연한 이야기이지만 나도 처음은 있었다. 당연히 처음부터 잘한다면 난 여기 있지 않을 것이다. (대충 무조건 여기 있다는 소리) 그렇기에 이런 내가 발전하게 된 계기는 바로 이 글과 같은 것, 즉 사람들이 올린 여러 가지 게시글들이 많은 도움이 되었다. 그렇기에 여러분들도 많은 도움이 됐으면 하는 마음이다. 이런 마음을 잘 알아줬으면 한다. 아무튼 프로젝트 생성 방법에 대해서 알려주도록 하겠다. 일단 당연하지만 유니티 허브를 킨다. 그 후에 프로젝트 -> 새로 생성 을 눌러준다. 그렇다면 아래와 같이 나올 것이다. (저장 위치는 각각 다르다.) 간단하게 설명을 해주겠다. 일단은 왼쪽 템플릿 은 당신이 어떤 프로젝트를 생성할지 결정하는 것이다. 2D 를 선택하면 2D 맞춤으로, 3D 를 선택하면 3D 맞춤으로 생성이 된다. 그 외에 High Definition RP(HDRP) , Universal Render Pipeline(URP) 는 렌더링 파이프라인을 선택하는 것이다.( 2D or 3D 선택시 기본으로 시작됨) 또 Karting Microgame , FPS Microgame 등은 게임 예제이다. (나는 딱히 추천은 안 하지만 한 번쯤 해보면 재미있다.) 오른쪽 설정 은 프로젝트 이름 , 저장 위치 가 있다. 말 그대로 이름과 저장 위치이다. 프로젝트 이름 은 폴더 이름과 같은 것으로 게임이름 설정이랑 다르게 할 수 있다. 저장 위치 는 말 그대로 저장하는 경로이니 알아보기 쉬운 경로를 선택하는 것이 좋다. 만약 다 설정했다면 생성을 하면 된다. 하지만 오늘 알려줄 것은 생성하는 팁이니 아래를 참고하자.   어떤 게임을 만들 것인가?  2D 게임이면 2D, 3D ...

[유니티] 간단한 코드(구문)들 3탄

 퍼갈 땐 출처 표기! 안녕하세요, 오늘은 저번 [유니티]간단한 코드(구문)들 2탄에 이어서 3탄이 나왔습니다! (축하축하~~) 오늘은 저번 글과 다르게 소소한 팁 위주의 코드들을 다뤄볼까 합니다. 오늘 알려줄 코드 목록들은 아래와 같습니다. 1. 소수점 n까지 표시 2. a의 절댓값 구하기1 3. a의 절댓값 구하기2 4. a가 음수면 -1, 양수면 1 출력 5. 미접속 시간 구하기(시) 6. 중복 없는 랜덤 뽑기 위와 같이 오늘은 총 6개나 되는 코드들을 소개할 예정입니다. 그럼 긴 말없이 바로 가시죠! 소수점 n까지 표시 (n=10^) float a = 1.555f; float f; f = (int)(a*n) / n; 예제 float a = 1.555f; float f; f = (int)(a*100) / 100; print(f); => 1.55 a의 절댓값 구하기1 int a = -5; int b = Mathf.Abs(a); print (b); => 5 a의 절댓값 구하기2 int a = -2; int b = a>0 : a ? a*-1; print(b); => 2 a가 음수면 -1, 양수면 1 출력 int a = -90; int b = a>0 ? 1 : -1; print(b) => -1 미접속 시간 구하기(시) int 미접속시간 ; public void 접속() {     int a = PlayerPrefs.GetString("미접속시간");     int c = DateTime.Now - a;     미접속시간 = c.Hours;     PlayerPrefs.SetString("미접속시간", DateTime.Now.Tostring()); } 중복 없는 랜덤 뽑기 public string[] g= {"중", "복", "없", "다"}; int[] b = new int[4]; public void Go() {     f...

[유니티]webGL빌드 방법

 퍼갈땐 출처 표기! 안녕하신가, 오늘은 유니티에서 webGL빌드를 하는 방법에 대해서 소개할까 한다. webGL빌드를 한다면 웹에서 게임을 플레이 할수 있으며, 페이지에 올려두면 페이지에서 게임이 가능하다. (웹게임이 거의다 이런 원리이다.) 긴말 없이 소개하도록 하겠다. 1) 유니티 허브에 들어간다. 그리고 빌드할 프로젝트를 연다. 2) 프로젝트를 열었다면 File -> Build Settings...를 누른다. 3) 그 후 webGL을 클릭한다. 여기서 만약 설치가 안되여있다면 아래와 같이 설치를 해줍니다. (설치 되여 있으면 건너뛰어주세요) 3-1) 유니티 허브를 킵니다.  3-2) 설치를 누릅니다. 그 후에 자신이 현재 사용하고 있는 엔진버전의 삼점을 누릅니다. 3-3) 그리고 모듈 추가를 누른 뒤 webGL Build Supoort를 체크하고 다음을 눌러줍니다. 4) webGL을 선택한 후 Switch Platform을 눌러준다. (시간이 조금 걸립니다.) 5) 그 후 Build를 누르면 끝! 빌드된 파일을 플레이 하고 싶다면 아래 링크를 참고해주세요. [유니티]WebGL로 빌드한거 플레이 하는 법(크롬, 마이크로 엣지, 파이어폭스) [유니티]WebGL로 빌드한걸 GitHub에 업로드하는 방법(+플레이 방법) webGL 관련 오류들을 몇가지 알려주겠습니다. Q1. 빌드가 되는데 오류가 뜨면서 플레이가 안되요. A1. 브라우저가 webGL을 지원 안하거나 Decomression Fallback을 비활성화 해놓으면 안됩니다. 브라우저가 webGL을 지원하고 Decomression Fallback이 체크되여있는지 확인해보세요. (예시로 하나 오류코드를 말하자면 gl.OUT_OUF_MEMORY는 특정 메소드를 실행에 필요한 메모리가 부족할때 뜹니다.) Q2. 빌드가 되는데 실행하면 계속 무한로딩이에요. A2. Decomression Fallback 체크를 하시면 됩니다.(Edit->ProjectSetting -> Player...

[유니티]많이 나는 오류 해결법

 퍼갈 땐 출처 표기! 안녕하신가, 오늘은 유니티를 사용하면서 발생하는 여러 가지 오류들을 해결하는 방법을 알려주도록 하겠다. 한 번쯤은 경험해 봤을 오류도 있을 것이고 지금 겪고 있는 오류도 있을 것이다. 한 번 읽어보면  많은 도움이 될 것이다. 유니티를 사용하다 보면 역시 오류가 하나쯤은 발생하기 마련이다. 나 또한 많은 오류로 인해 머리가 매우 아팠던 적이 있다. 그렇지만 우리의 영웅인 구글이 있기에 구글링으로 많은 오류를 해결해왔다. 하지만 구글링으로도 안 나오는 오류는 해결하는 데 엄청나게 힘들었다. 아래는 나의 경험을 바탕으로 쓴 오류 해결법이니 참고하면 좋을 것이다. An error occurred while resolving packages 이 오류는 manifest.json을 삭제하면 해결이 된다. 일단 자신의 프로젝트에 들어가서 Packages -> manifest.json을 열어준다. 만약 자신의 프로젝트를 못 찾겠다면 검색창에 new라고 치면 나올 것이다. 혹은 내가 만든 프로젝트 이름으로 들어가면 된다. json 파일을 열자. 그러면 빈 공간이 팝업창에서 오류로 나온 공간이다. 그 부분을 삭제한다. 그래도 해결이 안 된다면 캐시를 지워주자. 에디터 실행 중 오류가 생겼습니다. 라이선스가 유효하지 않습니다. 저번에 다루었던 오류이다. 다시 설명을 해보겠다. 1) Unity Hub에 들어가서 로그인을 해준다. 2) 톱니바퀴(설정) 버튼을 누른다. 3) 라이선스 관리 -> 새 라이선스 활성화를 눌러준다. 4) 자신의 라이선스(무료는 personal)를 선택한 후 라이선스를 받는다. Null Reference Exception 공식 문서에 적여있는 것을 읽어보자면 아래와 같다. 어떤 오브젝트에도 참조하고 있지 않는 참조 변수에 액세스하려고 하면 발생한다. 오류를 더블클릭하면 그 위치로 가니 참고 바라며 대부분 하나 잘못 넣거나 안 넣었을 때 발생한다. 실수한 부분이 있는지 꼼꼼하게 체크해 주는 것이 바란다. 아래 공...

[유니티]간단한 코드(구문)들 2탄

퍼갈 땐 출처 표기 부탁한다.  오늘은 저번에 쓴 글의 2탄이다. 은근 많이 실사용이 되고 도움이 되는 코드들을 알려주기 위하여 이 글을 쓰게 되였다. 일단 코드 소개에 앞서 말하자면 이 코드들 보다 더 나은 코드들이 있을 수 있다. 그렇기에 참고용으로 사용하는 것이 좋다. 소개하기 전에 한 가지 미리 말해두자면 아래 코드들을 사용한다면 필수 인건 아니지만 댓글로 남겨줬으면 좋겠다. 그냥 누가누가 쓰는지 궁금하기 때문이라서 안 해도 1도 문제없다. (심심하다거나 할 일이 없으면 남겨주기 바란다.) 그리고 나 또한 고수가 아닌 초보이기 때문에 코드가 난잡하거나 비효율적일 수 있다. (대부분 효율적이다.) 그렇기에 자신만의 코드로 가꾸어서 사용하면 많은 도움이 될 것이다.  그렇다면 바로 코드들을 본격적으로 소개해 주겠다. String to Int string a = "3"; int g = int.Parse(a); 은근 간단한 거지만 가끔 까먹는 것이다. 흔하게 볼 수 있는 코드다. Int to String int a = 3; string g = a.ToString(); 이것도 은근 간단하고 괄호 안에 옵션도 넣을 수 있다. (float 일 때 자주 쓰인다.) n초안에 1채우기 public float n=10f; float h; void Update() {     if(h*n<n)     {         h += Time.deltaTime / n;      }else     {          h = 1f;     }   } 여러 곳에 응용할 수 있는 코드이다. 예를 들면 진행도 표시, 타이머 표시 등등, 여러 가지에 사용이 가능하다. 삼항연산자 int a=3; int b = a != 3 ? 3 : 4; => a에 3이면 4출력, 그 외에는 ...

[유니티]Random사용이 불가능할때 해결 법

 퍼갈 때에는 출처 표기를 바란다. 안녕하신가, 오늘은 내가 겪어봤던 일을 바탕으로 해결법을 알려주겠다.  한창 개발을 하던 중에 갑자기 멀쩡했던 코드가 오류가 날 때가 있다. 그냥 IDE 오류일 수도 있지만 대부분 갑자기 멀쩡하다가 오류가 난다. 하지만 아무것도 안 건들렸다면 오류가 날수가 없다. 즉, 무언가 건들렸다는 의미이다. 그렇다고 바로 문제를 해결할 수가 있는 것도 아니다. 그중 하나가 Random 사용이 불가능할 때이다. 은근 이것 때문에 막히는 경우가 있고 나 또한 이것 때문에 힘들어했었다. 나처럼 이런 일을 겪을 사람들과 겪고 있는 사람들을 위해서 글을 썼으니 잘 읽어 보기 바란다. 일단은 Random 사용이 불가능 한 경우는 아래와 같다. 1. using UnityEngine;과 using System;을 같이 선언할 때 2. 비주얼 스튜디오의 오류 대부분 1번이 흔하며 2번은 간단하지만 은근 머리가 아픈 문제이다. 나는 1번, 2번 둘 다 겪어봤기에 이 글을 쓴 것이다. 위와 같은 경우, 각각의 해결법을 알려주도록 하겠다. 첫 번째로 using UnityEngine;과 using System;을 같이 선언했을 때를 알려주겠다. 해결 방법이 두 가지 기에 자기의 방법을 찾기 바란다. 1) using UnityEngine; or using System; 둘 중 하나를 삭제하고 삭제한 것을 관련 코드 앞에 붙인다. 예를 들자면 using UnityEngine;을 없애고 Random에 UnityEngine.Random 하면 된다. 만약 using System;을 없앤다면 관련된 코드 앞에 System을 붙여준다. 2) 하나를 포기한다. 말 그대로 하나를 삭제하고 그 관련 코드는 다른 스크립트로 이동하는 것을 말한다. 개인적으로 1번 방법을 제일 추천한다. 2번 방법은 잘못하면 스크립트가 꼬일 수가 있어서 위험부담이 있지만 1번은 위험부담이 없다. 두 번째로 비주얼 스튜디오의 오류이다. 간단하게 끄고 다시 실행으로 대부분 해결이 되지...