其实也是没事儿闲的,研究了两个小时怎么改名。

在Build Setting面板编译打包的时候需要勾选Create Visual Studio Solution。点击build选择路径,这样就创建了一个windows的C++解决方案。

解决方案里总共有3个项目,分别是:

  1. 你的项目名字
  2. UnityData
  3. 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”

重新编译后即可。