其实也是没事儿闲的,研究了两个小时怎么改名。
在Build Setting面板编译打包的时候需要勾选Create Visual Studio Solution。点击build选择路径,这样就创建了一个windows的C++解决方案。
解决方案里总共有3个项目,分别是:
- 你的项目名字
- UnityData
- UnityPlayerStub
其中你的项目名字是主启动项目,使用windows的wWinMain函数作为窗体类函数入口(main是控制台入口),会去调用UnityMain函数。
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd) { return UnityMain(hInstance, hPrevInstance, lpCmdLine, nShowCmd); }
这个UnityMain函数是include自UnityPlayerStub项目中的导出函数,而该函数的实现放在UnityPlayerStub项目中的Exports.cpp中。
这里使用了一个欺骗手段,UnityPlayer.dll包含了引擎等代码,我们无法自己编译,而UnityPlayerStub这个项目也会编译出UnityPlayer.dll这个文件,但从实现上来看什么都没有
#include "Exports.h" int UnityMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpCmdLine*/, int /*nShowCmd*/) { return 0; }
也就是说,UnityPlayerStub这个项目编译出的dll的意义只是为了让你的项目可以通过编译,在程序启动时,会去链接真正的UnityPlayer.dll。
接下来我们只需要把UnityPlayerStub编译出这个假的UntiyPlayer.lib改名为Engine.lib,然后在主项目的项目属性->链接器->命令行->其它选项中,修改其链接的名字。
“$(ArtifactsDir)UnityPlayerStub\bin\UnityPlayer.lib”
修改为
“$(ArtifactsDir)UnityPlayerStub\bin\Engine.lib”
重新编译后即可。
文章有(2)条网友点评
不错.
在unity2021.3.4f1版本中,(mono),使用文章描述的流程进行测试。发现生成与链接的lib始终为UnityPlayerStub。 dll的名称修改没问题。