我正在尝试为一个使用虚幻引擎4的游戏编写一个自定义的AI API。虽然我可以使用Python很好地读取进程内存,但我遇到了一个更大的问题-只有在相关的时候才读取进程内存,只有在可能的情况下才发送输入-因此只渲染了一次帧。如果我想发送输入,它们需要以帧的形式发送(游戏是格斗游戏)。
因此,我需要更新我自己的AI API与相同的帧率作为游戏本身。我的第一个想法是查看进程内存,找出每一帧是否有更新的值-虽然一直都有更新的值,但它们似乎在8帧发生后在内存中更新。不幸的是,8帧不允许AI正确地执行输入,因为更新循环更新得不够快。
我将更多地查看内存,但我想知道是否有可能将一个程序附加到正在运行的进程中,以查看窗口本身-如果它已经更新(一些新的东西已经被渲染),更新AI本身的游戏状态。有没有办法做到这一点?
发布于 2018-07-28 21:45:38
我们谈论的是一个建立在虚幻引擎上的游戏,你不可能发现每一帧都有一个地址被改变。
这让我担心您在哪里/如何查找每个帧中正在更改的地址。也许可以试试CheatEngine之类的内存扫描工具,以防万一。
每一帧应该有几个地址在改变。我脑海中浮现的是:
使用此函数时引用的地址之一:UGameplayStatics::GetRealTimeSeconds(GetWorld());
如果你真的找不到改变每一帧的变量,那么我提供了一种解决方案,通过执行以下操作来挂钩到每一帧在进程中调用的函数:
这无论如何都不是一个完整的解决方案,因为它涵盖了一个主观上很复杂的主题,您可能需要从其他来源了解它。
笔记
如果这个游戏使用了反作弊,你可能会因为这种行为而被禁止,我建议你在尝试之前做一下研究。对于您因使用以下建议而产生的任何问题或损失,我不承担任何责任。
备份选项:
- Read up on patching a function by injecting code into the process or by modifying the process before you run it.
- The injected code can communicate with your process via a **Memory Mapped File** or a **Named Pipe**, setting a flag every frame.
- You will need to do this while retaining the original opcodes to ensure the program works as normal by either:
- restoring after executing
- **OR**
- jumping to a code cave and executing original opcodes before jumping back
- **OR**
- Redirecting the function altogether (not suitable for your current use but worth reading about)
https://stackoverflow.com/questions/51527523
复制相似问题