inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Thử thách khắc nghiệt Khóa 2] Lộ trình 5 tuần dành cho nhà phát triển game mạng (Network Game Developer)

Đồng bộ hóa vật thể bay

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

90

meltingice31

5 câu hỏi đã được viết

0

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

unity 네트워크 game-programming socket-programming

Câu trả lời 2

0

indiegamemaker

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

communityai8509

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

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

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

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

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

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

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

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

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

영상이 안나옵니다. 그냥 빈공간이에요

1

13

3

localhost : 3000 클릭하면 페이지를 로드하지 못함

0

14

2

클로드코드에서 진행할때 계속적인 질문이 뜹니다.

0

13

2

"도커 이미지 생성" 18:59부분에 텍스트 파일로 정리 된거는 어디서 볼수 있나요?

0

15

1

layout group의 종류 3가지 실무 적합활용이 궁금합니다.

0

14

1

aws기출문제 파트 문제 자료가 안보여서 질문드립니다

0

13

2

git 설치

0

23

1

링크 관리 기능 구현 실패

0

24

1

LAN, WAN, Braodcast

0

31

2

문제점

0

32

2

진도율 관련

0

28

1

IocpObject가 없어질 수 있는 이유에 대한 질문입니다.

0

44

2

npm 설치가 잘 안됐습니다. 보안 이슈인 것 같은데, 어떻게 해야 하나요?

0

41

2

수박게임 자료 받았는데 plante05, 06이 없습니다.

0

28

1

VS CODE 설치 시 관리자 권한으로 해야하는지

0

27

1

Git 버젼 상이

0

39

2

코드 줄바꿈

0

46

2

vs code 프로그램 동기화 가능여부

0

45

1

다음 강의로 뭘들어야 하나요??

0

67

2

클로드 회원가입 전인데 perplexity 프로

0

52

2

supabase 설정하기 관련 문의사항이 있습니다.

0

56

2

14강 녹음이 안되어 있습니다

0

41

1

Git 설치 문의

0

53

2

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

0

106

3