inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[빡센 챌린지 2기] 네트워크 게임 개발자 5주 트랙

발사체 동기화

발사체 동기화 부분 질문입니다!

70

meltingice31

작성한 질문수 5

0

1번 플레이어에서 포탄을 쏘면 2번 플레이어에서만 보이고 반대도 마찬가지인데 맞게 잘 따라한건지 궁금합니다

unity 네트워크 game-programming socket-programming

답변 2

0

이재현

1번 플레이어와 2번 플레이어 동시에 보여야 정상입니다.

먼저 서버쪽 UDPGameServer.cs 의 HandlePlayerFire 부분과 BroadcastPlayerFire 메소드를 다시 확인해주세요.

    private void HandlePlayerFire(NetworkPacket packet, IPEndPoint clientEP)
    {
        // 서버에서 해당 플레이어 정보 조회
        if (_players.TryGetValue(packet.PlayerId, out var player))
        {
            // 클라이언트 주소 검증
            if (player.EndPoint.Equals(clientEP))
            {
                Console.WriteLine($"[서버] 플레이어 {player.PlayerId} 발사 이벤트 처리 완료");
                
                // 발사 이벤트를 다른 플레이어들에게 전송
                BroadcastPlayerFire(packet, clientEP);
            }
            else
            {
                Console.WriteLine($"[서버] 플레이어 {player.PlayerId} 발사 이벤트 처리 실패 - 클라이언트 EP 불일치");
            }
        }
    }

 

그리고 유니티 TankController.cs 에서도 다음 코드를 확인해주세요.

    #region 이벤트 핸들러
    private async void OnFire(InputAction.CallbackContext ctx)
    { 
        Debug.Log("Fire");
        if (!ntv.isMine) return;
        
        await NetworkManager.Instance.SendFireAsync(ntv.playerId, firePos.position, Vector3.up * firePos.rotation.eulerAngles.y);
        // FireBullet();
    }

    private void OnMove(InputAction.CallbackContext ctx)
    {
        moveInput = ctx.ReadValue<Vector2>();
    }
    #endregion

0

meltingice31

해결했습니다. 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. meltingice31님.

포탄 발사와 같은 네트워크 동기화 문제는 매우 일반적인 질문이며, 구현 과정에서 서로 다른 클라이언트에서 발생하는 시각적 문제를 해결하는 것이 중요합니다. 여러분이 언급한 문제는 흔히 발생하는 네트워크 동기화 문제로 볼 수 있습니다.

포탄이 한쪽 플레이어에게만 보이는 상황은 두 클라이언트 간의 동기화가 올바르게 설정되지 않았기 때문일 수 있습니다. 일반적으로, 네트워크 게임에서 발사된 포탄이나 움직임의 동기화는 모든 관련 클라이언트가 동일한 정보를 받아야 하기 때문에, 다음의 팁을 참고할 수 있습니다:

  1. 포탄 객체의 네트워크 소유권 확인: 각각의 플레이어가 자신의 포탄에 대한 네트워크 소유권을 가지고 있는지 확인하세요. 이 경우 포탄의 소유권을 전환하거나 공유하여 모든 플레이어에게 시각화될 수 있도록 합니다.

  2. RPC(Remote Procedure Call) 또는 RPC 방식의 네트워크 호출: 포탄 발사 시 이벤트를 모든 클라이언트에 전송하는 RPC 호출이 올바르게 구현되어 있는지 확인하세요.

  3. 포탄 이동 및 상태 업데이트: 포탄이 발사된 이후에도 지속적으로 모든 클라이언트에서 이동 및 상태가 업데이트되고 있는지 점검해 보세요.

  4. 충돌 관리: 포탄이 다른 객체에 충돌하는 경우의 로직이 양쪽 클라이언트에서 동일하게 적용되고 있는지도 확인하세요.

이와 관련된 유사한 해결 방법을 찾기 위해 다음 링크를 확인해 보세요:
- 포톤 네트워크에서 발사 및 충돌 동기화 문제 해결 방법

저는 질문자님의 이해를 돕고자 기존의 유사한 질문의 답변을 참고하여 해결책을 제시해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

파일로 웹에 드레그하여 결과가 나타나지 않음

0

8

2

Claude Code Git 설치순서2

0

17

3

Claude Code , Git 설치순서

0

10

2

Pivot을 마우스로 클릭하고 드래그해도 움직이 않아서 혹시 아시는 부분이 있나 해서 문의 남깁니다.

0

9

0

연장 신청 간곡히 부탁드립니다.

0

17

2

이 강의를 다 들으면 어떤 강의를 들어야 하나요?

0

21

2

클로드가 제대로 실행이 안됩니다.

0

35

3

문의 드립니다.

0

25

2

안녕하세요 선생님 혹시 수강기한 연장도 가능한가요?

0

18

2

클로드 코드설치가 안됩니다.

0

40

3

시험 문제 확인 부탁드립니다.

0

20

1

수강연장 가능할까요 ?

0

33

2

수강연장부탁드립니다!

0

28

2

카메라가 많아지면 렌더링 비용이 커지나요?

0

28

1

3:56에 폰트 불러온 과정이 궁금합니다 ㅠㅠ

0

38

3

git 커밋 관련 문의

0

37

1

Git, claude 설치

0

39

1

http 관련하여 질문드립니다.

0

24

2

Spider와 Monster 구현 방식을 구분한 이유

1

24

1

Sprute Sheet에 대해서.

0

30

1

4. Container 빌드 & 저장하기 - 자료 관련

1

34

2

IO활용-회원관리예제1 샘플코드 문의

0

22

1

SSM접속에 대해

0

39

2

슬랙 초대장을 받지 못하였습니다 ㅠ

0

84

3