제페토 캐릭터 생성하기
- Hierarchy 창에서 3D Object → Plane을 클릭합니다.
- Plane의 위치는 X : 0, Y : 0, Z : 0 으로 세팅하고, 크기는 넉넉하게 X : 10, Y :1 , Z : 10으로 세팅하여 주세요.
👍 팁
- Plane은 테스트를 위한 가장 기본적인 바닥입니다.
- Collider가 포함된 Object라면 어떤 것이든 상관은 없습니다.
- 월드 제작에 익숙해진다면 멋진 맵을 만들어서 바닥을 대신할 수 있습니다.
- 발판이 없다면 캐릭터가 생성되자마자 떨어져서 보이지 않게 됩니다.
Hierarchy 창에서, ZEPETO → ZepetoPlayers 탭을 클릭해서 Scene에 추가할 수 있습니다.
다음과 같이, ZepetoPlayers라는 오브젝트가 자동으로 생성됩니다.
ZepetoPlayers는 월드 내에서 캐릭터 컨트롤러 모듈을 관리하는 컴포넌트입니다.
Inspector 창에서 캐릭터 컨트롤과 관련된 각종 설정값을 지정할 수 있습니다.
- 주로 제페토 카메라에 대한 설정이나 캐릭터 이동속도, 점프 높이 등을 설정할 수 있습니다.
- 이 예제에서는 기본 값으로 사용하도록 하겠습니다.
📘상세한 설정은 ZEPETO Character Controller 가이드를 참고하여 주세요.ZEPETO 캐릭터 컨트롤러
캐릭터 로딩을 위해 새로운 ZEPETOScript 파일을 생성해야 합니다.
1) [Project] 패널에서 왼쪽 상단에 있는 [+] 메뉴를 선택하거나, Assets → Create → ZEPETO → TypeScript를 선택합니다.
2) ZEPETOScript 파일이 생성될 때 이름을 CharacterController라고 입력해 주세요. 아래 화면과 같이 스크립트 파일이 생성됩니다.
3) Hierarchy → [+] 메뉴 → Create Empty 메뉴를 실행해 주세요.
4) Empty GameObejct 생성시 CharacterController라고 작성해 주세요. 아래 화면과 같이 GameObject가 생성됩니다.
5) 앞서 생성한 CharacterController ZEPETOScript 파일을 드래그해서 GameObject에 Component로 추가해 주세요.
- ZEPETOScript는 Scene에 존재하는 GameObject에 컴포넌트로 추가하지 않으면 실행되지 않습니다.
6) 먼저 자신의 zepeto id를 입력해서 캐릭터를 Scene에 로드해 보겠습니다. CharacterController ZEPETOScript 파일을 Open하여 스크립트 에디터 프로그램을 실행시켜 줍니다 그런 다음 아래의 예제 스크립트를 적용하세요.
- [ZEPETO_ID] 부분에 ZEPETO 아이디를 입력하여 주세요.
- 당신의 ZEPETO ID가 'abcd'라면, 다음과 같이 입력해야 합니다.ZepetoPlayers.instance.CreatePlayerWithZepetoId("", "abcd", new SpawnInfo(), true)
7) 스크립트 저장 후 유니티 에디터로 돌아와 주세요.
- STEP 3의 실행하기로 넘어가 주세요.
- 이 코드를 사용할 경우 특정 제페토 ID의 아바타로만 플레이하게 됩니다.
- 월드를 출시할 때는 코드에 입력한 ZEPETO 아이디 대신, 월드에 접속한 유저의 ZEPETO 아이디 기반으로 코드를 수정해야 합니다. 아래 스크립트를 사용하여 주세요.
- 이 스크립트는 특정한 ZEPETO ID를 입력받지 않고, 로그인한 ID 기반으로 제페토 캐릭터가 생성되게 되므로 반드시 유니티 에디터에 로그인 한 후 테스트를 수행하여 주세요.
- 스크립트 저장 후 유니티 에디터로 돌아와 주세요.
- STEP 3의 실행하기로 넘어가 주세요.
- Local 플레이어 생성 코드는 클라이언트 스크립트에서 하나만 존재하도록 관리해 주세요.
- 동일한 플레이어가 여러 명 생성된다면 CreatePlayerWithUserId() 스크립트가 다른 곳에서도 호출되고 있을 수 있습니다.
- 주로 많이 하는 실수로는 이 가이드에 있는 캐릭터 생성 코드를 남겨둔 채로 멀티플레이 예제 코드를 적용해서 이중으로 캐릭터가 생성되는 경우이므로, 한 쪽을 주석처리 해주는 방식으로 관리해 주세요.
화면 중앙의 [▶︎(play)] 버튼을 통해서 CharacterController가 동작하는 것을 확인할 수 있습니다.
이렇게 로딩된 캐릭터를 로컬 플레이어의 캐릭터라고 하며, 사용자가 자신의 기기에서 직접 조작할 수 있는 ZEPETO 캐릭터를 뜻합니다.
CharacterController는 PC/Mobile 환경에 대응하여 각각의 Input Event에 대한 공통된 캐릭터 컨트롤 Key Mapping이 정의되어 있기 때문에, 어떤 플랫폼 환경에서든 Load한 캐릭터를 Scene 내에서 바로 조작할 수 있습니다.
PC 환경에서는 키보드와 마우스를 통해 캐릭터 및 카메라를 조작할 수 있으며, 모바일 환경에서는 아래 스크린샷과 같이 가상패드를 통해 캐릭터 및 카메라 조작이 가능합니다.
👍 캐릭터 컨트롤 시 지원되는 입력 인터페이스 PC
- Move: 키보드 방향키, WASD
- Jump: Space
- Double Jump : (좌측) Shift
- Zoom: 마우스 휠
- Rotate: 스크린 드래그
모바일
- Move: (스크린 좌측 하단)가상 패드
- Jump: (스크린 우측 하단)가상 패드 버튼
- Zoom: (두 손가락)스크린 드래그
- Rotate: (한 손가락)스크린 드래그
만약 ZEPETO 캐릭터 생성이 정상적으로 이루어지지 않는다면 Unity menu > Project Settings > Editor > Enter Play Mode Settings설정으로 들어가 주세요.
- Enter Play Mode Options 를 끄기로 설정합니다.
ZEPETO 캐릭터의 시작 위치는 별도로 설정하지 않는 이상은 UnityEngine.Vector3(0,0,0)의 위치에 생성됩니다.
회전값 역시 UnityEngine.Quaternion.Euler(0,0,0)의 각도대로 생성됩니다.
캐릭터 생성 위치와 회전 값은 ZepetoPlayers.instance.CreatePlayerWithUserId(WorldService.userId, new SpawnInfo(), true); 함수의 인자인 SpawnInfo()에 따라 생성되게 됩니다.
따라서 캐릭터 생성 함수 호출 전에 SpawnInfo()에 원하는 값을 설정해주는 방법으로 특정 위치에서 생성되게 할 수 있습니다.
맵의 (0,0,0) 위치에는 3D Object > Cube를 미리 배치해 두었습니다.
캐릭터의 생성 위치값을 다음과 같이 변경하면 Cube 위에서 생성됩니다.
화면 중앙의 [▶︎(play)] 버튼을 통해서 캐릭터 생성을 확인해 보세요.
위치 값과 방향 값을 변경하면, 다음과 같이 엎어진 채로 생성되게 할 수도 있습니다.