UE4SS项目中通过子字符串匹配查找UFunction完整路径的方法

UE4SS项目中通过子字符串匹配查找UFunction完整路径的方法

【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 【免费下载链接】RE-UE4SS 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS

在UE4SS项目中,开发者经常需要查找并注册游戏中的UFunction进行hook操作。然而,由于Unreal Engine在编译蓝图时自动生成的函数名包含随机后缀(如_75),直接使用完整路径可能会因为版本更新而失效。本文将介绍如何通过子字符串匹配来查找UFunction的完整路径。

问题背景

在Unreal Engine中,蓝图生成的函数名通常包含随机后缀,例如:

Function /Game/Character/BP/KSPlayerControllerBP.KSPlayerControllerBP_C:InpActEvt_Dash_K2Node_InputActionEvent_75

其中_75这样的后缀可能会随每次编译而改变,导致直接使用完整路径的hook代码失效。

解决方案

UE4SS提供了遍历类中所有函数的能力,我们可以利用这一特性实现子字符串匹配查找功能。

核心实现方法

以下是一个完整的Lua实现示例,用于通过模式匹配查找类中的函数:

--- 通过模式匹配查找类中的函数
--- @param Class UObject 要搜索的类对象
--- @param FunctionPattern string 要匹配的函数名模式
--- @return UFunction[] 返回匹配的函数数组
local function FindFunctionsByPattern(Class, FunctionPattern)
    local Results = {}
    
    -- 首先验证类对象是否有效
    if not Class:IsValid() then
        return Results
    end
    
    -- 遍历类中的所有函数
    Class:ForEachFunction(function(Function)
        local FunctionName = Function:GetFName():ToString()
        
        -- 使用Lua的字符串查找功能进行模式匹配
        if string.find(FunctionName, FunctionPattern) then
            table.insert(Results, Function)
        end
    end)
    
    return Results
end

使用示例

-- 首先获取目标类
local ControllerClass = StaticFindObject("/Game/Character/BP/KSPlayerControllerBP.KSPlayerControllerBP_C")

-- 使用部分函数名进行搜索
local MatchedFunctions = FindFunctionsByPattern(ControllerClass, "InpActEvt_Dash")

-- 处理匹配结果
if #MatchedFunctions > 0 then
    local FullPath = MatchedFunctions[1]:GetFullName()
    print("找到匹配函数:", FullPath)
else
    print("未找到匹配函数")
end

最佳实践建议

  1. 对象有效性检查:在操作UObject前总是检查其有效性,使用IsValid()方法

  2. 返回空数组而非nil:对于返回数组的函数,返回空数组比返回nil更符合Lua的最佳实践

  3. 错误处理:对于关键操作,建议添加日志输出以便调试

  4. 性能考虑:频繁的函数遍历可能影响性能,建议缓存结果

  5. 模式匹配优化:对于复杂的匹配需求,可以考虑使用Lua的pattern匹配而非简单字符串查找

技术细节说明

  1. StaticFindObject:用于通过路径名查找UObject,路径格式通常为"PackageName.AssetName"

  2. ForEachFunction:UE4SS提供的遍历类中所有函数的方法

  3. GetFName/ToString:获取函数名并转换为Lua字符串

  4. CreateInvalidObject:UE4SS提供的创建无效对象的方法,适用于需要返回单个对象的场景

通过这种方法,开发者可以更灵活地hook游戏函数,而不必担心因编译导致的函数名变化问题。

【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 【免费下载链接】RE-UE4SS 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值