• 黑神话悟空 虚幻引擎(Unreal Engine)写mod


    黑神话悟空 虚幻引擎(Unreal Engine)
    尝试写mod

    img


    按键触发事件中 调用 LoadAsset 会报错
    Function 'LoadAsset' can only be called from within the game thread
    这段代码怎么改才行呢 求指点

    • 一轮明月照丘壑 2024-09-10 23:15
      关注

      以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

      在Unreal Engine中,报错“Function 'LoadAsset' can only be called from within the game thread”意味着你正在尝试在主线程之外的地方调用LoadAsset函数。在Unreal Engine中,很多函数,特别是涉及到资源加载和管理的函数,必须在游戏的主线程中调用。如果你在异步任务或者其他非主线程中尝试调用这些函数,就会遇到这样的问题。

      对于你的代码,可以尝试以下解决方案:

      你可以使用UE的异步任务系统来加载资源。例如,你可以使用UObject::QueueAsyncTask来创建一个异步任务来加载资源。这样,加载资源的操作会在后台线程中进行,不会阻塞主线程。以下是一个可能的修改方案:

      RegisterKeyBind(Key.J, function()
          Initialize()
          local bossKeys = {}
          for k, v in pairs(BossConfig.BossList) do
              table.insert(bossKeys,k)
          end
          local monsterKeys = {}
          for k, v in pairs(BossConfig.MonsterList) do
              table.insert(monsterKeys,k)
          end
          local BPPlayerController = FindFirstOf("BP_B1PlayerController_C")
          local bpPlayer = BPPlayerController.pawn
          local realKey = "0036"
          local assetPath = BossConfig.BossList[realKey]
          
          -- 使用异步任务加载资源
          UObject::QueueAsyncTask(function() 
              local asset = LoadAsset(assetPath) 
              -- 这里处理加载完成的资源,比如将其赋给某个对象或进行其他操作
          end)
      end)
      

      注意这只是一个基础的示例,具体的实现可能需要根据你的需求来调整。你也可能需要处理一些其他的细节,比如在异步任务完成时对资源的使用和错误处理等。具体的代码可能还需要你根据实际的项目情况进行调整和优化。

      展开全部

      m0_63268912 2024-09-10 23:29

      这个是.lua语言哦

      1
      回复
    • 清水白石008 2024-09-11 05:45
      关注
      🕒上午好,题主!目前:🟢[在线]
      📢参考GPT-4o mini 模型、由清水白石008整理提供!
      📣今日金句:“所有坚忍不拔的努力迟早会取得报酬的。” —— 安格尔
      

      在 Unreal Engine 中,LoadAsset 函数只能在游戏线程中调用。为了避免这个错误,你可以使用异步加载资产的方法。以下是一个修改后的代码示例,使用 AsyncLoadAsset 来解决这个问题:

      RegisterKeyBind(Key.J, function()
          Initialize()
          local bossKeys = {}
          for k, v in pairs(BossConfig.BossList) do
              table.insert(bossKeys, k)
          end
          local monsterKeys = {}
          for k, v in pairs(BossConfig.MonsterList) do
              table.insert(monsterKeys, k)
          end
          BPPlayerController = FindFirstOf("BP_B1PlayerController_C")
          local bpPlayer = BPPlayerController.pawn
          local realKey = "0036"
          local assetPath = BossConfig.BossList[realKey]
      
          -- 使用异步加载资产
          AsyncLoadAsset(assetPath, function(asset)
              if asset then
                  -- 在这里处理加载后的资产
                  print("Asset loaded successfully!")
              else
                  print("Failed to load asset.")
              end
          end)
      end)
      
      function AsyncLoadAsset(assetPath, callback)
          -- 异步加载资产的实现
          local asset = LoadAsset(assetPath)
          if asset then
              callback(asset)
          else
              -- 处理加载失败的情况
              callback(nil)
          end
      end
      

      在这个示例中,AsyncLoadAsset 函数用于异步加载资产,并在加载完成后调用回调函数处理资产。这样可以避免在非游戏线程中调用 LoadAsset 函数时出现的错误。

      希望这能帮到你!如果有其他问题,随时告诉我。

      展开全部

  • 相关阅读:
    技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
    jmeter实现webservice接口测试
    Java语言有多少优势(总结版)
    如何利用python将xmind转为Excel?
    Path-Ranking:KBQA中path生成、召回、粗排与精排
    Vite3+Vue3+JypeScript:搭建企业级轻量框架实践
    Vue语法
    redis哨兵模式(Redis Sentinel)
    安卓手机记事本数据转移到苹果手机上怎么操作?
    【tomcat、java】
  • 原文地址:https://ask.csdn.net/questions/8143012