自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿赵的博客

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

  • 博客(73)

原创 关于博客迁移

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

2018-08-28 09:24:11 698

原创 Unity昼夜变化效果

Unity动态昼夜变化Lightmap+天空盒 最近一直在对旧项目的场景进行重新烘焙,于是顺便做了个昼夜变化的效果。没有用实时光,而是用了Lightmap烘焙+天空盒。上面的视频,前面一段是4个时间点的瞬间切换,后面一段是4个时间点的过渡切换效果。简单分享一下思路:1、需...

2020-03-28 14:28:39 1064

原创 由于升级Unity版本导致的Lightmap错乱问题

      由于某些迫不得已的原因,对一个几年前的旧项目升级了Unity的版本,从Unity5.5.4升级到Unity2017.4.25。      升级过程没什么太大问题,就是某些api已经过时了修改一下代码就好。但检查美术场景的时候,发现之前经过烘焙Lightmap的场景,...

2020-03-19 15:35:32 265

原创 安卓obb文件的使用进阶

      谷歌后台关于obb文件使用,有2个比较重要的设定      1、可以上传新版本的apk,指定使用旧版本的obb文件。      2、可以使用patch.obb文件,对正式的obb文件打补丁。 ...

2020-03-16 14:50:28 1098 2

原创 解决部分手机读取obb失败的问题

      最近发现,有很小一部分海外的玩家在谷歌商店下载游戏之后,进游戏黑屏。从bugly上面查看报错日志,发现是读取obb文件失败了。谷歌商店规定超过100m的apk,需要分离obb上传。所以这种情况只会出现在谷歌商店的游戏包里面。      我的项目里面读取obb是分成2...

2020-03-16 10:05:25 1620

原创 故事与生活

自从自己网易的博客没了之后,很久没有随便聊些什么了。今天来讲几个小故事,随便聊一下,和大家探讨一下生活,如果觉得说得不对,也欢迎留言讨论。一、  以前我曾经担任过音乐协会的会长。有一天,音乐协会的人在路边大排档吃宵夜。两位妙龄小姐姐拿着吉他过来,然后递给我们一张歌单请我们点歌,10元3首。小姐姐们生意似乎还不错,一桌一桌的唱过来,点的人不少。我们一看价格不贵,图个开心,于是就点了歌。两位小姐姐...

2019-12-24 11:09:26 128 1

原创 Unity的AssetBundle使用总结

Unity的AssetBundle使用总结一、AssetBundle的压缩方式对比二、AssetBundle的依赖拆分策略三、AssetBundle的卸载策略AssetBundle作为Unity引擎的资源加载管理和热更新手段,在各大项目内普遍的使用着。AssetBundle使用方式简单,只要设置AssetBundleName,然后打包出文件,在运行过程中加载就可以使用,但很多细节上的问题,会影响...

2019-12-20 20:30:21 428 1

原创 2019年第一次画画,顺便评价一下ipadPro和Surface的画画优劣

难得放假了,除了弹吉他以外,也画一下画。绘画的过程也发上来给大家看看:接下来说说绘画的工具。我是使用iPadPro2 10.5英寸+Apple Pencil来画画的。一开始我打算使用Surface Go来画画的,我想,之前我都是拿Wocam画板+PhotoShop来画画的,Surface能直接在屏幕上画画,按道理应该更好用才对。Surface Go买回来几个月,那支笔都没怎样...

2019-02-04 08:59:05 26443 2

原创 关于在移动平台读取unity资源目录文件的一些小问题

最近项目要上越南版本,然后需要接Facebook功能。其实在之前的各个地区的版本里面我的游戏都接过Facebook功能的。这次唯一的区别是越南那边的运营想在 Facebook里面直接显示游戏的名字是越南文的名字,而sdk是读取ios的product name作为显示的。游戏之前接的其他地区的product name都是使用英文的,于是感觉很简单,直接把xcode里面的product name改成...

2019-02-01 16:36:13 496

原创 Unity发布游戏在iOS设备上出现的字体问题

我的游戏项目在上段时间已经上了泰国版本一段时间了,在上线前遇到一个问题,被搞到焦头烂额的,于是记录一下。问题是这样的,项目本身是用Unity5.5.4版本制作的,游戏里面内置了一个精简版的微软雅黑的字体。然后在打包ios之后,发现所有的泰文都变成了一个方块里面有个问号。于是觉得很奇怪,拿了项目组另外一个项目来试,这个项目是用Unity5.6.6来制作的,发现能正常显示泰文。找找差别在哪里,拷...

2019-02-01 16:17:55 1881 8

原创 集群算法介绍

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

2018-08-27 08:53:48 3545 5

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

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

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

原创 lua代码的检查

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

2018-08-25 09:30:41 2582

原创 代码对性能的影响

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

2018-08-24 09:03:48 667

原创 MVC设计模式的介绍

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

2018-08-24 09:03:07 5303

原创 面向对象的概念介绍

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

2018-08-24 09:02:18 15543 3

原创 事件机制的入门说明

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

2018-08-24 09:01:34 169

原创 Unity3D的断点调试功能

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

2018-08-24 08:58:11 5231

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

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

2018-08-24 08:48:06 3333

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

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

2018-08-24 08:42:52 6425 3

原创 骨骼动画原理和优化

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

2018-08-24 08:38:04 4783 3

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

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

2018-08-23 09:25:36 5572

原创 Unity隐藏的资源引用坑

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

2018-08-23 09:15:26 2209 2

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

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

2018-08-23 09:09:58 449

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

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

2018-08-22 08:59:59 2515 1

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

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

2018-08-22 08:55:23 398

原创 GPU Skinning介绍

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

2018-08-22 08:50:28 6485 5

原创 GPU instancing介绍

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

2018-08-22 08:48:16 7593

原创 MaterialPropertyBlock

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

2018-08-22 08:46:10 5142 1

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

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

2018-08-22 08:43:42 2984 4

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

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

2018-08-17 09:21:02 924

原创 对Unity3D的PBR的初步研究

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

2018-08-17 09:17:42 5179

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

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

2018-08-13 23:17:40 8575 1

原创 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 1740

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

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

2018-08-13 23:11:13 1708 3

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

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

2018-08-13 23:07:41 1880

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

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

2018-08-13 23:04:39 2756 1

原创 图片数字化程序

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

2018-08-13 22:56:28 765

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

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

2018-08-06 23:25:49 420

原创 谈谈最近很火热的VR

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

2018-08-06 23:22:36 231

空空如也

空空如也

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