自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿赵的博客

欢迎各位一起探讨游戏开发技术

  • 博客(64)
  • 收藏
  • 关注

原创 关于博客迁移

大家好,我是原网易博客http://liweizhaolili.blog.163.com/的博主阿赵,最近把博客迁移到csdn来,继续在这边分享技术文章。 由于平时工作比较忙,所以只能在空余时间写点文章,希望大家谅解。 各位也可以关注我的微信公众号。 ...

2018-08-28 09:24:11 1077 1

原创 集群算法介绍

demo视频1 demo视频2 集群,也叫做群聚,大概的意思就是模拟一大群行为相近的单位的行动。比较常见的有一群鱼在列队游行等。我也做了个demo,来大概模拟了这个集群的表现。这个群体里面有50个跟随者,还有一个领头者。跟随者一直跟随在领头者附近,相互之间会避开,遇到障碍会避开。如果不小心走远了,会回头继续跟随。 做集群的方法,一般有2种:1、平均行动向量的算法2、势函数算法...

2018-08-27 08:53:48 8621 6

原创 游戏角色ai的实现方式讨论

demo视频很久之前我曾经介绍过不少游戏角色寻路方面实现的方法,但作为完整角色ai行为,我觉得比较难以介绍,首先这涉及到比较多的知识面,然后实现的方式也很多,比如有限状态机、决策树、神经网络等,我认为各有各的优缺点。最后,能实现这个完整过程的手段和框架设计也很多。所以一般介绍角色ai的文章都比较长篇大论,甚至可以写出很多几百页的书籍。我的写作能力有限,技术水平也有限,所以一直觉得难以表达这...

2018-08-25 10:11:48 6007 2

原创 lua代码的检查

现在做手机游戏,由于商店审核周期、用户下载的意愿等问题比较敏感,都很注重热更新的实现。其中很多人都会选择lua脚本作为代码热更新的手段。作为弱类型的脚本,lua写起来是非常的轻松愉快,很自由。但由于过于轻松愉快,很多时候会导致一些写法上的问题。比如语法的错误,或者变量的声明问题,或者方法名和变量拼错了单词之类的问题,经常都会出现。如果是强类型或者需要编译的语言,这种错误是很容易就能发现。但作为...

2018-08-25 09:30:41 5583

原创 代码对性能的影响

前段时间,有渠道反馈我的游戏在安卓模拟器上玩帧率非常低,但前段时间却没有这个问题。于是我就开始各种查性能。遇到这种帧率低的问题,第一反应一般都是考虑到渲染上的问题。但我可以比较明确的知道,最近项目没有加什么特殊资源,也没有改过渲染的方式,按道理不会突然出现渲染方面的问题。于是从代码的层面查找,比如用Unity自带的profiler工具去分析cpu耗时等,终于发现是在一个提示玩家可以领取奖励的红...

2018-08-24 09:03:48 1813

原创 MVC设计模式的介绍

继续程序入门介绍系列,这次来说一下稍微复杂的东西。一、Unity项目使用框架有什么好处以前有段时间我很喜欢在qq群里面回答问题,后来渐渐的也没太多时间回答了,所以变成了偶然看看别人讨论的过程。我后来发现,很多朋友都只是注重功能的实现,当实现了某个功能之后,就很高兴,觉得自己已经达到了一定的水平了。甚至有朋友直接的说,我能实现功能就够了,用Unity开发根本不需要用什么框架。出现这种思想...

2018-08-24 09:03:07 7026

原创 面向对象的概念介绍

继续讲程序基础。这一篇主要是介绍面向对象的各种概念性的东西,并不会说具体的代码怎样写,所以可以用一种轻松的心态去看。一、面向过程和面向对象面向对象是相对于面向过程的一种编程方式。面向过程的编程方式由来已久,我刚开始学习Basic和Pascal的时候,都是面向过程的编程方式。这种方式非常的直观,需要写一个功能,直接就写几行实现方法。比如你需要操作一个人移动到某个点,直接就写代码修改一个人...

2018-08-24 09:02:18 22126 4

原创 事件机制的入门说明

接下来几篇文章打算说一下编程的一些基础思路问题。先从基本的事件机制说起,然后说一下面向对象的基础,最后说一下简单的MVC框架的搭建。希望通过这些内容,让新入门的人对编写程序有一个比较系统的思路,而不需要为了实现某个功能而烦恼怎样堆砌代码。事件机制的说明其实之前也写过文章介绍,这次算是写得更通俗一点吧。一、 方法直接调用和事件机制调用在写程序的时候,我们经常会想调用某个方法,这种方法的调...

2018-08-24 09:01:34 349

原创 Unity3D的断点调试功能

这是一篇很老的文章,顺便转过来,用到的版本可能有些旧,但大同小异。 断点调试功能可谓是程序员必备的功能了。Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调试的。调试有两种方式,一种是使用visual studio配合unityVS来调试(较新的unity版本已经不需要安装插件了),另一种是使用MonoDevelop自带的调试功能。 ...

2018-08-24 08:58:11 11240

原创 怎样在Unity里面进行代码的查错

继续讲一下在Unity写代码的查错问题,面对新手,老鸟请自动跳过。 对于程序基础比较薄弱的部分Unity使用者,经常会遇到某个项目不能运行,或者运行的时候没有出现自己想要得到的结果。这时候,很有可能是项目里面的代码报错了,或者代码写错了。代码报错的最直接表现是有错误打印,一般在Unity窗口最下面会出现错误打印,不过只会出现一行,我们可以打开Unity的打印输出窗口来确定有没有报错。 ...

2018-08-24 08:48:06 10347

原创 怎样去查询Unity的API文档

自从开通了公众号之后,有更多的朋友加我qq来交流问题。这是一个好的事情。在交流的过程中,我发现很多朋友都比较缺乏程序的基础,但又急着拿Unity来做一些作品之类的。所以经常会遇到一些很入门的问题没有办法解决。这些问题基本都几种在写代码的过程中。然后回顾一下之前的文章,感觉都是从美术资源的优化角度去介绍Unity的。所以接下来我打算写一些关于程序方面的事情。 前两篇都是针对程序基础比较薄弱...

2018-08-24 08:42:52 12630 6

原创 骨骼动画原理和优化

用Unity做游戏经常会用到3D角色,也就会用到骨骼动画。骨骼动画对性能的影响其实非常大的,在说这个问题之前,先来说说骨骼动画的原理。 我之前做过多种骨骼动画,包括写过2D的骨骼动画系统(类似于现在比较流行的龙骨系统),也在flash的stage3D里面写过3D的骨骼模型动画。骨骼动画的原理实际上都是一样的: 首先你需要有一个模型,2D或者3D的,这些模型是由顶点组成的,2d模...

2018-08-24 08:38:04 7879 4

原创 UGUI的一些性能优化经验

自从Unity问世以来,UI一直都存在比较大的问题,自带的OnGUI不能所见即所得,制作过程比较麻烦。于是出现了很多第三方的优秀的UI插件,比如很多项目里面用到的NGUI,或者后来出的FairyGUI。Unity官方在4.x时代开始推出了自己的新UI系统,名为UGUI。由于是官方出品,所以选择使用的人也比较多。阿赵我也是基于信任官方出品的心理,在最近的两个项目里面都使用UGUI进行开发。UGU...

2018-08-23 09:25:36 9020

原创 Unity隐藏的资源引用坑

由于发现项目在运行的时候资源占用内存比较高,特别是某些特效出现时,内存会一下升高很多,于是针对某些特效资源做了检查,发现了一个比较令人吃惊的问题。 第一个问题,在这个特效里面,其实完全没有用到这个材质球的,而且材质球上面引用了3张特别大的贴图,包括了法线贴图和高光贴图。注意,这个特效里面是完全没有看到这些效果的。 第二个问题,特效完全不是这个形状的,但却引用了这个fbx模型,顺便f...

2018-08-23 09:15:26 3779 6

原创 在特别的手机分辨率情况下的适配问题

最近游戏快上线了,在做各种收尾工作的时候,发现了一个奇葩的情况。有些手机的分辨率是18:9的,在运行游戏的时候,屏幕的两边总会出现黑边,画面不能全屏。一开始我以为是自己项目的设置有问题,于是建了个空项目测试,发现空项目单纯只是打了一个场景摄像机,在这些手机上面也会出现画面到不了全屏,留有两边黑边。 于是一番百度和问朋友过程,终于找到了解决的办法。造成黑边的原因是安卓本身的一个默认设置,andro...

2018-08-23 09:09:58 908

原创 解决Batching Static静态合并网格的容量问题

最近我一直在解决项目里面打包AssetBundle的容量问题,还是比较有成果。包体容量从原来的800M减少到400M左右。 其中一个可以减少容量的地方,是Batching Static。这其实是有历史原因的,由于上一个项目的失败,这个项目被老板指定使用其他某个项目组的框架代码来开发。由于这个框架是使用LoadLevel的方法来加载整个场景的,所以最后会把整个Scene文件打包成Asset...

2018-08-22 08:59:59 3741 1

原创 解决LightMap和Fog导致FBX打包AssetBundle的容量增大的问题

这次来说说LightMap和Fog导致FBX打包AssetBundle产生的容量问题。下面会做一些小测试,来看看有那些方面会影响FBX打包AssetBundle的容量。 首先我准备了一个普通的fbx网格模型: 然后给他设置了AssetBundleName 正常打包成AssetBundle,可以看到容量是91k。 也许很多人都知道,如果把一个场景打包成AssetBundle,需...

2018-08-22 08:55:23 1004

原创 GPU Skinning介绍

最近通过朋友介绍,知道了一个叫做GPU Skinning的工具。这个工具的作用是同一种角色在同屏里面出现一大堆时,可以大幅度的降低DrawCall。我试了一下,感觉挺有意思的,各位可以试试。 它的原理实际上是把骨骼矩阵存在配置文件里面,然后通过特殊的shader,计算顶点的位置,直接在GPU端得到了网格模型的顶点在动画帧该在的位置。这一切由于是在GPU端直接得出结果,所以根本不会产生CP...

2018-08-22 08:50:28 13452 7

原创 GPU instancing介绍

从Unity5.4开始,多了一个叫做GPU instancing的功能。这个功能是做什么用的呢?下面做一个小例子来说明一下: 还是之前做 MaterialPropertyBlock的例子,在屏幕上面做了很多的cube,然后随机给颜色,使用MaterialPropertyBlock的方式设置颜色值。 可以看到,正常情况下,在改变完颜色之后,Batches有75个,而SetPass cal...

2018-08-22 08:48:16 14991

原创 MaterialPropertyBlock

使用Unity3D做开发的朋友应该都知道,对于实例化出来的模型,我们改变它身上的颜色值或者贴图之类,Unity是会把它当前使用的ShareMaterial复制一份实例出来,以做到不同对象身上的材质互不影响的改变参数。但这样做会导致如果使用的对象很多,就会产生很多材质的实例的问题,这样会对内存有一定的消耗。 下面做了这么一个例子: 在场景里面生成了多个cube,然后用代码改变他们的颜色: ...

2018-08-22 08:46:10 17339 6

原创 制作Unity的二维时间轴编辑器界面

由于某种原因,阿赵我一直想做一个能显示二维时间轴波形的编辑器,类似于Unity自带的Profiler那样。 我抽空做了一下: 为了测试,我随机生成了一些数据,用于波形的显示。 可以选择其中的某一帧,然后显示当前的值。 有时候波形叠在一起了,需要放大来看 于是滑动左边的滑条,可以对波形进行缩放。下面说说做法: 主要用了Handle.DrawLine的方法。 ...

2018-08-22 08:43:42 6153 5

原创 PBR地形纹理研究——多重纹理不同质量等级的切换

demo视频之前研究了一下PBR(Physically Based Rendering)用于角色时的一些效果,然后我再研究了一下用于地形上面多层纹理时的情况。 我之前写了一个多层纹理的shader,作用是支持4张漫反射通道的贴图作为纹理,通过一张遮罩图片来控制叠加关系,这样的地形效果如下: 稍微做了一些修改,加入了法线贴图和高光贴图的支持,效果会变成这样: 对比起单纯的漫...

2018-08-17 09:21:02 1515

原创 对Unity3D的PBR的初步研究

demo视频 demo视频2最近经常听到PBR(Physically Based Rendering)技术的讨论,我一开始其实比较抗拒的。毕竟对于画面和运行效率,我一直偏向于后者。不过最近玩了一些比较优秀的游戏作品,比如《镇魔曲》等,发现好的画面还是非常吸引人的,于是开始研究一下PBR技术的用法。 传统的贴图渲染技术,一般是使用3张贴图来表现模型的效果:漫反射贴图、法线贴图和高光贴...

2018-08-17 09:17:42 9502 2

原创 骨骼动画程序原理介绍

最近有人问我怎样实现骨骼动画,于是我就想起了我以前写的这篇文章,贴上来给大家看看。一、文章编写目的写这篇文章,是给程序员看的。目的在于给程序员介绍骨骼动画的原理、数据结构和程序实现的粗略方法。骨骼动画的应用面很多,主要用在3D角色动画,不过现在也很多人用于2D动画。下面的内容不会直接的把程序列出,只会阐述原理,关键的步骤是使用矩阵做坐标系变换。原理明白之后,不管2D或者3D应该都能自己...

2018-08-13 23:17:40 15777 3

原创 3DsMax导出插件编写(四)——导出骨骼动画的帧信息

接下来讲一下怎样导出骨骼动画。首先我们要收集蒙皮信息。常规方法我们已经介绍过怎样获取蒙皮信息了,这里只介绍一些IGame的方法:IGameSkin* skin;bool meshSkin = false;int mods = iObj->GetNumModifiers();if(mods>0){ for(i = 0;i<mods;i++) { ...

2018-08-13 23:12:45 3286

原创 3DsMax导出插件编写(三)——使用IGame收集模型信息

之前介绍过用SDK的常规方法来获取模型的网格信息。这里再介绍另外一种方法。 MaxSdk里面带了一个叫做IGame的包,里面包含有很多方便我们获取模型信息的方法。在sdk的自带例子里面,同样也有这个IGame的例子,不过我自己没有编译通过,存在一些错误。所以我自己看SDK的API,摸索出了使用的方法。#include <IGame.h> 。使用IGame之前需要先给...

2018-08-13 23:11:13 2610 4

原创 3DsMax导出插件编写(二)——常规SDK方法进行信息获取和保存文件

之前已经把配置vs和maxSdk的方法介绍过了, 下面来介绍一下导出插件的具体写法。不过这不是一个容易说的很详细的问题。因为我们要写导出插件,通常都是因为想根据自己想要的信息来导出,所以就算我把我整个工程都公开,意义也不大的,因为那是根据我自己需要的数据写的业务,估计不太可能和你想要的一样的。所以我也只能简单的说明一些几个关键获取数据的方法,和保存文件的方法,如果想看具体的导出范例工程,你可...

2018-08-13 23:07:41 3319

原创 3DsMax导出插件编写(一)——vs2010和3dsmax2011(64位)的配置方法

作为3D开发人员,特别是3D引擎开发人员,经常会接触到各种三维模型的数据。虽然说3dsmax已经可以导出很多格式的模型,不过总是不一定合适自己用。所以总有一种想自己写一个导出插件,让3dmax导出自己想要的数据格式。这里为大家介绍一下怎样为3dmax写导出插件的第一步:怎样配置vs和maxSdk。 这里你需要的东西有两个: 1、一个完整版的3dsMax。 2、一个Visual Stu...

2018-08-13 23:04:39 4745 3

原创 图片数字化程序

前两天看到某位同事以前写的程序,把一张自己数字化的照片放在了程序的备注里面,以后别人看这个代码时就很容易记得是他写的了。先排除掉这个行为是否有意义,我觉得这个照片数字化挺好玩的,所以花了一点小时间,用flex写了个工具,用来把照片转换成像素数字的形式。我以前画的贝吉塔: 多啦A梦 阿赵 是不是感觉有点意思呢?也只有这个时候,会感觉到其实做程序员也挺好玩的。 讲讲简单思路:...

2018-08-13 22:56:28 2269

原创 练练手,顺便分享一下我是怎样从美工变成程序的

近几年做了程序员之后,很少机会画画了。趁着新项目还没开,有点空余时间,练练手。 感觉做美术和做程序最大的区别就在于精神状态。以前做3d模型的时候,我一般都是听着歌慢慢做的,那个过程基本上是一种享受来的。做骨骼动画一开始我也是听着歌来做的,后来看了迪士尼动画大师的书,知道原来听着歌做动画是不好的,动画的节奏会受到影响,所以后来就没有听歌做动画的习惯了。后来做了程序,感觉写代码是一种比较...

2018-08-06 23:25:49 833

原创 谈谈最近很火热的VR

demo视频 最近听到最多的新技术讨论,不外乎就是VR了,包括各种VR设备也非常热卖,贵的有Oculus Rift DK2或者htc的vive,便宜点的有三星gear VR,最廉价的也有Google的CardBroad,还有它的一系列变种,比如暴风魔镜。我没有像vive那么高级的设备,但却通过暴风魔镜体验了一把VR,也看了Oculus 系列VR的介绍,明白了他们的原理。最后,我做出了上面...

2018-08-06 23:22:36 2896

原创 Unity制作AR

demo视频增强现实技术(Augmented Reality,简称 AR),已经流行了很多年,在前几年还在做flash的时候阿赵我也曾经接触过。最近我突然对Unity实现AR效果产生了兴趣,所以也搜索了一下资料,自己做了个demo。 使用Unity来制作AR应用,现在最主流的有2种插件可以使用 1、高通的Vuforia 2、ARToolKit 这两种插件我都下载下来使用...

2018-08-06 23:21:22 6322

原创 Unity5资源管理的又一次探讨

对于Unity来说,常用的资源管理有2种方式,一种是包内的Resources资源,一种是外部的AssetBundle加载。之前我在博客里面写了很多篇文章来介绍AssetBundle的使用方法和加载策略。按道理来说,这套东西暂时还用得挺好,不过有一个问题就是,打出去的assetbundle文件,不管你是打包成zip包放在安装包一起出去,然后第一次启动的时候解压缩,还是直接把assetbundle放到...

2018-08-06 23:17:32 528

原创 关于AssetBundle拆分力度的探讨

之前曾经写过一篇介绍AssetBundle拆分力度何为合理的文章。不过里面提供的方法思路,被某位网友指出了是有漏洞的。 之前的方法是这样的: 1、首先获取指定文件夹下面的所有资源(这些资源是固定要打AssetBundle的)的依赖,然后做计数器。 2、把统计出来依赖大于2的资源提取出来(我们暂时称为待打包资源)做二次检查。第二次检查的时候,只获取待打包资源的第一层依赖...

2018-08-06 23:16:01 464

原创 谈谈我用Unity5的AssetBundle踩到的几个坑

在上段时间摸索了Unity5的assetbundle用法之后,我在项目里面全面的使用起来,于是发现了一些坑,这里和大家分享一下,顺便说说我是怎样解决的。 首先是图集打包的问题。这个问题在unity5.2版本已经解决了,但在5.2之前确实是一个bug来的。具体的表现是,你把同一个图集标签的散图打包成同一个assetbundle时,这个assetbundle既包含了图集的大图,也包含了散图本...

2018-08-06 23:14:21 1089

原创 再详细的介绍一下Unity5的AssetBundle

之前曾经写了一篇博客介绍Unity5的AssetBundle,结果似乎很受关注。不过似乎很多人看了之后都不懂,主要是因为不太明白AssetBundle是什么,它的依赖关系和结构是什么的,就直接想拿代码去用,而导致了很多人说看不懂啊,说什么有错误啊,诸如此类。我想了一下,还是应该从最基础的东西说起,不厌其烦的说,才会省去大家加我QQ问问题了,毕竟平时上班忙,看到一些人把我当翻译词典查,我肯定会态度不...

2018-08-06 23:13:15 317 1

原创 Unity5的AssetBundle的一点使用心得

先来说说关于旧版本的AssetBundle的事情。 之前我写了一个批量导出AssetBundle的小插件,有朋友留言说我没有解决依赖关系。后来在一位同事的指导下,我终于把这个问题搞清楚了,其实说白了过程就是先扫描所有要打包的资源,然后用AssetDatabase.GetDependencies获得所有的依赖,自己记录起来,由于怕资源之间有重名的,所以最好用AssetDatabase.As...

2018-08-06 23:01:22 226

原创 写了个生成Atlas图集的功能

之前写过Unity3D的sprite packer的用法介绍,那其实只是一个简易的图集制作工具。 最近经常在接触2D骨骼动画,不可避免的使用了各种制作图集的工具。考虑到如果需要把这些工具做出来的动画变成通用,那么一些功能必须自己重新写了,比如这个Atlas图集生成的功能。所以我就自己写了个简单的小工具生成图集。以后的扩展是批量处理了,让项目里面本来用A工具做的骨骼动画的资源,可以一键变成...

2018-08-04 22:34:26 4478 2

原创 NavMesh动态创建寻路网格技术在多障碍物的情况下

demo视频 上次发上来的NavMesh动态生成技术,有网友问我效率的问题,上次的演示只是简单的测试实现的情况,然后简单的测试了在少数障碍物的情况下的时间是0毫秒。这次修改了一下,模型的范围不再是矩形,而是有了一个边角范围。这样的计算比上次的稍微复杂了一点。然后我这次放比较多的障碍物,来测试效率的问题。 看看上面的视频可以知道。在物体不多的情况下,基本上是感觉不出来生成网格的时...

2018-08-04 22:29:35 1466

原创 NavMesh寻路网格自动生成和动态障碍技术

demo视频 在之前的自己写的NavMesh网格寻路功能的基础上,做了个寻路网格动态自动生成的功能,突破了Unity的自带寻路不能动态生成寻路网格,一定要先break再用的缺点。 用法很简单,把可以走的地形设置成一个叫做“Walk”的标签,然后不能走的地方设置成叫“cantWalk”的标签,然后就什么都不用管了,直接运行即可。 在没有任何障碍物的情况下,就和之前的寻路一样...

2018-08-04 22:26:00 6894 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除