해당 글은
ZEPETO MultiPlay Guide - 월드 로직 작성하기 2 유튜브 영상을 정리한 내용 입니다.
동기화 진행 순서
Client는 자신의 위치 정보를 Server로 전송하고
Server는 Client들에게 전송받은 위치 정보를 State에 반영
Client는 onStateChange로 변경된 다른 Client 위치를 가져와 동기화를 진행
내 위치 전송하기
클라이언트 - 코루틴 SendMessageLoop
정기적으로 클라이언트의 위치를 전송하기 위해 코루틴 함수 사용
//Start 함수내에서 코루틴을 실행하도록 StartCoroutine 작성
//SendMessageLoop 인자 값 0.1 -> 전송 간격
this.StartCoroutine(this.SendMessageLoop(0.1));
private * SendMessageLoop(tick: number){
while(true){
yield new UnityEngine.WaitForSeconds(tick);
if(this.room != null && this.room.isConnected){
const hasPlayer = ZepetoPlayers.instance.HasPlayer(this.room.SessionId);
if(hasPlayer){
const myPlayer = ZepetoPlayers.instance.GetPlyer(this.room.SessionId);
//내 위치 전송하기
if(myPlayer.character.CurrentState != CharacterState.Idle){
this.SendTransform(myPlayer.character.transform);
}
}
}
}
}
private SendTransform(transform: UnityEngine.Transform){
//transform 전송 목적
const data = new RoomData();
//Position값을 넣어줄 RoomData 객체 생성
const pos = new RoomData();
pos.Add("x", transform.localPosition.x);
pos.Add("y", transform.localPosition.y);
pos.Add("z", transform.localPosition.z);
data.Add("position", pos.GetObject());
const rot = new RoomData();
rot.Add("x", transform.localEulerAngles.x);
rot.Add("y", transform.localEulerAngles.y);
rot.Add("z", transform.localEulerAngles.z);
//인벤토리 설정 정보 등 도 설정 가능
this.room.Send("onChangedTransform", data.GetObject());
}
Room 동기화 - index.ts의 onCreate 함수
onCreate(options: SandboxOptions){
this.onMessage("onChangedTransform", (client, message) => {
//transform이 변경된 플레이어 불러오기
const player = this.state.players.get(client.sessionId);
const transform = new Transform();
transform.position = new Vector3();
transform.position.x = message.position.x;
transform.position.y = message.position.y;
transform.position.z = message.position.z;
transform.rotation = new Vector3();
transfrom.rotation.x = message.rotation.x;
transform.rotation.y = message.rotation.y;
transform.rotation.z = message.rotation.z;
//완성된 transform을 player의 transform에 저장
player.transform = transform;
});
}
[Unity] ZEPETO MultiPlay Guide - 월드 로직 작성하기 1 (0) | 2022.06.21 |
---|---|
[Unity] ZEPETO MultiPlay Guide - 멀티플레이 설정하기 (0) | 2022.06.20 |