Здравствуйте.
Имеется:
MyGamemode, в котором установлены по умолчанию Pawn и PlayerController в примерно таком виде:
#include “MyPawn.h”
#include “MyController.h”
DefaultPlayerController = AMyController::StaticClass();
DefaultPawn = AMyPawn::StaticClass();
Мой Controller имеет в себе метод
public:
bool bCursorStatus;
void AMyController::UpdateCursorStatus(bool bNewCursorStatus, EMouseCursor::Type NewCursor);
Где мы, в зависимости от значения bNewCursorStatus показываем/скрываем курсор.
Имеется некий Pawn, где в:
.h file:
#include “MyController.h”
...
AMyController * GameController;
...
public:
void CursorManagment();
.CPP file:
void AMyPawn::CursorManagment() {
if(GameController->bCursorStatus) {
GameController->UpdateCursorStatus(false, EMouseCursor::Hand);
}
else {
GameController->UpdateCursorStatus(true, EMouseCursor::Hand);
}
Так же пробовал в данном методе просто устанавливать:
GameController->bMouseShowCursor = false;
CursorManagment() вызывается по нажатию клавиши Left Ctrl.
Но редактор благополучно выпиливается (крашится) сразу после нажатия Ctrl.
В коде ошибок нет (сейчас пишу с телефона, мог переврать названия аргументов/методов), компилируется без ошибок.
Крашится именно при попытке изменить видимость курсора и пр. его атрибуты в теле данного метода обоими способами.
Хотелось бы узнать причину и решение данной проблемы (скрытие/показ курсора по нажатию клавиши из C++).
Для обработки нажатия использую BindAction у PlayerInputComponent с IE_Released, клавиша выставлена в Project Settings в Action Mapping.
В то же время, если не изменять в теле этого метода параметры курсора, а, к примеру, выводить что-то через GEngine->AddOnScreenDebugMessage(), то все работает.