inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

발사체 동기화

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

57

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

9

1

컨텐츠 레이어 C++ vs C#

0

12

0

유니티 허브 다운로드

1

21

2

Default Route 실습 관련 질문드립니다.

0

15

1

비쥬얼 스튜디오에서 unity연결이 없습니다.

0

40

2

UserDataManager 클래스 hasSaveError 처리

0

23

2

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

31

2

[문의] 강의 연장 가능할까요?

0

21

2

제공해주신 자료에 스크립트들이 빠져있습니다

0

22

2

플레이어를 왜 ECS로 만드는 건가요?

0

26

1

싱글턴패턴

0

29

2

강의자료 pdf

0

19

1

코드 관련 질문

0

31

2

수강기간 연장 가능하실까요?

0

35

2

섹션7 수업자료 업로드 부탁드립니다.

0

34

2

Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의

0

25

1

네트워크 전체 흐름 복습 질문

1

39

3

맥북으로 RDP 연결 질문

0

33

2

수강 연장 가능하면 요청 드립니다.

0

35

2

5.6버전 Networking Insights 실행안됨 문제에 관하여

0

30

1

UI 기능 관련 질문이 있습니다!

0

47

2

03-01 (16. CharacterController)

0

36

2

침해사고 샘플분석 첫번째 파일 다운로드 불가

0

29

1

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

0

70

3