簡體   English   中英

虛幻引擎 3 游戲因 Steam 輸入而崩潰

[英]Unreal Engine 3 game crashes with Steam Input

我不是 C++ 程序員,我正在尋求有關將 Steam Input 實施到我的虛幻引擎 3 游戲(是的,是 3 而不是 4)的幫助。 我與 Epic(對於 Unreal 3)和 Valve(對於 Steamworks)都簽訂了保密協議,所以我認為我無法復制他們的任何代碼,但我會在這里盡我所能來描述什么是繼續。 如果你知道我可以問這些問題的更好的地方,請告訴我。 如果您認為我違反了保密協議,也請告訴我,以便我刪除違規部分。

我有一款支持鼠標和鍵盤的 UE3 游戲。 Steam 輸入是 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(),據我所知這是虛幻 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 qwords,它們可以很好地保存由 Steam API 發回的 C++ uint64 句柄。 並且沒有更多的崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM