뒤끝예제 게임 중 호스트가 아닌 경우 공격 관련 질문드립니다.

안녕하세요. 올려주신 뒤끝매치 예제 게임보고 분석중에 궁금한 부분 질문드립니다.

제가 호스트가 아닌 경우(서브인 경우) 호스트를 공격해서 성공했을 때 호스트의 체력이 깍이는 내용이 어디있나요?
호스트인 경우는 bullet 스크립트에서 플레이어에게 총알이 맞은 경우 PlayerDamagedMessage 로 체력이 깍이는데,
호스트만 해당 내용이 실행되기 때문에 반대로 내가 서브인 경우의 진행 순서가 궁금합니다.

안녕하세요 개발자님

호스트와 일반 유저 모두 WorldManager.cs의 OnReceive → ProcessPlayerData 함수에서 서버에서 온 메세지의 의해 체력이 깎입니다.

호스트의 경우 Bullet.cs 스크립트에서 총알이 캐릭터와 충돌하였을 때 서버로 어떤 유저가 어디서 총알을 맞았는지 정보를 전송합니다.

두 클라이언트에서 정상적으로 동일한 메세지(플레이어 움직임, 총알의 발사 각도등)가 수신되고 있다면 클라이언트에서는 어느 플레이어가 총알에 맞았는지, 플레이어들이 어디에 위치해있는지 등의 동일한 상황이 발생하고 있을 것입니다.

그러므로 모든 플레이어가 동일한 상황이므로, 그중 대표격인 호스트만이 자신의 클라이언트에서 발생하는 일들을 송신하고, 호스트와 서브 클라이언트들은 서버에서 온 정보를 자신의 로컬에 대입합니다.

호스트는 아래의 함수에서 총알을 맞았다는 메세지를 송신합니다.(Bullet.cs)

Protocol.PlayerDamegedMessage message =
                    new Protocol.PlayerDamegedMessage(tmp.GetIndex(), this.transform.position.x, this.transform.position.y, this.transform.position.z);

BackEndMatchManager.GetInstance().SendDataToInGame<Protocol.PlayerDamegedMessage>(message);

호스트를 포함한 클라이언트들은 서버의 메세지를 받아 적용합니다.
아래는 서버에서 온 데이터에 의해 데미지가 깎이는 함수입니다.(WorldManager.cs)


    public void OnRecieve(MatchRelayEventArgs args)
    {
      // 중략
        switch (msg.type)
        {
                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);
    }

좋아요 1

한번에 이해됐습니다! 감사합니다!

좋아요 1