inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

발사체 동기화

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

73

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

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

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

빠져나오기 위해서 System.in을 닫는다는게 무슨 의민가요??

0

12

0

현재까지 업로드 된 강의로만 공부해도 CCNA취득 가능한가요?

0

21

2

supabase 인증페이지로 넘어가지 않습니다

0

36

2

LockFreeStack #2에서 ABA 문제

0

34

1

다운로드 링크 404 에러

0

41

2

claude 설치화면과 코딩내용미 표시 문의

0

50

2

프로덕션 부분 사용 불가

0

55

2

클로드 코드 설치 후 실행이 되지 않습니다

0

44

1

클로드 코드 실행 시 반복적으로 출력되는 메세지가 있습니다

0

54

2

43강 강의내용 질문입니다.

0

48

1

접근지정자

0

52

2

in-app purchasing 버튼의 install 버튼이 비활성화되어있을때 어떻게 해결해야하나요 ?

0

38

2

강의를 듣다보니 궁금한 부분이 있습니다.

0

58

2

RefCounting 강의 질문있습니다.

0

63

2

수강 기간 연장 문의

0

55

2

AI에게 권한 부여하기

0

55

2

유니티 제외 설치한 프로그램들 및 파일 삭제 방법

0

43

1

깃허브에서 콤피유아이 매니저 설치하는게 안됩니다.

0

55

2

(3.3) Claude Code 설치하기 - Window OS

0

54

2

3강 시험환경 설명 및 강의실습에 대한 가이드에 문제풀이 영상이 맞나요?

1

70

3

mac os에서 사용 시 강의와 화면순서가 다르게 나옵니다ㅠㅠ

0

55

2

강의 수강중인데 가이드북을 보고싶습니다

0

43

1

파이프라이닝

1

53

1

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

0

91

3