inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해

2강 게임 모드와 로그인

클라이언트 새로 생성시 크래쉬 나는 문제..

해결된 질문

278

작성자 없음

작성한 질문수 0

0

안녕하세요. 영상을 보면서 언리얼을 배우고있는 학생입니다.
선생님께서 알려주신대로 제가 따로 만든 프로젝트에 점목을 시키고있는데 클라이언트 추가 생성시 GameMode를 상속받은 클래스에서 Login()함수에 NewPlayer의 플레이어 컨트롤러가
NULL로 들어와 크래쉬가 나 에디터가 꺼지는 현상이 일어 나고있습니다.. 어떻게 해결이 가능할까요???

unreal-engine 네트워크 언리얼-c++

답변 2

0

이득우

아래처럼 상위 클래스의 Login 함수를 호출한 후 받은 플레이어 컨트롤러가 NULL값으로 들어온다고 이해하면 될까요?

APlayerController* NewPlayerController = Super::Login(NewPlayer, InRemoteRole, Portal, Options, UniqueId, ErrorMessage);

Player와 PlayerController는 다른 객체입니다.

 

0

박은혁

디버깅을 통해 플레이어컨트롤러를 생성하는것은 확인을 했습니다. 정확히는 제가 파라곤 캐릭터로 테스트를 하고있는데 캐릭터 클래스에서
APlayerController* PlayerController = CastChecked<APlayerController>(GetController());
GetController() 함수를 통해 컨트롤러를 가지고 오는데 클라이언트를 하나 생성시 저 부분에서 nullptr이 떨어져 크래쉬가 나고 있었습니다.
또한,

image.png

영상과 다르게 처음 Standalone이 아닌 서버로 뜨고 있는 상황이 있습니다.. 버전이 다른데 버전의 차이때문일까요??

0

이득우

Standalone과 Server의 차이는 버전 때문인 것으로 보여집니다. ( 5.1 이후 버전에서 시스템에서 세팅하는 타이밍이 조금 달라졌습니다. )
GetController() 함수가 nullptr이 나왔다는 것은 아직 빙의가 안된 타이밍에 호출한 것으로 보여지는데, 언제 호출하는지 코드를 볼 수 있을까요?

0

박은혁

ACharacter()를 상속받은 캐릭터 클래스의 BeginPlay()함수에서 호출을 하고있습니다.

0

이득우

HasAuthority 함수를 사용해 서버와 클라이언트를 비교해 확인해보시겠어요?

0

박은혁

image.png

처음 한번 에디터 서버 실행시에는 GetController()를 통해 컨트롤러가 잘들어옵니다.
다음 클라이언트를 하나 추가시

image.png

이렇게 들어오고 있는 상황입니다.

0

이득우

네 지금 두 명의 캐릭터가 있는데 ( 서버와 클라 ) , 서버 입장에서는 모든 클라의 컨트롤러를 소유하고 있지만, 클라 입장에서는 서버 컴퓨터의 Player는 자기 소유가 아닌 상황입니다.

로그를 보면 첫 번째 캐릭터는 자기가 소유하는 캐릭터라 GetController가 함수 결과가 반환되는데, 서버의 캐릭터로 추정되는 두 번째 캐릭터는 프록시 형태로 복제된 상황이다보니 클라입장에서는 컨트롤러를 알 수 없어 nullptr이 나올 수 밖에 없는 상황입니다.

그렇기에 IsLocallyControlled함수를 사용해 내가 조종할 수 있는 캐릭터인지 먼저 확인을 하고 로직을 진행하셔야 합니다.

0

인프런 AI 인턴

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

박은혁님이 겪고 있는 문제는 언리얼 엔진에서 멀티플레이어 게임을 개발할 때 흔히 발생할 수 있는 문제 중 하나입니다. 클라이언트 생성 시 크래쉬가 나는 현상은 여러 가지 원인에 의해 발생할 수 있습니다. 특히, Login() 함수에서 NewPlayer의 플레이어 컨트롤러가 NULL로 들어오는 경우는 초기화 문제일 가능성이 큽니다.

이 문제를 해결하기 위해 몇 가지 해결 방법을 제안드립니다:

  1. 플레이어 컨트롤러 초기화 확인: Login() 함수가 호출되기 전에 NewPlayer가 제대로 초기화되었는지 확인하세요. GameMode의 기본 설정이나 플레이어 컨트롤러 클래스가 잘못 설정되어 있을 수 있습니다.

  2. 디버깅: Login() 함수가 호출되기 직전에 디버그 로그를 추가하여 NewPlayer가 올바르게 생성되고 있는지 확인하는 것도 중요합니다. 디버깅을 통해 어떤 시점에서 NULL이 전달되는지 추적할 수 있습니다.

  3. 프로젝트 설정 확인: 프로젝트 설정에서 GameMode와 관련된 설정이 올바른지 확인하세요. 특히, ‘플레이어 컨트롤러 클래스’가 잘못 설정되어 있으면 예상치 못한 센서리오에서 오류가 발생할 수 있습니다.

  4. 최신 엔진 사용 환경: 사용하고 계신 언리얼 엔진의 버전이 강의와 동일한지 혹은 호환 가능한 버전인지 확인해 보세요. 엔진의 버전 차이가 코드 동작 방식에 영향을 미칠 수 있습니다.

이 외에도 아래의 유사한 질문과 답변을 참고하여 문제 해결의 실마리를 찾을 수 있을 것입니다:

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

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

0

29

1

8강 중간, 분수대의 SetOwner 에 대해 궁금합니다.

0

77

2

플레이어(Actor) 로 (리슨)서버에서 생성 되나요?

0

99

2

2강) HandleBeginPlay 의 역활이 궁금합니다.

-1

72

2

3강 중간, 모드 로그로 찍을 시 스탠드얼론이 안찍힙니다.

1

76

2

CompressedFlag 질문

0

58

2

10강까지 머리 위 체력바가 표시가 안됩니다.

0

109

3

10강까지 머리 위 체력바가 표시가 안됩니다.

0

95

2

16:44 부분에서 질문이 있습니다.

0

104

2

12:50 NetMulticast RPC 커넥션 관려하여 질문이 있습니다.

0

121

2

github 3-5 파트 프로젝트에서 컴파일 에러가 발생합니다.

0

116

3

언리얼 인사이트 5.6버전 networking insights 가 뜨지 않습니다.

0

164

3

Insight 사용이 안되어서 문의 드립니다!

0

129

2

하위 레벨...?? High Level 말씀하신거죠..??

0

146

1

CompressedFlags를 이용한 InputThrottle, InputSteering 전달 방법 질문

0

190

1

조건식 프로퍼티 리플리케이션 질문

0

144

2

ArenaBattle에 Log추가하는 곳에 에러가 나타나 질문 드립니다.

0

160

2

7강에서 DORM_Initial 안됨

0

128

3

안녕하세요 강의 내용 정리에 관련해서 질문있어요

0

131

2

캐릭터 클래스의 mesh 관련

0

132

2

3파트 6강 분수대 로테이트에 문제가 생겼습니다.

0

131

3

클라이언트의 오너십 설정에 대해서 궁금합니다.

0

201

3

프로퍼티 리플리케이트 동기화 보장 개념.

0

225

2

결국엔 액터 기본함수들은 어디든 똑같이 일단 실행되는건가요?

0

92

2