虚幻引擎3游戏因蒸汽输入而崩溃 我不是一个C++程序员,我正在寻找帮助实现蒸汽输入到我的虚拟引擎3游戏(是的,那是3,而不是4)。我在Epic(对于虚幻3)和Valve(对于蒸汽工厂)的NDA下,所以我认为我无法复制他们的任何代码,但我将在这里尽我所能描述发生了什么。如果你知道一个更好的地方我可以问这些问题,请告诉我。如果你认为我违反了保密协议,请让我也知道,这样我就可以删除有问题的部分

虚幻引擎3游戏因蒸汽输入而崩溃 我不是一个C++程序员,我正在寻找帮助实现蒸汽输入到我的虚拟引擎3游戏(是的,那是3,而不是4)。我在Epic(对于虚幻3)和Valve(对于蒸汽工厂)的NDA下,所以我认为我无法复制他们的任何代码,但我将在这里尽我所能描述发生了什么。如果你知道一个更好的地方我可以问这些问题,请告诉我。如果你认为我违反了保密协议,请让我也知道,这样我就可以删除有问题的部分,c++,unreal-engine4,steam,unreal-development-kit,steamworks-api,C++,Unreal Engine4,Steam,Unreal Development Kit,Steamworks Api,我有一个UE3游戏,可以使用鼠标和键盘。Steam Input是Steamworks SDK的一部分,它提供了一种从任何控制器获取输入的方法。基本上,您的控制器、动作(如“射击”或“向前行走”)和动作集(可根据游戏状态更改的控制方案,如“菜单中”、“行走”或“驾驶”)都会被分配唯一的UINT64手柄。我正处于使用提供的函数分配句柄的阶段,它正在破坏我的游戏 我有一个包含这些变量的类 // typedef uint64 InputActionSetHandle_t; InputAc

我有一个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::PerformReachabilityAnysis(),据我所知,它是虚幻3垃圾收集系统的一部分

我不知道如何解决这个问题,我只是在尝试一些东西。我记录了分配的句柄,并尝试手动设置这些句柄:

void URPGTacSteamInput::SetActionSetHandles()
{
    IsometricSetHandle = 1;
    WorldMapSetHandle = 2;
    SquadMenuSetHandle = 3;
    BattleSetupSetHandle = 4;
    InBattleSetHandle = 5;
    MenuSetHandle = 6;
}
但运行该功能后,游戏仍会崩溃。所以我试着从中去掉更多

void URPGTacSteamInput::SetActionSetHandles()
{
}
我可以运行这个功能,游戏运行得很好,只是我没有任何可以切换的Steam输入动作集

那么,我可以检查什么来找出为什么我的游戏会崩溃呢?我还需要找出什么才能找到这个?是否有其他地方我可能更幸运地询问这个问题


谢谢你在这方面给我的指导。

我发现了问题。我在UnrealScript类的cpptext区域声明了所有InputActionSetHandle\t变量。我不应该那样做。我把所有这些变量都声明为unRealScript QWord,它们对保存由蒸汽API发送回的C++ uTun64句柄来说是很好的。没有更多的崩溃。

我从未使用过Steam或UE,但您的例外是,您正在访问您没有权限的部分内存(缓冲区溢出、内存损坏)。我的一般提示是,如果我有这个问题,我会设置调试版本(不知道是否可以使用UE/SteamAPI),点击断点并缩小导致此异常的确切行-可能是某个指针为nullptr,而不是有意义的指针。然后您可以追溯问题,为什么是nullptr。谢谢您的回答,我正在解决与Steam API相关的问题