月度存档: 5 月 2016

学习导航网格

现在开发游戏,基本上不存在解决不了的技术难点了,所有的难点都有成熟的解决方案了。

寻路解决方案:导航网格,虽然unity自带导航网格解决方案,但还是希望自己能多学习些知识。

先解决第一步,如何生成导航网格:

这里先从开源的解决方案些开始学习:https://github.com/luzexi/Unity3DNavMesh.

看起来,应该有算法,可以直接生成,还没找到生成算法。如果是三角形,应该可以合并为多边凸边形。

unity中的音频插件

查看了几个大公司的作品,发现使用aksoundengine的比较多,

查了一下,AkSoundEngine官方地址:https://www.audiokinetic.com/

是其提供的wwsize音频工作流中间件,看费用不适合小团队,提供的功能大而全,而且可能很多之前的端游积累的工具链都可以进行无缝整合使用。

除此之外,Master Audio高居unity store音频分类榜首,而且价格便宜,对小团队是一个非常好的选择。

https://www.assetstore.unity3d.com/en/#!/content/5607

lua-cjson在vs2015下编译

lua-cjon是一个支持lua中使用json的开源库,基于linux平台开发。

可以使用mingw32编译出windows下的库。

因为我希望vs2015进行编译(主要其它库在windows平台都是使用的vs2015,没有使用mingw),

出现错误1:

原因:strncasecmp是linux下的函数,windows平台对应等价函数为_strnicmp,

解决方案:

在strbuf.h中添加以下代码:

#if defined(_WIN32) || defined(_WIN64)
  #define strncasecmp _strnicmp
#endif

顺利解决。

参考:http://botsikas.blogspot.com/2011/12/strcasecmp-identifier-not-found-when.html

出现错误2:

参考:https://msdn.microsoft.com/en-us/library/4t91x2k5.aspx

原因是 在64位系统上,指针是64位,这里按32位进行输出了,所以导致输出一个警告。

 

我们可以直接忽略,因为只是一个输出不影响运行。

减少mongod占用的内存

日志服使用的mongod,发现其中一台上占用内存比较多:

google之,发现如果开启journal时,会导致内存占用过多,同时也会有journal文件占用硬盘空间。

因为我们的日志并不是关键数据,允许故障时丢失。所以首先要关闭mongod的journal。

如果在启动时,可以指定: –nojournal 来关闭。

另外,如果内存占用过多,可以定时调用以下命令来释放缓存:

use admin;

db.runCommand({closeAllDatabases:1})

assetbundle打包

终于开始处理每个项目都会遇到的assetbundle的问题了。

研究了一下,还是使用传统的手动代码打包方式,好处是可以更细粒度的掌控好资源分包。

而且打包时,有些资源必须提取为公共包。

举例:

1、两个UI,打两个assetbundle包,如果将依赖全打进去,则会发现,unityengine.ui.dll两个包都被打进去了。遇到这种情况,我们就可以将重复资源提取出来,打为一个公共包。

如果打为公共包,则如何组织包的结构是一个大问题。

现在初步的想法是,最大限度的避免重复的资源,如果资源分的太细,导致某个assetbundle依赖过多时,则使用多线程将文件读入内存(避免读取过慢导致耗时过长),单线程内存中加载。

备用方案,最细粒度打包资源,在玩家手机上合并资源为一个拥有所有依赖的整包,这样也可以同时避免了加载依赖导致的耗时。只是会在玩家第一次打开游戏时,会有一个合并包的过程。

unity中的SceneCamera

在设置场景相机时,发现使用GameObject.Find(“SceneCamera”)获得了一个对象,很奇怪的是场景中并没有这个对象。

测试一下, 发现应该是SceneView中的camera,竟然连各种文档上都找不到对应的描述,应该是unity自己保留的对象,连用FindByType都无法查询到这个对象,却通过名字可以直接获取到。

 


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /opt/wordpress/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048