• 黑神话悟空 虚幻引擎(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 函数时出现的错误。

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

      展开全部

  • 相关阅读:
    用crash tool观察ARM64 Linux地址转换
    C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_为何使用迭代器_迭代器类型
    openEuler 22.03 制作openssh9.5p1rpm包
    项目开源!基于PaddleDetection打造实时人体姿态检测的多关节控制皮影机器人
    Splunk 之 filed 恢复
    目标检测算法——安全帽识别数据集(附下载链接)
    分享一套好用的功能测试用例编写框架
    async-validator 源码学习笔记(四):validator
    开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
    Istio实践(4)- 故障注入、熔断及ServiceEntry
  • 原文地址:https://ask.csdn.net/questions/8143012