고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.
커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.
문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 : 버전: SDK-5.11.1
- 프로젝트명 :
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
안녕하세요. 이번에 뒤끝 매치를 통해서 멀티게임을 구현해보려는 학생입니다.
다름이 아니라 이번 뒤끝매치 튜토리얼을 기반으로 제작하고 있습니다.
현재 뒤끝 튜토리얼의 PlayerDamegedMessage 메세지를 기반으로 버튼을 클릭한다면 랜덤으로 다른 플레이어의 피를 100 제거하여 바로 사망할 수 있도록 변경하였습니다.
하지만 클라이언트에서는 남은 플레이어수와 게임오브젝트가 제거가 잘 되지만 비클라이언트에서 실행하게 된다면 클라이언트만 동기화되고 나머지 비클라이언트에서는 데이터가 동기화 되지 않습니다.
이때 데이터 동기화는 남은 플레이어수 및 게임오브젝트 SetActive(false)만 연동이 안되고 게임의 결과나 매칭은 잘 됩니다.
따라서 SendDataToInGame를 잘못 사용하여 문제가 생겼나해서 확인해 보았지만 이 부분의 문제라고는 생각되지 않더군요…
따라서 다른 문제가 있는지
OnMatchRelay가 오지 않는 상황인지 여부
데이터 파싱에서 에러가 발생하는 상환인지 여부
class 형식이 뒤끝 매치에서 제공하는 것처럼 3~5개만이 존재하는 여부
이렇게 3부분으로 확인해 보았지만 큰 문제는 없어 보입니다…
기존의 매치 튜토리얼에서 바꾼 코드들도 작성해 드리겠습니다.
블릿 클래스를 참고하여 제작
public void killPlayer()
{
int k = Random.Range(0, 8);
if(TTPlayers[k])
{
Protocol.PlayerDamegedMessage message =
new Protocol.PlayerDamegedMessage(TTPlayers[k].GetIndex());
BackEndMatchManager.GetInstance().SendDataToInGame<Protocol.PlayerDamegedMessage>(message);
}
}
월드 클래스 부분
private void PlayerDieEvent(SessionId index)
{
alivePlayer -= 1;
players[index].gameObject.SetActive(false);
InGameUiManager.GetInstance().SetScoreBoard(alivePlayer);
gameRecord.Push(index);
Debug.Log(string.Format("Player Die : " + players[index].GetNickName()));
// 호스트가 아니면 바로 리턴
if (!BackEndMatchManager.GetInstance().IsHost())
{
return;
}
// 1명 이하로 플레이어가 남으면 바로 종료 체크
if (alivePlayer <= 1)
{
SendGameEndOrder();
}
}
월드 클래스 부분
case Protocol.Type.PlayerDamaged:
PlayerDamegedMessage damegedMessage = DataParser.ReadJsonData<PlayerDamegedMessage>(args.BinaryUserData);
ProcessPlayerData(damegedMessage);
break;
월드 클래스 부분
private void ProcessPlayerData(PlayerDamegedMessage data)
{
players[data.playerSession].Damaged();
//EffectManager.instance.EnableEffect(data.hit_x, data.hit_y, data.hit_z);
}
프로토콜 클래스 부분
public class PlayerDamegedMessage : Message
{
public SessionId playerSession;
public PlayerDamegedMessage(SessionId session) : base(Type.PlayerDamaged)
{
this.playerSession = session;
}
}
그리고 가능하다면 뒤끝 매치 튜토리얼에서 데이터 동기화를 어떻게 진행하고 있는지 간단하게 라도 알려주시면 감사하겠습니다.