CREATE YOUR WORLD

멀티플레이

13min
zepeto 멀티플레이는 여러 사용자가 동시에 월드 에 연결하고 플레이할 수 있는 모듈입니다 서버/클라이언트 개발 및 로컬 테스트 환경을 제공합니다 📘 공식 멀티플레이 월드 샘플 github https //github com/naverz/zepeto multiplay example https //github com/naverz/zepeto multiplay example 튜토리얼 멀티플레이 제작하기 docid\ s6aoernolpac9cyqi onr 1단계 설치 왼쪽 상단의 \[프로젝트] 패널에서 \[+] 메뉴를 선택한 후 zepeto → 멀티플레이 서버를 선택하거나 자산 → 생성 → zepeto → 멀티플레이 서버로 이동합니다 world multiplay 패키지는 다음 항목으로 구성되며, 월드가 게시될 때 자동으로 업데이트됩니다 index ts 서버 주요 로직 코드 schemas 서버/클라이언트 통신을 위한 데이터 구조 ❗️ 주의 게임당 하나의 world multiplay 패키지만 생성할 수 있습니다 2단계 설정 아래 이미지에 표시된 \[open world settings]를 클릭하여 월드 설정을 합니다 속성 설명 버전 등록할 파일의 버전을 입력하세요 최대 클라이언트 수 방에 접근할 수 있는 최대 인원 수를 설정합니다 방향 화면의 방향을 선택하세요 초대 비활성화 방 초대 기능을 비활성화합니다 방 목록 비활성화 방 목록을 확인할 수 있는 기능을 비활성화합니다 비공식 방 비활성화 비공식 방을 생성할 수 있는 기능을 비활성화합니다 👍 초대 비활성화 방 초대 기능이 꺼져 있어도 테스트 링크를 통해 초대를 보낼 수 있습니다 3단계 테스트 서버 실행 zepeto 멀티플레이는 제작자가 개발 중 서버/클라이언트를 테스트할 수 있는 로컬 서버 환경을 제공합니다 로컬 서버 작업을 확인하려면 unity 상단 메뉴 → 창 → zepeto → 멀티플레이 서버를 선택하여 서버 상태 창을 엽니다 편집기 화면 중앙의 \[▶︎(재생)] 버튼 옆에 있는 서버 버튼을 클릭합니다 서버 상태 창에서 다음 서버 로그를 볼 수 있습니다 4단계 클라이언트에 연결하기(로컬 서버에 연결하기) zepetoworldmultiplay 구성 요소는 클라이언트 측에서 사용되는 멀티플레이 관리자 클래스입니다 계층 창에서 gameobject를 생성하고 zepetoworldmultiplay 구성 요소를 추가합니다 zepetoworldmultiplay 구성 요소는 멀티플레이 패키지에 자동으로 연결됩니다 편집기 화면 중앙에 있는 \[▶︎(재생)] 버튼을 클릭하여 서버 로그 창에서 클라이언트 연결 로그를 확인하세요 개발 서버는 localhost(127 0 0 1)에서 실행되며, 포트는 프로젝트가 처음 로드될 때 설정됩니다 다중 프로젝트를 통해 연결할 때, 연결 환경을 다음과 같이 설정하세요 📘 다음 가이드를 참조하세요 multiplay ip 주소에 접속하기 docid\ ohe5rzccf7nktldfid ps 👍 월드가 배포된 후, zepeto 서버에서 실행됩니다 5단계 서버 / 클라이언트 통신 기본 예제 서버 로직 구현 world multiplay 패키지의 index ts 파일은 서버의 주요 로직을 담당하는 코드입니다 index ts 파일을 열고, oncreate() 이벤트에서 메시지 유형 echo를 수신한 후 클라이언트에 전달되는 로직을 추가하세요 📘 다음 가이드를 참조하세요 \[zepeto multiplay(서버) api] import { sandbox, sandboxoptions, sandboxplayer } from 'zepeto multiplay'; import { player } from 'zepeto multiplay schema'; export default class extends sandbox { oncreate(options sandboxoptions) { this onmessage("echo", (client, message) => { console log(`echo onmessage from ${client sessionid}, > ${message}`); // 현재 클라이언트에게 전송 client send("echo", "보내는 사람에게 에코 " + message); // 모든 연결된 클라이언트에게 방송 this broadcast("echo", "모두에게 에코 " + message); }); } onjoin(client sandboxplayer) { const player = new player(); player sessionid = client sessionid; player userid = client userid; const players = this state players; players set(client sessionid, player); console log('onjoin!!!!'); } onleave(client sandboxplayer, consented? boolean) { } } 클라이언트 로직 구현 서버 이벤트를 전송/수신하는 데 사용되는 zepetoworldmultiplay gameobject에 zepeto 스크립트를 추가하십시오 multiplaysample ts import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetoworldmultiplay } from 'zepeto world'; import { room } from 'zepeto multiplay'; export default class multiplaysample extends zepetoscriptbehaviour { private multiplay zepetoworldmultiplay; start() { this multiplay = this gameobject getcomponent\<zepetoworldmultiplay>(); this multiplay roomjoined += (room room) => { console log(`roomcreated, my session id is ${room sessionid}`); // 서버에 메시지 전송 room send("echo", "안녕하세요 zepeto 멀티플레이"); // 서버 메시지 리스너 추가 room addmessagehandler("echo", (message) => { // 서버 메시지 출력 console log(message); }); }; } } 📘 다음 가이드를 참조하십시오 multiplay room message docid\ yt8t8xpljhscnor5y4r7n 6단계 출력 결과 테스트 편집기 화면 중앙의 \[▶︎(재생)]을 클릭하여 서버/클라이언트를 실행하십시오 아래와 같이 '에코' 유형 메시지의 예를 볼 수 있어야 합니다 ① 클라이언트 메시지가 서버에 수신될 때의 출력 로그입니다 ② 클라이언트에서 서버로부터 수신된 메시지의 로그입니다 서버 코드 사용 시 주의사항 ❗️ 주의 \[서버 코드 내 변수 사용] 변수는 서버 코드 내에서도 선언할 수 있습니다 그러나 서버에서 사용할 수 있는 캐시 메모리는 현재 512kb로 제한되어 있습니다 (이것은 나중에 변경될 수 있습니다 ) 512kb를 초과하면 방이 숨겨질 수 있으므로 이를 염두에 두고 개발해 주시기 바랍니다 \[서버 코드 내 루프 사용] 서버 코드에서 루프 시간 제한은 2초(2000ms)로 설정되어 있습니다 블로킹 코드나 장시간 실행되는 루프를 사용하면 루프 시간 제한으로 인해 프로그램이 올바르게 실행되지 않을 수 있으므로 개발 시 이를 고려해 주시기 바랍니다