고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.
커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.
문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 :
- 프로젝트명 :
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
안녕하세요
1:1매칭을 제작중이고 뒤끝 샘플 프로젝트를 베이스로 작업중입니다 (구조는 거의 그대로 했습니다)
문제는 매칭 후 이동 동기화 과정에서 다음과 같은 문제가 있습니다
호스트 이동시 → 비호스트 기기에서 호스트의 이동 성공
비호스트 이동시 → 호스트 기기에서 비호스트의 이동 실패
로그를 찍이보며 확인 중인데,
제일 의심 가는 부분이 월드매니저에서 플레이어 초기화 셋팅 부분에서
저는 Player 와 Enemy 프리팹을 다르게 가져와야 해서 다음과 같이 바꿨습니다
foreach (var sessionId in gamers)
{
// 1. 호스트인 경우
if (BackEndMatchManager.GetInstance().IsHost())
{
// A. Player 캐릭터
if (BackEndMatchManager.GetInstance().IsMySessionId(sessionId))
{
int index = 0;
GameObject player = Instantiate(playerPrefeb, new Vector3(statringPoints[index].x, statringPoints[index].y, statringPoints[index].z), Quaternion.identity, playerPool.transform);
players.Add(sessionId, player.GetComponent<PlayerController>());
myPlayerIndex = sessionId;
players[sessionId].Initialize(true, myPlayerIndex, BackEndMatchManager.GetInstance().GetNickNameBySessionId(sessionId));
players[sessionId]._isWorldManagerReceiveHost = true;
}
// B. Enemy 캐릭터
else
{
int index = 1;
GameObject player = Instantiate(EnemyPrefeb, new Vector3(statringPoints[index].x, statringPoints[index].y, statringPoints[index].z), Quaternion.identity, playerPool.transform);
players.Add(sessionId, player.GetComponent<PlayerController>());
players[sessionId].Initialize(false, sessionId, BackEndMatchManager.GetInstance().GetNickNameBySessionId(sessionId));
players[sessionId]._isWorldManagerReceiveHost = false;
}
}
// 2. 호스트 X
else
{
// A. Enemy 캐릭터
if (BackEndMatchManager.GetInstance().IsMySessionId(sessionId))
{
int index = 1;
GameObject player = Instantiate(EnemyPrefeb, new Vector3(statringPoints[index].x, statringPoints[index].y, statringPoints[index].z), Quaternion.identity, playerPool.transform);
players.Add(sessionId, player.GetComponent<PlayerController>());
myPlayerIndex = sessionId;
players[sessionId].Initialize(true, myPlayerIndex, BackEndMatchManager.GetInstance().GetNickNameBySessionId(sessionId));
players[sessionId]._isWorldManagerReceiveHost = true;
}
// B. Player 캐릭터
else
{
int index = 0;
GameObject player = Instantiate(playerPrefeb, new Vector3(statringPoints[index].x, statringPoints[index].y, statringPoints[index].z), Quaternion.identity, playerPool.transform);
players.Add(sessionId, player.GetComponent<PlayerController>());
players[sessionId].Initialize(false, sessionId, BackEndMatchManager.GetInstance().GetNickNameBySessionId(sessionId));
players[sessionId]._isWorldManagerReceiveHost = false;
}
}
이렇게 작업했고, Player 와 Enemy 프리팹이 양 기기에서 동일한 위치에 잘 배치는 됩니다만
말씀드린대로 비호스트(Enemy) 캐릭터의 이동시 호스트 기기에서 비호스트 캐릭터가 움직이지를 않습니다
- 어떤걸 체크해봐야 할까요?
- BackEndMatchManager.GetInstance().IsMySessionId <-해당 id 는 매칭 당 1개씩인가요?
- if (BackEndMatchManager.GetInstance().IsMySessionId(sessionId)) ← 이 조건을 체크하는 이유가 궁금합니다
추가로
비호스트 기기에서 Enemy 캐릭터 이동시
BackEndMatchManager.GetInstance().SendDataToInGame(msg);
해당 메세지 전송은 정상적으로 되는걸로 확인됩니다만
비호스트 기기의 월드매니저에서
if (BackEndMatchManager.GetInstance().IsHost() != true && args.From.SessionId == myPlayerIndex)
{
return;
}
여기서 걸려서 진행되지가 않습니다