Have any of you implemented Steam Input into a UE3 game?

I’m having trouble with this. My game crashes when I try using Steam Input. Basically, your controller, your actions (such as “shoot” or “walk forward”), and action sets (control schemes that can change based on game state, such as “in menu,” “walking,” or “driving”) all get assigned unique UINT64 handles. I’m at the stage where I’m using the provided functions to assign handles, and it’s crashing my game.

In a native class, I have these variables



     // typedef uint64 InputActionSetHandle_t;
    InputActionSetHandle_t IsometricSetHandle;
    InputActionSetHandle_t WorldMapSetHandle;
    InputActionSetHandle_t SquadMenuSetHandle;
    InputActionSetHandle_t BattleSetupSetHandle;
    InputActionSetHandle_t InBattleSetHandle;
    InputActionSetHandle_t MenuSetHandle;


And I create an object and try to set up those handles by using this function



 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" );
}


The function completes, but the game crashes later, with the error “Unhandled exception … Access violation reading location …” Call stack location is FArchiveRealtimeGC::PerformReachabilityAnalysis(), which I understand is part of UE3’s garbage collection system.

I’m not sure how to tackle this problem, and I’ve just been trying stuff. I logged the handles that get assigned, and I tried setting those handles manually:



 void URPGTacSteamInput::SetActionSetHandles()
{
    IsometricSetHandle = 1;
    WorldMapSetHandle = 2;
    SquadMenuSetHandle = 3;
    BattleSetupSetHandle = 4;
    InBattleSetHandle = 5;
    MenuSetHandle = 6;
}


But the game still crashes after running that function. So I tried removing more from it.



 void URPGTacSteamInput::SetActionSetHandles()
{
}


And I can run that function, and the game moves along just fine, except that I don’t have any Steam Input action sets I can switch to.

So what might I be able to check to find out why my game is crashing? What else would I need to find out in order to track this down?

I found my problem. I was declaring my variables inside the cpptext section of my UnrealScript class. You need to declare them in UnrealScript. If you need a 64-bit integer, use a qword, and so far it looks like the game engine just knows how to convert from qword to uint64 automatically.