작성
·
83
0
안녕하세요. 영상을 보면서 언리얼을 배우고있는 학생입니다.
선생님께서 알려주신대로 제가 따로 만든 프로젝트에 점목을 시키고있는데 클라이언트 추가 생성시 GameMode를 상속받은 클래스에서 Login()함수에 NewPlayer의 플레이어 컨트롤러가
NULL로 들어와 크래쉬가 나 에디터가 꺼지는 현상이 일어 나고있습니다.. 어떻게 해결이 가능할까요???
답변 2
0
아래처럼 상위 클래스의 Login 함수를 호출한 후 받은 플레이어 컨트롤러가 NULL값으로 들어온다고 이해하면 될까요?
APlayerController* NewPlayerController = Super::Login(NewPlayer, InRemoteRole, Portal, Options, UniqueId, ErrorMessage);
Player와 PlayerController는 다른 객체입니다.
Standalone과 Server의 차이는 버전 때문인 것으로 보여집니다. ( 5.1 이후 버전에서 시스템에서 세팅하는 타이밍이 조금 달라졌습니다. )
GetController() 함수가 nullptr이 나왔다는 것은 아직 빙의가 안된 타이밍에 호출한 것으로 보여지는데, 언제 호출하는지 코드를 볼 수 있을까요?
네 지금 두 명의 캐릭터가 있는데 ( 서버와 클라 ) , 서버 입장에서는 모든 클라의 컨트롤러를 소유하고 있지만, 클라 입장에서는 서버 컴퓨터의 Player는 자기 소유가 아닌 상황입니다.
로그를 보면 첫 번째 캐릭터는 자기가 소유하는 캐릭터라 GetController가 함수 결과가 반환되는데, 서버의 캐릭터로 추정되는 두 번째 캐릭터는 프록시 형태로 복제된 상황이다보니 클라입장에서는 컨트롤러를 알 수 없어 nullptr이 나올 수 밖에 없는 상황입니다.
그렇기에 IsLocallyControlled함수를 사용해 내가 조종할 수 있는 캐릭터인지 먼저 확인을 하고 로직을 진행하셔야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
박은혁님이 겪고 있는 문제는 언리얼 엔진에서 멀티플레이어 게임을 개발할 때 흔히 발생할 수 있는 문제 중 하나입니다. 클라이언트 생성 시 크래쉬가 나는 현상은 여러 가지 원인에 의해 발생할 수 있습니다. 특히, Login()
함수에서 NewPlayer
의 플레이어 컨트롤러가 NULL
로 들어오는 경우는 초기화 문제일 가능성이 큽니다.
이 문제를 해결하기 위해 몇 가지 해결 방법을 제안드립니다:
플레이어 컨트롤러 초기화 확인: Login()
함수가 호출되기 전에 NewPlayer
가 제대로 초기화되었는지 확인하세요. GameMode의 기본 설정이나 플레이어 컨트롤러 클래스가 잘못 설정되어 있을 수 있습니다.
디버깅: Login()
함수가 호출되기 직전에 디버그 로그를 추가하여 NewPlayer
가 올바르게 생성되고 있는지 확인하는 것도 중요합니다. 디버깅을 통해 어떤 시점에서 NULL
이 전달되는지 추적할 수 있습니다.
프로젝트 설정 확인: 프로젝트 설정에서 GameMode와 관련된 설정이 올바른지 확인하세요. 특히, ‘플레이어 컨트롤러 클래스’가 잘못 설정되어 있으면 예상치 못한 센서리오에서 오류가 발생할 수 있습니다.
최신 엔진 사용 환경: 사용하고 계신 언리얼 엔진의 버전이 강의와 동일한지 혹은 호환 가능한 버전인지 확인해 보세요. 엔진의 버전 차이가 코드 동작 방식에 영향을 미칠 수 있습니다.
이 외에도 아래의 유사한 질문과 답변을 참고하여 문제 해결의 실마리를 찾을 수 있을 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
디버깅을 통해 플레이어컨트롤러를 생성하는것은 확인을 했습니다. 정확히는 제가 파라곤 캐릭터로 테스트를 하고있는데 캐릭터 클래스에서
APlayerController* PlayerController = CastChecked<APlayerController>(GetController());
GetController() 함수를 통해 컨트롤러를 가지고 오는데 클라이언트를 하나 생성시 저 부분에서 nullptr이 떨어져 크래쉬가 나고 있었습니다.
또한,
영상과 다르게 처음 Standalone이 아닌 서버로 뜨고 있는 상황이 있습니다.. 버전이 다른데 버전의 차이때문일까요??