오브젝트 구분

안녕하세요. 뒤끝 초보라 계속 질문하게 되네요.
예전엔 서버를 포톤엔진을 사용했지만 뒤끝서버를 보고 이전하였습니다.
포톤엔진의 PhotonView.IsMine 처럼 내 플레이어(오브젝트)와 상대 플레이어를 구분할 수 있는 코드가 있었는데

뒤끝서버에는 상대 플레이어나 내 플레이어를 구분하는 코드가 어떤게 있을까요?

++ 매칭이 성사되면 그 플레이어 모두 잠깐 게임이 멈추거나 렉이 심하게 걸리는 현상이 있던데 정상인가요??

안녕하세요 개발자님,
게임을 접속하거나 게임 안에 들어와 데이터를 보낼 경우 응답되는 핸들러 중 SeesionInfo 인자에 유저에 관한 정보가 저장되어 있습니다.

인게임 서버에 접속하여 유저들을 불러오는 OnSessionJoinInServer나 실제 인게임에서 데이터를 주고받을 때 사용하는 OnMatchRelay에서 SesisonInfo 인자를 확인하실 수 있습니다.

해당 인자에는 이번 매치에 배정된 유저의 고유값(ID)와 닉네임, 그리고 해당 세션이 내 플레이어인지 아닌지 확인하는 IsRemote가 있습니다.

위 개발자 문서의 SessionInfo를 참고해주세요.

추가로 문의하신 내용에 대해서는
뒤끝매치의 코드는 비동기 형태로 이루어져 있기에 멈추거나 렉이 심하게 걸릴 경우는 없습니다만 핸들러에 등록된 작업은 유니티의 메인쓰레드에서 이루어집니다.
핸들러에 부하가 심한 코드가 있을 경우 해당 핸들러가 호출되었을 때 말씀하신 현상들이 발생할 수 있습니다.

선생님 혹시 OnMatchRelay에서 인자를 불러오는 예제 하나 주실 수 있으신가요?

다음은 뒤끝매치 예제게임의 코드를 참고 및 간략화한 것입니다.

아래 코드 및 예제게임의 코드를 참고해주시면 이해에 도움이 될 것 같습니다.

public class PlayerInfo()
{
  int x,y;
  int dmg;
 string name;
}

PlayerInfo player1= new PlayerInfo(); 

void Start()
{

  Backend.Match.OnMatchRelay(args) += {
   Debug.Log("다른 유저가 보낸 메세지인가 : " + args.From.IsRemote);
   if(args.From.IsRmote == true)
   {
         Debug.Log("유저 이름 : " + args.From.NickName);
         Debug.Log("유저 세선 아이디 : " + args.From.SessionId);
   }
  var strByte = Encoding.Default.GetString(args.BinaryUserData);
  PlayerInfo p = JsonUtility.FromJson<PlayerInfo>(strByte);
  };

}

public void SendDataToInGame()
{
   var jsonData = JsonUtility.ToJson(player1); // 클래스를 json으로 변환해주는 함수
   var byte = Encoding.UTF8.GetBytes(jsonData); // json을 byte[]로 변환해주는 함수
   Backend.Match.SendDataToInGameRoom(byte);

}
좋아요 1

SendDataToInGameRoom은 언제 실행해야하나요?

모든 유저가 게임방에 접속한 이후 아래와 같은 핸들러가 호출됩니다.
그 이후에 호출해주시면 되겠습니다.

게임 진행 및 핸들러 호출은 뒤끝매치 개발자문서 사이드메뉴의 순서대로 진행되고 있으니 이부분 참고해주시기 바랍니다.

Backend.Match.OnMatchInGameStart += () =>
    // TODO
};