목차

반응형

IAP 모듈을 사용하려는데 어쩌다가 소스가 조금 더러워졌는데 그 이후로 계속해서 아래 오류가 뜨면서 IAP가 작동을 안하고 컴파일이 안된다.

Assets/MoPub/Scripts/IapManager.cs(81,53): error CS0103: The name 'StandardPurchasingModule' does not exist in the current context

Assets/MoPub/Scripts/IapManager.cs(123,37): error CS0103: The name 'GooglePlay' does not exist in the current context

 

서비스로 가서 IAP reimport 하라고 해도 안된다.

 

그럴때는 Assets/Plugins/UnityPurchasing 폴더로 가보면 3개의 unitypackage 파일이 있을터인데

그 3개의 unitypackage 파일을 전부다 불러와서 덮어씌워주자

그러면 깔끔하게 해결된다.

반응형
반응형

구글 플레이 스토어에 앱을 출시하려고 보면 안드로이드 앱 번들로 만든 앱이 아니라고 괜히 신경쓰이게 경고 표시를 띄워준다.

플레이 스토어 기존 apk 방식 업로드

 

 

그래서 그 잘나신 안드로이드 앱 번들이 뭔가요 찾아봤는데 되게 좋은 것 이었다.

안드로이드 번들에 대한 간략한 설명은 많이 나와있으니 다른 블로그를 참고하자

https://eso0609.tistory.com/68

 

기존 앱에 App Bundle 적용하기

2018 Google IO에서 App Bundle에 대한 세미나를 들었습니다. '적용해야지' 말만 하다가 이번 기회에 적용해보았습니다. App Bundle 이란? App Bundle 이란 APK 와 비슷하지만 모든 코드, 리소스, CPU 아키텍처와..

eso0609.tistory.com

요약하자면 설치파일을 핸드폰 기종별로 최적화되도록 설정해서 앱 용량을 최적화하는 기법이다.

 

다만 귀찮게도 안드로이드 앱 번들 기능을 사용하기 위해서는 서명이 필요하다.

 그 방법에 대하여 설명하도록 하겠다.

 

목차

1. 구글 플레이 스토어 서명 페이지

2. 암호화된 서명 파일 생성

3. 유니티에서 안드로이드 앱 번들로 프로젝트 빌드

4. 플레이 스토어에 업로드

 

 

 

 

1. 구글 플레이 스토어  서명 페이지

> 출시 관리 > 서명 페이지로 이동

 

'첫번째 Android 스튜디오에서 내보낸 키를 업로드 합니다.' 선택 (2, 3번은 한 두시간 걸쳐서 시도해봤으나 실패)

1번 방법으로 하기 위해서는 keystore파일이 필요하다.

keystore 파일이 없다면 아래 블로그를 참고하여 생성하도록 하자.

https://m.blog.naver.com/PostView.nhn?blogId=lyw94k&logNo=221290872599&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

유니티 Keystore 생성하는 방법 (안드로이드 빌드)

유니티 Keystore 생성하는 방법 (안드로이드 빌드) (Unity Android Build Create Key 키스토어) 간단...

blog.naver.com

 

 

 

 

2. 암호화된 서명 파일 생성

 

keystore파일을 안드로이드 스튜디오를 통하여 암호화를 거쳐 pepk라는 암호화된 서명파일이 필요하다.

Build > Generate Signed Bundle / APK …

안드로이드 스튜디오에서 Build > Generate Signed Bundle / APK …

 

 

상단의 안드로이드 앱 번들 체크, Next

 

Choose existing > 기존에 만들어 두었던 keystore 파일을 선택

키스토어 파일을 생성할때 입력하였던 Key store password, 지정한 Key alias, Key password를 입력한다.

하단의 Export encrypted key for enrolling pusblished apps in Google Play App Signing 체크

Next

 

Destination Folder에서 내보내기 할 경로 선택 > release 선택 > Finish

 

그러면 다음과 같이 pepk파일이 생성된다.

 

해당 파일을 플레이 스토어에서 아까 파일 업로드하는 곳에 업로드 해주면 인증이 된다.

 

 

3. 유니티에서 안드로이드 앱 번들로 프로젝트 빌드

안드로이드 빌드 환경에서 Build App Bundle을 체크해준다.

aab 파일이 만들어진다.

 

 

4. 플레이 스토어에 업로드

 

해당 파일을 apk파일을 올리던 것 처럼 플레이 스토어에 올린다.

알아서 분석을 해주는데 기다리면 된다.

기존 60메가 하던 apk가 40메가대로 줄었다.

 

반응형
반응형

유니티의 애드몹은 안내가 매우 친절해서 딱히 가이드까지 올릴 필요는 없지만 가이드에 나와있지 않은 오류들을 설명하고자 한다.

 

유니티 애드몹 광고 출시 버전 모아놓은 곳

https://github.com/googleads/googleads-mobile-unity/releases

 

googleads/googleads-mobile-unity

Official Unity Plugin for the Google Mobile Ads SDK - googleads/googleads-mobile-unity

github.com

 

2019년 8월 1일 기준 유니티 애드몹 최신 버전은 3.18.2다.

적용도중 발생한 오류들을 기재하겠다.

 

목차

1. 애드몹 패키지 resolve 오류

2. 앱 빌드, 실행 시 AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener 오류

3. 앱 빌드, 실행 시 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException 오류

4. 광고 테스트 시 유의 사항

 

 

1. 애드몹 패키지 resolve 오류

애드몹 패키지 임포트 후 android dependency resolve 과정

 

android resolve 도중 오류 발생

유니티 애드몹 패키지 임포트를 하면 알아서 android resolve를 진행하지만 위와 같이 Resoultion failed가 발생하면서 정상적으로 유니티 애드몹 패키지의 설치가 되지 않는다.

이 에러를 무시하고 빌드를 하게 되면 본문의 2번 오류로 이어질 가능성이 높다.

해당 에러 메시지가 난 후 Assets\Plugins\Android 경로로 이동해서 jar, aar 파일이 충분히 있는지 확인해보자

본인은 resolution failed 에러로 인하여 jar 파일과 aar 라이브러리 파일이 충분히 설치되지 않아서 빌드하고 실행하면 에러로 이어졌다.

정상적으로 설치가 되었다면 아래와 같이 파일들이 있어야 한다.

유니티 애드몹 패키지 정상 설치

해결 방법

간단하다. 현재 본인이 설치한 유니티 애드몹 패키지보다 높거나 낮은 버전으로 설치해본다.

본인은 2019.1.8f1 버전으로 Google Mobile Ads Unity Plugin v3.18.2를 설치했으나 위의 오류가 발생해서

3.18 버전으로 설치했더니 잘 작동했다.

https://github.com/googleads/googleads-mobile-unity/releases/tag/3.18.0

 

googleads/googleads-mobile-unity

Official Unity Plugin for the Google Mobile Ads SDK - googleads/googleads-mobile-unity

github.com

 

 

2. 앱 빌드, 실행 시 AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener 오류

1번의 연장선상의 문제인데 이 에러는 되게 자주 보는데 설치가 정상적으로 안됐을때 뿐만 아니라 설치를 정상적으로 했지만 라이브러리에 필수 요소가 빠져있거나 하면 자주 만나는 오류 메시지다.

스스로 원인을 파악하고 해결 방법을 찾아내는 방법 과정에 대해서 말하겠다.

 

저 오류 메시지는 라이브러리 파일안에 OnInitializationCompleteListener 클래스가 없어서 발생하는 오류다.

일단 Assets\Plugins\Android 폴더로 가면 aar 파일과 jar 파일이 있다.(본인의 경우 해당 오류가 발생했을때 unity-plugin-library.jar 파일 하나밖에 없었다.)

파일을 압축해제 프로그램으로 열어보면

 

해당 라이브러리는 com.google.unity.ads 형식의 구조를 가지고 있음을 알고 있다.

아까 오류 메시지에서는 com.google.android.gms.ads.initialization.OnInitializationCompleteListener이라고 했으니까 구조가 달라도 한참 다르다는 것을 알 수있다.

(이번에 발생한 오류는 위의 오류가 아니지만 jar 파일들을 뒤지다가 오류와 똑같은 구조지만 에러가 발생하는 경우는 라이브러리의 버전이 달라서 발생하는 오류다.)

그렇다면 도대체 어떤 라이브러리를 받아야 저 클래스가 있는지 확인해보도록 하자

 

확인하는 방법은 maven 라이브러리 사이트로 가서 해당 구조를 검색하면 된다.

https://mvnrepository.com/artifact/

 

Maven Repository: com.google.android.gms » play-services-ads

 

mvnrepository.com

 

어느정도 상위 구조에서 검색을 한다. com.google.android.gms로 검색을 하였다.

검색 결과가 매우 많다. gms 아래에 다양한 서비스가 존재해서 그렇다.

그 중에 우리는 ads에 대하여 설치를 했지만 오류가 생긴것이니까 3번째가 가장 의심된다. 들어가보도록 하자

 

다양한 버전이 있는데 최신 버전을 눌러보자

 

Gradle을 선택하고 하단에 가보면 저렇게 다양한 하위 라이브러리들이 존재함을 알 수 있다.

분명 저중에 하나의 라이브러리는 com.google.android.gms.ads.initialization.OnInitializationCompleteListener 클래스를 가지고 있을 것 이다.

하지만 나한테는 지금 하나의 jar 파일밖에 없으니까 라이브러리의 설치가 정상적으로 진행되지 않았음을 짐작할 수 있다.

시도해볼수있는 방법은 저 라이브러리를 수동으로 다운받아서 넣어주거나 gradle에다가 넣어서 설치해봐도 되지만 android resolve 과정에서 오류가 났기 때문에 쉽게 해결될 오류가 아니라서 유니티 애드몹 버전을 낮추거나 높여서 설치해보도록 하자.

 

 

3. 앱 빌드, 실행 시 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException 오류

 

앱을 빌드하고 실행하면 바로 종료되면서 아래 오류가 발생한다.

 

유니티 애드몹 키값을 입력하지 않아서 발생하는 문제다.

 

위의 경로로 따라가서 app id를 기입해주면 정상작동 한다.

 

4. 광고 테스트 시 유의 사항

요건 나도 몰랐던건데 애드몹에서 광고 작동 테스트를 하려고 광고 호출할때는 항상 테스트 광고를 사용하라는 경고가 있다.

광고를 탭하지 않아도 정지당할 수 있다니까 꼭 유의해야겠다.

반응형
반응형

일학습병행제 독일과 유럽 선진 국가에서 시행하고 청년 일자리 창출, 고용증대 본인도 일학습병행제에 대하여 독일의 성공 사례를 들었을때는 불필요한, 물리 화학 생물 탐구를 안배우고 바로 본인이 하고 싶은 일을 하고 배우며 곧바로 경제생활을 시작하는 것에 대하여 매우 좋게 생각을 하였다.

좋게 보면 그렇게 볼 수 있지만 그 나라는 체계가 잘 잡혀있고 직업정신이 투철하니까 되는거고 우리나라는 절대 안된다. 최소한 좆소기업들이 판치는 이상 절대로 일학습병행제가 잘 돌아갈 수가 없다.

글을 적으면서 분명 정상적이고 양심적이고 사회에 기여를 하고 있는 중소기업 종사자분들 대표님께는 해당되지 않지만 적어도 내가 다녔던 전 회사, 수없이 많을 노동력을 착취하고 있을 좆소기업들 당신들을 고발하는 글이다.

 

목차

1. 본인이 목격한 사례와 실태

2. 일학습병행제도 누가 하는가

3. 회사에서 그들은 무엇을 배우나

4. 경력?

5. 돈?

6. 하고싶은 말

 

 

1. 본인이 목격한 사례와 실태

2017년부터 약 2년간 재직하였던 웹 에이전시 회사에서 근무를 하였다. 쉽게 말하자면 웹 사이트를 주문 제작하고 판매하는 일이었다.

본인은 산업기능요원으로 복무중이었고 개발자 역할을 하였다.

회사는 근처 고등학교와 산학협력을 맺었고 당시 고등학교 2학년 재학중인 학생들 6명이 회사로 출퇴근을 하였다.

출근은 9시까지 하였고 퇴근은 5시까지 해야하지만 사장은 그게 마음에 안들었는지 '너희들이 일찍가면 회사 분위기가 뭐가되냐 너네도 6시까지 일하다가 가라' 이런식으로 부담을 주기 일쑤였다.

얼핏 보기에 마음도 여리고 사회생활도 부족하여 더럽고 추잡한 술수에 항상 휘둘리는 모습이 보였다. 자세한 내용은 아래 항목에 서술하도록 하겠다.

 

2. 일학습병행제도 누가 하는가

일학습병행제도를 하는 친구들이 무슨 생각으로 지원하였는지 궁금하기도 하고 기특하기도 해서 그들과 대화를 하였다.

두 친구는 정말로 IT쪽에 관심이 있어서 회사에 지원을 하였고 열심히 하고 싶어 했다.

나머지 네명의 친구는 '솔직히 말해서 공부하기 싫고 어차피 대학도 안갈꺼니까 그냥 왔다.' 와 얼추 비슷한 맥락이다.

공부는 어차피 안맞고 전문대학교 갈바에는 취직해서 경력도 쌓고 돈도 벌고 하는 마음에 지원을 하였나 싶었다.

학교에서 보내서 왔다는 늬앙스가 있는것으로 보아서(한 친구는 본인의 의지보다도 학교 담당 선생님이 회사 대표한테 사정사정해서 왔다고한 것으로 봐서 교사에게도 떨어지는 무언가가 있는 것 같다. -뇌피셜)

 

3. 회사에서 그들은 무엇을 배우나

본래 일학습병행제도라면 기술에 대한 이해가 뛰어난 현장 전문가가 학생들에게 기술을 가르치고 실제 업무를 같이 하는 그림이 맞을 것 이다.

하지만 회사에서는 아무 기술이 없어도 손과 발만 있으면 할 수 있는 일들만 시켰다.

왜냐하면 학생들을 가르칠 인력은 없고(그 시간에 본인들은 유튜브 보거나 일해야하기 때문이다.) 단순 노동을 처리해야할 누군가가 필요하기 떄문이다.

웹 사이트에 기재해야하는 텍스트를 타이핑하고 웹 사이트에서 잘못된 부분이 없는지 검사하고 사업회 발표에 필요한 자료를 제본하는 등 심지어 청소까지 시킨다.

아무도 책임지고 가르치려고 하지 않고 형식적으로 가르쳤다고만 학교에 보고를 한다.

 

4. 경력?

그들이 얻고 싶어했던 경력은 절대로 인정받을 수 가 없다.

다른 분야라면 모르겠지만 특히 IT쪽에서는 회사에 오래 다닌다고 해서 경력이 쌓이는 것이 아니다.

어떤 회사에서 어떤 업무를 하였는지 본인이 일했던 경력에 대한 포트폴리오가 있어야 하며 안그래도 가짜 포트폴리오, 가짜 경력이 판을 치는 마당에 기술에 대한 이해도 없는데 경력이라고 쳐주는 곳이 있을리가 만무하다.

 

5. 돈?

기사를 보면 회사에서는 학생들을 가르치는 것이기 때문에 돈을 안줘도 되는 모양이다.

실제로 법이 어떻게 되어있는지는 모르지만 대표가 학생들에게 '원래 돈 안줘도 되는데 내가 착해서 주는거다.' 라고 말하면서 최저임금 1/3도 안되는 임금을 지불하였다.

말하고자 하는 것은 임금을 꼭 줘야하는 것은 아니지만 제대로 무언가라도 가르쳐주고 부려먹던가 학생들에게는 아무것도 알려주지 않고 부려먹기만하고 버리니까 문제가 된다는 것이다.

즉 좆소기업에서 2년동안 그들은 돈도 경력 그 어느 것도 쌓을 수 없다.

 

6. 하고싶은 말

즉 내가 말하고자 하는 것은 다음과 같다.

일학습병행제를 하고자 하는 학생이라면 일단 본인이 학업을 회피하려고 도제제도를 하는 건지 진짜로 뜻이 있어서 하는 건지 제대로 생각해보도록 하자.

학업 회피를 위해서 도제를 하는 것이라면 본인이 택한 일에 애정도 없을 뿐더러 나중에 후회해서 다른 무언가를 하려고 해도 선택의 폭은 이미 엄청 낮아지고 난 후다.(잘못 일학습병행제를 하게 되면 고졸인데 성적도 안좋고 경력도 돈도 없을 것 이다.) 진지하게 고민하도록 하자.

정말로 원해서 하는 것이라면 일단 무조건 부모님께 본인의 모든 상황을 알리도록 하자.

학생이 모든것을 스스로 판단하고 감당하기에는 너무 경험이 부족하고 가장 든든한 지원군인 부모님께 도움을 청하는 것만이 당신이 잘못된 길로 빠지지 않을 수 있는 길이라고 생각한다.

엄마아빠한테 기댄다고 생각하지마라 현실적으로 사회에 대하여 진지하고 너를 위해서 조언하고 뛰어줄수 있는 사람은 부모님밖에 없다. 지금 당신이 혼자 다 선택하고 감당하기에는 그 무게가 너무 크다.

원래라면 선생님이 그 역할을 잘 해줘야하지만 세상에는 꼭 좋은 선생만 있는 것이 아니니까 부모님이 제일 안전하겠다.

 

일학습병행제에 관심이 있는 보호자라면 일학습병행제를 시행하고자 하는 기업에 대하여 정말로 철저하게 확인해봐야한다. 회사는 알다시피 본인이 취업하기 전까지는 실태가 어떤지 알기가 정말로 힘들다. 학생들은 본인의 의견을 표출하기 힘들고 아무래도 중소기업 사장은 사람을 주무르는데 도가 텄기 때문에 학생에게 맡기는 것은 정말 위험하다고 생각한다. 또한 학생이 정말로 의미있는 일을 하고 있는지(일 배우라고 보냈더니 바닥 청소하지는 않는지) 부당 대우를 받지는 않는지 관심을 가져주고 챙겨줘야한다.

 

정부는 정상적인 일학습병행제를 수행할 수 있는 기업인지 명확한 기준을 세우고 학생들이 제대로 된 교육을 제공 받고 부당대우를 받지는 않는지 확인을 제대로 해야한다.

반응형
반응형

UI 작업을 하다보면 클릭 버튼의 영역이 너무 작아서 좋은 UX를 제공하기 위해서 일부러 실제 이미지보다 클릭 영역을 확장하는 경우가 있다.

 

해결 방법은 간단하기 때문에 목차없이 글을 쓰도록 하겠다.

왼쪽 : 클릭 영역 확장하기 전 // 오른쪽 : 확장 후

원래는 안의 사각형이 버튼의 클릭 영역이지만 안에 빈 이미지를 추가해주면 다음과 같이 클릭 영역이 늘어난다.

 

방법은 다음과 같다.

캔버스에 다음과 같이 버튼을 추가한다.

 

버튼 하위의 텍스트 오브젝트를 지우고 Image의 스프라이트를 제거하고 투명하게 바꿔주고 크기를 원하는 크기로 정한다.

 

버튼에 2개의 이미지를 추가한다.

 

Image가 톱니바퀴 이미지고 Image(1)이 클릭 영역 확장을 위한 이미지로 이미지의 색을 투명하게 바꿔준다.

 

부모 버튼의 Target Graphic을 형체가 있는 이미지로 바꿔준다.

 

늘어난 투명 영역도 클릭 영역에 포함된다.

반응형
반응형

유니티 프로젝트를 공유하거나 버전관리를 하다보면 한가지 의문이 생기는 부분이 있다.

라이브러리 폴더가 왜 그렇게 용량을 많이 먹는거고 꼭 있어야하는건지, 라이브러리 폴더는 어떻게 해야할지 의문이 생겨서 확인해보고 결과를 찾았다.

결론만 얘기하자면 라이브러리 폴더는 반드시 있어야한다.

 

목차

1. 유니티 오피셜

2. 웹상의 의견

3. 본인 경험, 회사 상사 의견

 

 

1. 유니티 오피셜

라이브러리 폴더가 무엇을 하는 것인지는 유니티 오피셜을 인용하자면

"Unity는 에셋 폴더에 추가하는 파일을 읽고 처리하여 파일 콘텐츠를 데이터의 내부 게임 레디 버전으로 변환합니다. 실제 에셋 파일은 수정되지 않은 상태로 유지되고 처리 및 변환된 데이터 버전은 프로젝트의 Library 폴더에 저장됩니다.

이 폴더는 캐시 폴더와 유사하다고 생각할 수 있습니다. 사용자는 라이브러리 폴더를 수동으로 변경하지 않아도 되며, 변경하려고 하면 Unity 에디터에서 프로젝트의 기능에 영향을 미칠 수 있습니다. 하지만 프로젝트가 열려 있지 않은 라이브러리 폴더를 Unity에서 언제든지 안전하게 삭제할 수 있습니다. 이 폴더의 데이터는 모두 에셋 및 ProjectSettings 폴더에 저장된 데이터로부터 생성되기 때문입니다. 따라서 라이브러리 폴더를 버전 관리에 포함시켜서도 안 됩니다."

간단하게 생각하면 프로젝트의 캐시데이터를 저장하고 라이브러리 폴더를 굳이 버전관리에 포함 안해도 ProjectSettings나 Asset폴더에 세팅값이 있어서 캐시데이터가 다시 생성되기 때문에 버전 관리에 포함 시켜서 안된다(왜 안해도 된다가 아니라 하면 안되는것처럼 표현했지)고 적혀있다.

https://docs.unity3d.com/kr/current/Manual/BehindtheScenes.html

 

씬의 기반 작업 - Unity 매뉴얼

Unity는 에셋을 자동으로 임포트하고, 에셋을 임포트하는 데 사용할 임포트 설정과 프로젝트 전반에서 에셋이 사용되는 위치 같은 에셋에 대한 다양한 추가 데이터를 관리합니다. 아래에는 이 프로세스가 진행되는 방법이 설명되어 있습니다.

docs.unity3d.com

여기까지 보면 Library 폴더는 없어도 무방한 것처럼 보인다.

라이브러리 폴더가 겁나 크기 때문에 걸리적 거리기도 한다. 나 같은 경우는 라이브러리 폴더만 2~3GB한다.

 

2. 웹상의 의견

대충 찾아보면 웹상 의견도 없애도 되고 어차피 알아서 생성되니까 필요없다고 한다.

Library 폴더에 대한 웹상의 의견

대부분은 삭제해도 괜찮음, 버전관리에서 포함시킬 필요없음.

이라고 한다.

 

3. 본인 경험, 회사 상사 의견

사실상 이 글의 핵심인데 내가 말하고자 하는 것은 다르다.

일단 나의 경험상으로는 분명히 Library를 삭제해도 된다고 나와 있어서 프로젝트의 Library 폴더를 삭제하고 다른 팀원한테 프로젝트를 공유해봤더니 특정 데이터의 Inspector의 값이 제대로 안들어가져 있어서 프로젝트가 정상적으로 돌아가지 않았다. 그래서 Library 문제가 맞는지 다시 한번더 전부다 압축해서 보낸뒤 구동해봤더니 정상적으로 구동됐다.

따라서 Library 폴더를 삭제하면 Cache 데이터가 100% 일치하지 않음을 확인했기 때문에 유니티의 공식 답변, 웹상의 의견과 다르게 항상 Library 폴더를 공유해야함을 확인했다.

 

이와 더불어서 회사 상사분께 내가 겪은 문제와 웹상에서 찾아본 내용으로 질문을 하니 본인도 항상 Library 폴더를 같이 공유하고 있다고 하였다.

 

결론 : 라이브러리 폴더는 필요하다.

 

ps : 근데 라이브러리 폴더 압축안하면 2~3gb지 압축하면 수백mb로 용량 줄어드니까 그냥 하자

반응형
반응형

간만에 아마겟돈이라는 게임인데 게임 시스템하고 캠페인이 갑자기 생각나서 윈도우 10으로 구동해보니 어떤 수를 써도 돌아가지 않았다.

흔히들 말하는 윈도우 호환성 체크 이런 걸로는 돌아가지 않았다.

 

 

목차

1. vmware 설치

1-1. This host support Intel vt-x, but Intel VT-x is disabled 오류

2. vmware 게임 파일 전송

3. 게임 내부에서 마우스 오작동

 

 

1. vmware 설치

결국 이리저리 알아봐도 vmware를 설치하고 플레이하는 방법밖에 없어서 vmware를 설치하였다.

https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html

 

Download VMware Workstation Player | VMware

VMware Workstation Player 15 VMware Workstation Player is an ideal utility for running a single virtual machine on a Windows or Linux PC. Organizations use Workstation Player to deliver managed corporate desktops, while students and educators use it for le

www.vmware.com

vmplayer 설치 경로다.

 

vmware를 설치와 xp 설치는 다른 블로그에 잘 나와있는데 이 글을 참고하자

https://nan491.tistory.com/entry/VMware-Windows-XP-Pro-32Bit-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

[VMware] Windows XP Pro 32Bit 설치하기

[VMware] 가상머신에 Windows XP Pro 32Bit 설치하기 실습 환경 VMware Workstation 15 Player (FREE 버전) Windows XP Professional SP3 32Bit Windows XP Professional SP3 ISO 파일 다운로드 링크 링크로 접속..

nan491.tistory.com

설명이 매우 친절하게 되어있어서 차근차근 따라 하면 실패할 일이 없다.

 

1-1. This host support Intel vt-x, but Intel VT-x is disabled 오류

vmplayer를 설치하고 가상 머신을 추가하려고 하면 오류가 발생할 일이 하나 있었는데

This host support Intel vt-x, but Intel VT-x is disabled. 와 같은 오류가 발생하면

BIOS단에서 VT(virtualization technology) 기능을 활성화해줘야 한다.

https://www.qnap.com/ko-kr/how-to/faq/article/intel-vt-x%EC%99%80-amd-svm%EC%9D%84-%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

 

Intel VT-x와 AMD SVM을 활성화하는 방법

적용 모델: TS-x79 Pro/ TS-x79U-RP TS-x70/ TS-x70 Pro/ TS-x70U SS-x79 IS-400 Pro 답: 이 문서에는 다음과 같이 두 가지 다른 CPU 플랫폼에 대한 구성 가이드가 두 가지 있습니다. Intel (Intel 가상화 기술, Intel VT-x) AMD (AMD 보안 가상 머신, AMD SVM) 이 과정에서 BIOS에 액세스하러면 키보드와 모니터가 필요합니다. 이들을 Turbo NAS에 연결하십시오. Int

www.qnap.com

글의 중반에 VT-x를 활성화시켜주는 방법이 있으니 따라 하고 재부팅하면 정상적으로 작동한다.

 

2. vmware 게임 파일 전송

자 그러면 깔끔한 윈도우 xp가 깔려있다고 하였을 때 게임 파일을 vmware에다가 옮겨야 한다.

세개의 방법이 있다. -> 강력하게 첫 번째 방법을 추천한다.

첫 번째 방법은 vmware에서 해당 게임 파일을 다운로드하는 것이다.

왜 첫 번째 방법을 추천하냐면 내가 나머지 두 개의 방법을 시도하려고 2시간 동안 매달렸지만 성과가 없어서 그냥 vmware에서 해당 게임 파일을 새로 받아서 하니까 잘됐다.

다만 vmware의 웹 브라우저가 I.E 7이라서 정상적으로 웹 페이지를 돌아다니기 힘들기 때문에 파일을 구하기 쉽도록 미리 준비를 하면 편하겠다.

또한 압축 풀기도 잘 안돼서 반디집을 까는 것을 추천한다.

https://kr.bandisoft.com/bandizip/old/

 

반디집 구버전 다운로드 · XP 지원 버전

반디집 구버전 다운로드 반디집 6.0 버전 부터는 Windows XP를 지원하지 않습니다. Windows XP 사용자는 반디집 5.X 버전을 다운로드 받아서 사용해 주시기 바랍니다. 반디집 v5.22 다운로드 » 변경 사항 2019/2/23 v5.23 보안 취약점이 있는 ACE 포맷 지원 중단(CVE-2018-20250) 2019/1/8 v5.22 멀티 코어를 사용하여 압축할 때 안정성 강화 2018/10/1 v5.21 내장 이미지 뷰어에서 발생하는 보안

kr.bandisoft.com

 

두 번째 방법은 드래그 앤 드롭 방식을 사용하는 건데 현재 설치한 vmware player가 무료 버전이라 그런지 option에서 Guest Isolation 메뉴가 있어야 하는데 

죽어도 그 메뉴가 보이지 않는다. 하지만 내가 예전에 유료버전을 사용해봤는데 드래그 앤 드롭을 사용하면 추가적인 절차 없이 파일이 바로 옮겨지기 때문에 해당 메뉴 활성화가 가능하다면 이 방법으로 하는 것을 추천한다.

 

세 번째 방법은 shared folder를 통하여 파일을 공유하는 것이다.

https://www.youtube.com/watch?v=HfUQ9k-Q1fQ

글이 굉장히 많지만 진짜 안된다. 내가 컴맹이라 그런가? 흠... 모르겠다

한 가지 유의할 점은 vmware를 완전히 꺼줘야지 option에서 shared folder 관련 옵션 체크가 가능하다는 것이다.

그 외에는 한 시간 동안 삽질해도 안되길래 그냥 첫 번째 방법으로 해결했다.

 

3. 게임 내부에서 마우스 오작동

게임을 다 설치했는데 마우스가 게임만 들어가면 제대로 작동 안 한다.

찾아보니 xp에서 usb 마우스를 잘 지원 안 해서 그렇다는데 아래와 같이 vmware tools를 설치해주면 정상적으로 작동한다.

 

Player > Manage > Resintall Vmware Tools 또는 Install Vmware Tools 선택

 

 

다음

 

최초로 설치하는 경우 저렇게 나오지 않을 것 이다.

 

 

모든 메뉴를 다 체크하고 설치를 진행한다.

 

 

 

 

주말 동안 플레이해서 엔딩 봤다.

크... 이건 갓겜이여...

반응형

'IT > 기타' 카테고리의 다른 글

채널톡 유저정보 Upsert API  (0) 2021.09.08
intellij 자동 줄바꿈 길이 지정  (0) 2019.08.22
원노트 사용 팁 - 2  (0) 2019.06.23
윈도우 시작 사운드 바꾸기 XN resource Editor  (0) 2013.10.16
윈도우 OS 사운드  (2) 2013.10.16
반응형

Scope was not disposed! You should use the 'using' keyword or manually call Dispose.

UnityEngine.Scope:Finalize()

 

MissingReferenceException: The object of type 'MonoScript' has been destroyed but you are still trying to access it.

Your script should either check if it is null or you should not destroy the object.

UnityEngine.Object.get_name () (at /Users/builduser/buildslave/unity/build/Runtime/Export/UnityEngineObject.bindings.cs:198)

UnityEditor.ScriptExecutionOrderInspector+DragReorderGUI.IsDefaultTimeElement (UnityEditor.MonoScript element) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/ScriptExecutionOrderInspector.cs:653)

UnityEditor.ScriptExecutionOrderInspector+DragReorderGUI.DragReorder (UnityEngine.Rect position, System.Int32 elementHeight, System.Collections.Generic.List`1[T] elements, UnityEditor.ScriptExecutionOrderInspector+DragReorderGUI+DrawElementDelegate drawElementDelegate) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/ScriptExecutionOrderInspector.cs:694)

UnityEditor.ScriptExecutionOrderInspector.OnInspectorGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/ScriptExecutionOrderInspector.cs:542)

UnityEditor.AssetSettingsProvider.OnGUI (System.String searchContext) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Settings/Providers/AssetSettingsProvider.cs:94)

UnityEditor.SettingsWindow.DrawControls () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Settings/SettingsWindow.cs:310)

UnityEditor.SettingsWindow.DrawSettingsPanel () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Settings/SettingsWindow.cs:301)

UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout) (at /Users/builduser/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:244)

UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

 

오류는 다음과 같다.

유니티를 꽤나 자주 만지다 보니 이런 형태의 에러를 자주 접하는데

본인이 작업했던 스크립트에 대한 오류가 아니고 오류 메시지에 특히 OnGUI 관련된 내용이 많이 나온다면 유니티에서 발생한 오류라고 생각하고 재시작, 빌드 플랫폼 변경을 해보자 이런 형태의 오류는 여태까지 재시작해서 해결 안된적 없었다.

반응형
반응형

문제

문제의 메인 씬

자꾸 특정 씬으로 넘어갈 때 지연이 발생했다.

하지만 해당 씬에서는 문제가 될만한 스크립트도 없고 별 이유가 없어서 프로파일러를 켜서 확인해봤다.

 

프로파일러 내용

프로파일러로 확인해봤더니 File.Read에서만 2000개의 인스턴스가 생성되어서 지연되는 것으로 확인되었다.

하지만 나는 스크립트 상에서 파일을 읽는 부분은 전혀 넣지 않았는데 전혀 짚이는 것이 없었다.

 

게임에서 세이브 로드하는 부분을 전부다 주석 처리해봐도 효과는 없었고, 프로파일러 자세하게 돌려봐도 딱히 나오는 거 없었다.

결국 모든 오브젝트, 스크립트를 하나씩 삭제를 하면서 원인을 찾았다.

 

원인

원인은 특정 오브젝트에서 ScriptableObject(이하 SO)를 매우 많이 불러서 발생하는 문제였다.

이 SO를 엄청나게 많이 부르는 것도 문제지만 씬을 로드할 때마다 해당 오브젝트도 새로 생성되어서 약 1초 이상의 지연이 발생하는 것이었다.

헷갈릴만한 것이 유니티에서 인스펙터로 끌어다가 넣어주는 SO는 저렇게 잡혀서 잘 몰랐던 것이다.

 

이런 식으로 SO가 SO를 불러오고 그 SO가 또 다른 SO를 불러오고... 엄청난 지연이 발생할 만하다. 멍충아

렉이 저것밖에 안 걸리는 게 더 신기하다.

 

해결

SO를 대량으로 부르는 게임 오브젝트를 인스턴스, 싱글턴화, DontDestroyOnLoad 하여 게임을 시작할 때만 불러오고 이후로는 계속해서 오브젝트를 유지하는 방식으로 대체하였더니 해결되었다.

그리고 해당 문제를 겪어보니 게임에서 불러와야 하는 대량의 데이터가 있는 경우 게임을 로딩하거나 시작할 때 일괄적으로 불러오고 메모리에 항상 저 데이터를 들고 있다가 필요할 때 바로바로 꺼내와서 사용해야 한다고 생각이 들었다.

요즘 최적화와 오브젝트 풀링에 대해서 공부하고 있는데 좋은 경험이 되었다.

반응형
반응형

문제

유니티에서 게임 오브젝트에 스크립트를 드래그해서 컴포넌트로 추가할 때 아래와 같은 오류 메시지가 발생

Can't add script component 'TestScript' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.

또는

Can't add script behaviour TestScript ,Can't Add Script The script needs to derive from MonoBehaviour!

 

원인

유니티를 공부하는 분이 이 에러 때문에 막히고 있어서 직접 봐보았더니 스크립트명과 스크립트의 클래스명이 달라서 생기는 문제였다.

스크립트 파일 이름과 스크립트에서 구현되어 있는 클래스의 이름이 다르면 컴포넌트로 인식을 못해서 불러오지 못한다.

 

해결

스크립트나 파일명을 하나로 통일한다.

위의 경우 파일명은 TestScript고 스크립트에서 클래스 이름은 Test인데 클래스 이름을 TestScript로 바꾼다.

정상적으로 처리되었다면 다음과 같이 Add Component에서 추가한 컴포넌트가 보인다.

 

반응형