목차

반응형

보통 유니티 프로젝트라 하면 싱글톤으로 시작해서 싱글톤으로 끝난다.

제페토의 타입스크립트로 싱글톤을 어떻게 구현해야 하나 찾아봤다.

갖다 쓸 사람 갖다 쓰세요.

 

ObstacleManager라는 매니저를 만든다고 가정하면 아래와 같은 코드가 나온다.

export default class ObstacleManager extends ZepetoScriptBehaviour {

    private static instance: ObstacleManager;
    static getInstance() {
        return this.instance || (this.instance = new this());
    }

    Start() {
        ObstacleManager.instance = this;

    }
}

Start() 안의 부분은 내가 지어낸 건데 보통 대부분의 언어는 싱글톤을 만들면 초기 인스턴스를 설정해주는 부분이 없으나 유니티는 저 부분이 매우 필요하다.

 

(먼가 글하나 날로 먹는 것 같아서 살짝 TMI를 넣어본다.)

이 말이 이해가 안 가는 사람은 아직 유니티에서 싱글톤의 초기 인스턴스가 필요한 형태의 특수성을 이해할 정도로 더 많이 쓰지 않았다는 것이다. 쉽게 말하자면 유니티 프로젝트 안에 싱글톤 매니저 만들고 인스펙터에서 초기값 이것저것 설정해놓는 부분이 있는데 그거 자체가 이미 싱글톤 인스턴스가 생성된 것이라고 보면 된다. 그래서 저 코드가 없으면 당신이 설정해놓은 싱글톤 인스턴스가 스태틱 인스턴스에 안 들어가서 설정해놓은 초기값을 못쓰고 스태틱 그냥 새로운 인스턴스를 만들어버린다.

 

더 깔끔한 방법이 없나 아쉽긴 한데... 저 정도만으로 해도 크게 문제 될 건 없을 것 같다.

ObstacleManager.getInstance().SpawnCar() 이런 식으로 호출해서 사용하면 된다.

반응형
반응형

제페토 스튜디오 개발 - 아바타 불러오기

유튜브 동영상으로 내용확인 부탁드립니다.

 

개발하는데 사용된 CharacterController 스크립트입니다.

import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import {SpawnInfo, ZepetoPlayers} from "ZEPETO.Character.Controller";

export default class CharacterController extends ZepetoScriptBehaviour {

    Start() {
        ZepetoPlayers.instance.CreatePlayerWithZepetoId("", "", new SpawnInfo(), true);
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(()=>{
            let _player = ZepetoPlayers.instance.LocalPlayer;
        })

    }

}

 

튜토리얼 프로젝트 코드

https://github.com/IT-junk/ZEPETO-AVATAR

 

제페토 스튜디오 - 유튜브 채널

제페토 스튜디오 - 간단한 개발 후기

제페토 스튜디오 - 기본 프로젝트 구동하기

제페토 스튜디오 - 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

제페토 스튜디오 - 아바타 불러오기

반응형
반응형

1. 개요

2. 원인

3. 해결방법

 

 

 

 

 

1. 개요

현재 최신 버전의 제페토 스튜디오 프레임워크 설치 후 핸드폰에서 테스트를 해보면 

 

왼쪽 화면과 같이 무한로딩 걸리다가 "제페토 월드 접속에 실패했어요. 다시 시도해 주세요." 라는 메시지와 함께 종료한다.

 

많고많은~ 제페토의 버그중 하나다.

이 현상을 해결해보도록 하자.

 

2. 원인

원래 이러지 않았는데 제페토 프레임워크를 업데이트 하고 나서 발생했다.

이는 제페토 개발사측에서 의도하지 않고 만들어낸 버그다.

제페토 프레임워크를 다시 예전 버전으로 되돌리면 된다.

 

3. 해결방법

유니티에서 Window > Package Manager로 들어간다.

 

ZEPETO.World의 버전이 1.0.3이면 해당 현상이 발생한다. 1.0.2로 버전을 낮춰주도록 하자

 

유니티 UI가 조금 다를 수 있는데 ZEPETO.World를 체크하고 1.0.2 버전을 선택하고 Update to 1.0.2를 누른다.

 

기다리면 ZEPETO.World의 버전이 1.0.2로 바뀐다.

 

프로젝트를 새로 만들면 1.0.2로 제페토 세팅이 초기화 되면서 버그가 고쳐진다.

새로 만드는 부분은 이전 게시물 "기본 프로젝트 구동하기"의 중간 부분을 따라하면 된다.

 

 

제페토 스튜디오 게시물

제페토 스튜디오 - 유튜브 채널

제페토 스튜디오 - 간단한 개발 후기

제페토 스튜디오 - 기본 프로젝트 구동하기

제페토 스튜디오 - 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

제페토 스튜디오 - 아바타 불러오기

반응형
반응형

1. 개요

2. 준비물

3. 과정

4. 프로젝트 파일 공유

5. 에러 : 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

 

 

 

1. 개요

글을 작성하면서 글을 읽는 사람이 어느 정도 수준인지 몰라서 얼마나 상세하게 설명을 해야 할지 모른다.

나는 제페토 스튜디오에 대한 설명을 위주로 하고 싶은데 유니티 엔진의 기본적인 설명이 필요한 사람이 있을 것 같기도 하다. 더 상세한 설명을 원하거나 유니티 엔진에 대한 튜토리얼이 필요한 사람은 댓글로 남겨주면 이후 게시물 작성할 때 도움이 될 것 같다.

 

제페토 스튜디오 기본 프로젝트를 구동하는 것부터 힘들어하는 분들이 있어서(잘 안되는 거 정상임) 가이드 글을 작성해보았다.

기본적으로 아래 제페토 스튜디오 공식 문서에 나와있는 내용이다.

https://studio.zepeto.me/guides/installing-unity-and-registering-zepeto-template

 

ZEPETO Studio

ZEPETO 크리에이터가 되어보세요!

studio.zepeto.me

 

 

근데 아마 2021년 11월 13일 기준 지금 저 문서대로 따라 하면 빌드하고 모바일에서 실행하면 안 될 거다.

제페토 측에서 프레임워크 업데이트를 한 것 같은데 그 이전에는 잘 되던데 지금은 빌드가 안된다.

(담당자님 업데이트하고 빌드가 안되네요 ^^ 정신 차리세요 ^^)

해결방법은 마지막에 트러블슈팅 해결방법 따로 작성해놓은 글 있으니 그거 따라 하도록 하자.

 

2. 준비물

필수사항 : 개발을 위한 필수사항

유니티 허브 : https://unity3d.com/kr/get-unity/download

유니티 2020.3.9f1 버전 : unityhub://2020.3.9f1/108be757e447

제페토 계정

핸드폰에 제페토 설치

 

추가사항 : 개발을 위해 있으면 좋은 것

VS Code (현재 라이더는 디버깅이 안되고 VS Code만 됨)

 

 

3. 과정

1. 유니티 허브 설치

유니티 허브는 다양한 유니티 버전을 쉽게 관리할 수 있도록 도와주는 유니티 관리 프로그램이라고 보면 된다.

 

2. 유니티 2019 버전 설치

유니티 허브를 설치하였으면 unityhub://2020.3.9f1/108be757e447 링크를 통하여 현재 유니티 허브에 2020.3.9f1 버전을 설치하도록 하자.

 

해당 링크를 클릭하면 유니티 허브에서 유니티 설치를 진행할 수 있다.

 

아무것도 필요 없다 전부 체크 해제하고 INSTALL 한다.

 

그러면 위와 같이 유니티를 설치한다.

 

3. 제페토 프레임워크 설치

다음은 제페토 프레임워크를 설치해야 한다.

 

새로운 유니티 프로젝트를 생성한다.

 

위와 같이 이미지가 나오면 프로젝트 생성이 완료된 것이다.

 

제페토 프레임워크 파일을 다운로드한다. https://upm.zepeto.run/setup/package

다운로드한 파일을 더블클릭해서 패키지를 실행한다.

 

그러면 새로 생성한 유니티 프로젝트에서 불러오더니 창이 하나 뜨는데 Import를 누른다.

 

Close를 누르고 기다리다 보면 왼쪽 노란색 파일이 사라진다.

그러면 프레임워크 설치가 끝났다.

 

유니티와 유니티 허브를 종료하고 유니티 허브를 다시 시작한다.

 

그리고 새로운 프로젝트 생성하기를 하면 위와 같이 ZEPETO Default Project라는 새로운 템플릿이 생겼다.

해당 템플릿을 선택하고 새로운 프로젝트를 생성한다.

 

 

해당 창의 의미는 유니티 기본 인풋을 제페토 스튜디오의 인풋으로 대체하겠다는 말이다.

지금은 중요하지 않다. Yes를 누르고 넘어간다.

시간이 조금 걸린다. 한 3~5분 정도?

 

불러오는 것이 끝나면 위와 같이 준비가 된다.

에셋에서 샘플씬을 더블클릭해서 씬으로 진입한다.

빨간색 부분의 현재 씬이름이 위와 같이 바뀌었는지 확인하자.

 

위 버튼들에 대해서 간단한 설명을 하겠다.

1 : 프로젝트를 유니티에서 실행

2 : 프로젝트 일시정지

3 : 핸드폰에서 플레이 가능하도록 프로젝트를 빌드

 

1번을 눌러서 프로젝트를 실행해본다.

왼쪽 아래 Hello ZEPETO Script라고 메시지가 뜨면 성공이다.

 

이후 3번을 눌러 빌드를 하면 QR코드가 뜨는데 핸드폰으로 인식해서(제페토 깔려있어야 함) 빌드된 프로젝트로 들어가 보자.

 

사각형 박스가 화면 가운데서 돌고 있으면 된다.

 

4. 프로젝트 파일 공유

https://drive.google.com/file/d/1qr7529sW1lnSoI0Y_bY27M_jktw2qlIh/view?usp=sharing

제페토 스튜디오를 설치하고 나서 ZEPETO Default Project 템플릿으로 프로젝트를 통으로 압축한 파일이다.

혹시 원하는 사람이 있을까 봐 올려놓는다.

 

5. 에러 : 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

개요에서 말한 대로 지금 최신 버전의 제페토 프레임워크로 빌드하고 핸드폰으로 플레이해보려고 하면 

위와 같이 무한 로딩이 걸리다가 "제페토 월드 접속에 실패했어요. 다시 시도해 주세요."라는 메시지가 뜨면서 진행이 안된다.

아래 해결방법을 정리해놓은 글이 있으니 참고하자.

 

 

제페토 스튜디오 게시물

제페토 스튜디오 - 유튜브 채널

제페토 스튜디오 - 간단한 개발 후기

제페토 스튜디오 - 기본 프로젝트 구동하기

제페토 스튜디오 - 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

제페토 스튜디오 - 아바타 불러오기

반응형
반응형

몇몇 개발자들은 요즘 한창 핫한 메타버스에 관심이 있을 것이다. 그중 제페토라는 국내 메타버스의 선두주자를 달리고 있는 플랫폼은 눈여겨볼만하다.

 

최근 제페토 측에는 기존 맵을 만드는 프로그램보다 더욱 전문적인 맵을 만들 수 있도록 유니티 기반의 제페토 스튜디오를 출시하였다.

 

필자는 제페토 스튜디오로 한번 맛보기로 개발을 해봤다.

 

 

일단 기존 유니티 엔진에서 typescript로 프로그램을 작성하도록 되어있다.

마치 엔진, UI, 시스템은 유니티를 쓰지만 그 안에서 typescript로 개발을 해야 한다.

 

개발을 조금 해본 느낌으로는 지금은 기능이 굉장히 제한적이고 버그가 많아서 개발이 거의 불가능한 수준이다.

따라서 제페토로 한번 게임을 개발해볼까 하는 사람에게는 아직 권장하지 않겠다.

 

벌써 발견한 치명적인 버그와 작동 안 하는 것들이 너무 많다.

- 인스펙터에 할당된 값이 플레이 중에는 바뀌지 않음. => 현재 업데이트 이후 인스펙터가 실시간으로 반영되는 것 확인

- ts파일의 컴파일이 간헐적으로 작동해서 유니티를 재시작하고 force compile을 해줘야 그때서야 빌드됨.

- Unity의 C#코드는 하나도 작동 안 함, 의도한 건지는 모르겠는데 계속 현재 방침을 고수할 예정이라면 유니티의 엄청나게 많은 에셋(TMP Pro, 카메라 에셋 등, ...)을 하나도 활용하지 못할 것이다.

- 빌드할 때마다 건든 적 없는 playerModel prefab이 수정됐다고 에러가 발생한다.

- 모듈이 너무 폐쇄적이다.(특정 모듈의 코드, 프리팹 그 어떠한 요소도 수정할 수밖에 없도록 해놨다. 고치려면 디컴파일하고 수정해야 할 것 같다.)

- 문서가 매우 불친절하다.

- 작동 안되는 것이 너무 많다. gameObject.setActive(false) 하면 되지만 gameObject.enabled=false 하면 에러는 안뜨지만 기능은 작동안한다. 뭔가 안될것 같다 싶은것은 안된다.

 

개인적으로 C#코드가 작동 안 하는 것이 가장 우려가 된다. 굳이 ts 기반 코드만 작동하는 부분은 정말 안타까운 판단이라고 생각한다. 그 많은 양질의 에셋이 호환되기만 한다면 정말 빠르게 게임 개발이 가능해서 플랫폼에 더 빠르게 고퀄리티 컨텐츠 공급이 가능했을 텐데

 

2021-10-24 기준

아직은 출시 초기단계니까 미흡한 부분이 있을 수밖에 없다는 점을 감안하더라도 너무 되는 게 없어서 실망이 컸다.

지속적으로 버그 리포트를 할 예정이다. 버그 제보해도 고칠생각이 없는 것 같다. 일단 나도 포기

최악의 경우는 제페토 스튜디오 만들어놨는데 활성화가 안돼서 아무도 안써서 망하는 경우다.

지금의 제페토 스튜디오는 업데이트를 해주지 않는다면 충분히 망하는 것이 가능하다고 본다.

따라서 뉴비분들은 제페토 스튜디오를 공부하지말고 유니티를 공부하시기를 권한다.

 

2021-11-14 기준

제페토측에서 최근에 업데이트를 했는데 해당 업데이트 이후 정말 기본적이지만 작동하지 않던 부분이 해소되었다.

그래도 내가 생각한 "이 정도까지는 돼야 뭘 하든 말든 하지!" 하던 수준은 만족해서 본인은 제페토 스튜디오 유튜브 채널과 프로젝트를 본격적으로 준비할 생각이다.

유니티로 개발 경험이 풍부한 사람 기준으로 시작해볼만 하다고 여겨진다.

 

 

제페토 스튜디오 게시물

제페토 스튜디오 - 유튜브 채널

제페토 스튜디오 - 간단한 개발 후기

제페토 스튜디오 - 기본 프로젝트 구동하기

제페토 스튜디오 - 제페토 월드 접속에 실패했어요. 다시 시도해 주세요.

제페토 스튜디오 - 아바타 불러오기

 

반응형
반응형

에러

제페토 스튜디오의 튜토리얼을 따라하다보면 ts 스크립트를 추가하고 프로젝트를 실행하면 typescript sources is not compiled yet. 라는 에러와 함께 구동도 빌드도 되지 않는다.

ts 스크립트 파일을 추가하면 자동으로 컴파일러가 컴파일을 해줘야하는데 해당 파일을 찾지 못하는 느낌이다.

 

원인

제페토 측에서 명시한 유니티 버전이 안맞아서 그렇다. 본인의 경우 2020.3 까지만 버전을 맞추고 뒤의 버전을 안맞췄더니 해당 현상이 발생했다.

 

해결방법

https://studio.zepeto.me/kr/guides/installing-unity-and-registering-zepeto-template

정확히 명시한 버전을 유니티 허브에 설치하고 다시한번 해보자.

반응형
반응형

증상

유니티 버전을 2019대에서 2020대로 올리고 안드로이드 빌드를 하면 

mainTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant.

에러와 함께 빌드 실패한다.

 

해결방법

Project Settings > Player > Publishing Settings > Build > Custom Main Gradle Template 체크

 

생성된 mainTemplate.gradle파일에 아래에 aaptOptions 부분에 noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ') 추가

 

참고

answers.unity.com/questions/1802208/build-error-27.html

반응형
반응형

증상

유니티에서 안드로이드 빌드 시작하자마자

CommandInvokationFailure: Failed to update Android SDK package list.

stderr[
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 5 more

라는 에러와 함께 빌드 실패처리

 

해결방법

뭐 jdk를 재설치하고 external tools에서 JDK 경로 재설정하고 이것저것 하라고 나와있는데 나의 경우 해결방법은 이것이었다.

 

Edit > Preferences > External Tools > JDK Installed with Unity의 경로의 자동 설정을 체크해제 > 맨마지막에 슬래시 추가

 

이해가 안가지만 이렇게 하니까 잘된다.

 

참고

forum.unity.com/threads/failed-to-update-android-sdk-package-list-error-when-using-sdk-installed-with-unity.722777/

반응형
반응형

증상

유니티 안드로이드 빌드 시 아래와 같은 에러

/Users/jim/Desktop/workspace/project/project/Temp/gradleOut/launcher/build/intermediates/merged_manifests/release/AndroidManifest.xml:52: AAPT: error: unexpected element found in

 

해당 파일의 52번째 줄에는 <quries>라는 신택스가 있는데 인식을 못하는 것 같다.

 

원인

stackoverflow.com/questions/62969917/how-do-i-fix-unexpected-element-queries-found-in-manifest

 

How Do I Fix "unexpected element found in "?

All of a sudden, I am getting this build error in my Android project: unexpected element found in How do I fix it?

stackoverflow.com

 

유니티의 gradle 버전이 3.4.0 인데 버전이 낮아서 그렇다고 한다.

 

해결

Gradle 버전 3.4.0 -> 3.4.3으로 변경한다.

위의 Grade의 com.android.tools.build:gradle:3.4.0'라고 적혀있는 부분을 com.android.tools.build:gradle:3.4.3'으로 바꿔주고 유니티 빌드를 다시 해보자.

 

위 파일의 경로는 아래와 같다.

/Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/baseProjectTemplate.gradle

반응형
반응형

증상

xcode로 프로젝트를 아이폰에 빌드, 실행도 잘되고 아카이브, 업로드도 잘되는데 출시하려고 좀 기다리면 "잘못된 바이너리로 상태가 변경되었습니다."라고 메시지가 날아오면서 해당 바이너리가 사라져 버린다.

아무런 설명 없이 날아가버리는데 뭐가 문제일까?

 

원인

알고 보니 회사 공식 메일(앱스토어가 연결되어 있는 공식 계정)에 바이너리가 거절된 이유를 상세하게 설명한 메일이 와 있었다.

내가 해당 메일 접근 권한이 없어서 메일이 온지도 전혀 몰랐던 것이다.

당신도 앱스토어 공식 계정으로 메일이 왔는지 확인해보라

 

메일에는 아래와 같은 내용이 와 있었다.

Dear Developer,
We identified one or more issues with a recent delivery for your app, “Mecha head League” 1.0.11 (115). Please correct the following issues, then upload again.
ITMS-90683: Missing Purpose String in Info.plist - Your app’s code references one or more APIs that access sensitive user data. The app’s Info.plist file should contain a NSPhotoLibraryUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn’t contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
Though you are not required to fix the following issues, we wanted to make you aware of them:
ITMS-90078: Missing Push Notification Entitlement - Your app appears to register with the Apple Push Notification service, but the app signature’s entitlements do not include the ‘aps-environment’ entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the ‘aps-environment’ entitlement. Xcode does not automatically copy the aps-environment entitlement from provisioning profiles at build time. This behavior is intentional. To use this entitlement, either enable Push Notifications in the project editor’s Capabilities pane, or manually add the entitlement to your entitlements file. For more information, see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.
Best regards,
The App Store Team

developer.apple.com

Local and Remote Notification Programming Guide: Configuring Remote Notification Support

Describes how apps can send and receive user notifications locally and remotely.

 

사람마다 증상은 다를 것이고 그에 따라 메일 내용도 다를 것이다. 메일의 내용을 대략 해석하자면

  1. 프로젝트가 photolibrary를 사용하기 때문에 photolibrary 사용에 관한 안내 문구를 제시해야 한다.
  2. Push Notification을 사용하는데 설정이 제대로 안되어있다.

 

해결

1. 프로젝트가 photolibrary를 사용하기 때문에 photolibrary 사용에 관한 안내 문구를 제시해야 한다.

info.plist에 설정 추가

<key>NSPhotoLibraryUsageDescription</key>
<string>Photo Library Access Warning</string>

 

2. Push Notification을 사용하는데 설정이 제대로 안되어있다.

Signing & Capabilities > +Capabilties > Push Notification 추가를 해준다.

 

위의 설정대로만 해주면 정상적으로 업로드 및 출시가 가능하다.

반응형