Я не особо разбираюсь в программировании на C ++, и мне нужна помощь с внедрением Steam Input в мою игру Unreal Engine 3 (да, это 3, а не 4). У меня есть соглашения о неразглашении как с Epic (для Unreal 3), так и с Valve (для Steamworks), поэтому я не думаю, что смогу скопировать какой-либо их код, но я сделаю все возможное, чтобы описать, что продолжается. И если вы знаете, где я могу задать эти вопросы получше, пожалуйста, дайте мне знать. И если вы считаете, что я нарушаю соглашение о неразглашении, сообщите мне и об этом, чтобы я мог удалить оскорбительные части.
У меня есть игра UE3, которая работает с мышью и клавиатурой. Steam Input, который является частью Steamworks SDK, позволяет получать данные с любого контроллера. В основном, ваш контроллер, ваши действия (например, «стрелять» или «идти вперед») и наборы действий (схемы управления, которые могут меняться в зависимости от состояния игры, например «в меню», «ходьба» или «вождение»). всем назначаются уникальные дескрипторы UINT64. Я нахожусь на стадии, когда я использую предоставленные функции для назначения дескрипторов, и это приводит к сбою моей игры.
У меня есть класс, содержащий эти переменные ...
// typedef uint64 InputActionSetHandle_t;
InputActionSetHandle_t IsometricSetHandle;
InputActionSetHandle_t WorldMapSetHandle;
InputActionSetHandle_t SquadMenuSetHandle;
InputActionSetHandle_t BattleSetupSetHandle;
InputActionSetHandle_t InBattleSetHandle;
InputActionSetHandle_t MenuSetHandle;
Я создаю объект, а затем пытаюсь установить его переменные, вызывая эту функцию.
void URPGTacSteamInput::SetActionSetHandles()
{
IsometricSetHandle = SteamInput()->GetActionSetHandle( "Isometric" );
WorldMapSetHandle = SteamInput()->GetActionSetHandle( "WorldMap" );
SquadMenuSetHandle = SteamInput()->GetActionSetHandle( "SquadMenu" );
BattleSetupSetHandle = SteamInput()->GetActionSetHandle( "BattleSetup" );
InBattleSetHandle = SteamInput()->GetActionSetHandle( "InBattle" );
MenuSetHandle = SteamInput()->GetActionSetHandle( "Menu" );
}
Функция завершается, но позже игра вылетает с ошибкой «Необработанное исключение ... Местоположение чтения нарушения доступа ...» Местоположение стека вызовов - FArchiveRealtimeGC :: PerformReachabilityAnalysis (), который, как я понимаю, является частью системы сборки мусора Unreal 3.
Я не знаю, как решить эту проблему, и я просто пробовал разные вещи. Я зарегистрировал назначенные дескрипторы и попытался установить эти дескрипторы вручную:
void URPGTacSteamInput::SetActionSetHandles()
{
IsometricSetHandle = 1;
WorldMapSetHandle = 2;
SquadMenuSetHandle = 3;
BattleSetupSetHandle = 4;
InBattleSetHandle = 5;
MenuSetHandle = 6;
}
Но игра все равно вылетает после запуска этой функции. Поэтому я попытался удалить из него больше.
void URPGTacSteamInput::SetActionSetHandles()
{
}
И я могу запустить эту функцию, и игра продвигается нормально, за исключением того, что у меня нет никаких наборов действий Steam Input, на которые я мог бы переключиться.
Итак, что я могу проверить, чтобы узнать, почему моя игра вылетает? Что еще мне нужно выяснить, чтобы отследить это? Могу ли я еще где-нибудь спросить об этой проблеме?
Спасибо за любые советы, которые вы можете мне дать по этому поводу.