首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚幻引擎3游戏在Steam输入下崩溃

虚幻引擎3游戏在Steam输入下崩溃
EN

Stack Overflow用户
提问于 2019-11-28 21:45:40
回答 1查看 127关注 0票数 1

我不是一个很好的C++程序员,我正在寻求帮助在我的虚幻引擎3游戏中实现蒸汽输入(是的,那是3而不是4)。我在Epic (虚幻3)和Valve ( Steamworks)的NDA下,所以我不认为我能够复制他们的任何代码,但我将在这里尽我最大的努力来描述正在发生的事情。如果你知道有更好的地方我可以问这些问题,请让我知道。如果你认为我违反了保密协议,请也让我知道,这样我就可以删除违规的部分。

我有一个可以使用鼠标和键盘的UE3游戏。Steam Input是Steamworks SDK的一部分,它提供了一种从任何控制器获取输入的方法。基本上,您的控制器、您的动作(如“拍摄”或“向前行走”)和动作集(可根据游戏状态改变的控制方案,如“在菜单中”、“行走”或“驾驶”)都会被分配唯一的UINT64句柄。我正处于使用提供的函数分配句柄的阶段,它会使我的游戏崩溃。

我有一个包含这些变量的类...

代码语言:javascript
复制
    // typedef uint64 InputActionSetHandle_t;
    InputActionSetHandle_t IsometricSetHandle;
    InputActionSetHandle_t WorldMapSetHandle;
    InputActionSetHandle_t SquadMenuSetHandle;
    InputActionSetHandle_t BattleSetupSetHandle;
    InputActionSetHandle_t InBattleSetHandle;
    InputActionSetHandle_t MenuSetHandle;

我创建了一个对象,然后尝试通过调用这个函数来设置它的变量。

代码语言:javascript
复制
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的垃圾收集系统的一部分。

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

代码语言:javascript
复制
void URPGTacSteamInput::SetActionSetHandles()
{
    IsometricSetHandle = 1;
    WorldMapSetHandle = 2;
    SquadMenuSetHandle = 3;
    BattleSetupSetHandle = 4;
    InBattleSetHandle = 5;
    MenuSetHandle = 6;
}

但在运行该函数后,游戏仍会崩溃。所以我试着去掉更多。

代码语言:javascript
复制
void URPGTacSteamInput::SetActionSetHandles()
{
}

我可以运行这个函数,游戏运行得很好,除了我没有任何可以切换到的Steam输入动作集。

那么我可以检查什么来找出我的游戏崩溃的原因呢?为了追踪这件事,我还需要找出什么?有没有别的地方可以让我更幸运地问到这个问题?

感谢您在这方面给我的任何指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 02:01:19

我找到问题了。我在UnrealScript类的cpptext区域中声明了所有的InputActionSetHandle_t变量。我不该这么做的。我将所有这些变量声明为UnrealScript qword,它们可以很好地保存由Steam API返回的C++ uint64句柄。不会再有撞车事故了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59090302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档