Urho3D自建项目

DinS          Written on 2017/11/25

本文介绍如何建立urho3d工程,需要编译好的库。如何编译可见《编译Urho3D库》。

参考了官方两篇教程:

https://github.com/urho3d/Urho3D/wiki/Setting-up-a-Project-(CMake)

https://urho3d.github.io/documentation/1.6/_using_library.html

核心思路是利用Urho3D提供的cmake方法,建立一个类似的目录然后build得到完成的工程。

第一步,先搭建一个目录系统。
建立一个文件夹叫CustomUrho3D,然后从Urho3D的source里把bin和Cmake拷贝过去的:

这是一个讨巧的方法,bin里就是准备一些资源文件,从source拷贝过去的。一方面是保持目录结构,另一方面提供一些资源可以直接使用。
当然source的bin下面还有一些文件一起拷贝过来了,删掉就好,最后自定义的工程目录里bin和cmake里看起来是这样的:

     

然后从Urho3D的source里把cmake_generic.bat和cmake_vsXXXX拷贝过来,因为这里使用的是VS2015所以拷贝对应bat文件。
现在看起来是这样的:

之后在同级目录下新建一个CMakeLists.txt文件,内容填这个网址中的https://github.com/urho3d/Urho3D/wiki/Setting-up-a-Project-(CMake)
内容看起来是这样的:

大图点这里

红线部分是工程名字和exe名字。这一步的意义就是指定cmake的相关指令。
现在文件夹看起来是这样的:

最后要提供一个cpp,cmake至少需要一个cpp才能够生成成功。
我们这里增加一个main.cpp,内容如下:

大图点这里

等具体介绍引擎功能时再细说,这里先这么写就好了。
最后文件夹看起来是这样的:

第二步,使用cmake生成工程
这里使用GUI好了,使用方法跟编译库一样。
打开cmake_GUI,输入目录:

我这里直接在CustomUrho3D下新建了一个build文件夹,工程生成在那里
注意:此时的build选项必须与生成Urho3D时候的build选项一致。比如编译库时勾了OPEN_GL那么新建工程也要勾OPEN_GL。

Finish后会出现这样:

不要着急,正常,点击OK后勾选build options。
选项会少很多,但是有一个_HOME非常重要:

cmake生成工程时需要用到在编译库时生成的lib,这个HOME就是指定这个lib文件在哪里。指定到图示目录即可,会有自动寻找的模块。实际上lib和include都会用到。

再次Generate即可:

找到对应目录,打开sln:

看起来都是正常的,生成:

找到对应exe:

这里可以看到CoreData和Data,这里面的内容就是刚才我们准备CustomUrho3D时放进去的,也就是游戏资源默认加载路径。

可以运行。也可以从VS里Debug运行。
比如我们改这两个数值:

将HelloWorld设置为启动项:

然后从VS里运行:

有一点要注意,据说如果增加了source file则必须按照上述流程再次build,否则会生成失败。当然也有方法解决,后面的文章再细说。


最后来说说一些周边问题,如何给exe换图标?
这个肯定是要做的,但是怎么简单呢?
其实很简单,不需要代码手动即可。

找到一个ico,放到sln目录下,当然这是对应导入ico情况,手绘ico也是可以的。

选择导入,找到对应图标:

可以看到对应的图标被导入了:

改成release,然后生成:

去找生成的exe,发现图标自动更换了。确实方便:

接下来是另一个问题:如何确保exe在其他的机器上可以正确执行?
这里可以细分为两个问题:exe的运行环境以及资源路径。
因为我们使用了static library并且是release版,所以exe的运行环境应该没有问题。至于路径,需要把CoreData和Data一并提供,并且目录结构也要保持一致。所谓CoreData即引擎本身需要用到的文件,而Data则是作者自己提供的资源。

比如把刚刚制作的内容拷贝到另一台机器上:

然后运行HelloWorld.exe:

成功了!

运行一遍以后可以发现多出了一个log文件:

打开如下:

这里可以看到CoreData和Data确实有作用,而且还从侧面说明了一点:路径里不要有非英文字符,不然可能加载失败。
之所以会生成这个log是因为在build工程时勾选了option,不勾就不会生成。

至此准备工作全部完成,可以正式进入urho3d使用方法了,一步一步来,先研究《Urho3D引擎框架》。