
游戏开发
文章平均质量分 69
纸箱猪
热衷于创造和制作的技术职人。
展开
-
Visual Studio + UnrealScrip IDE调试
这两个月经常在捣腾UnrealScript,因为客户端的很多游戏逻辑都是用它实现的。作为脚本语言,UnrealScript写起来自然是比C++方便很多,可调试起来却颇为麻烦。一开始几位同事给我推荐了nFringe,可不知为什么nFringe在我的开发环境中就是没法使用,而且据说免费版的nFringe只支持调试文件名为UDK.exe的可执行文件,真是让人甚为不爽。于是只好采用最古老的办法——用`lo原创 2012-10-04 22:30:14 · 3688 阅读 · 0 评论 -
从圆心向外流光的魔法阵shader
终于实现出美术同事想要的这个效果了: 下面就来讲述我写这个shader的思路。 首先需要一张魔法阵的底图: 用一个平面(Plane)做模型,将底图贴在模型上: 代码如下:Shader "Inception-Fx/FlowInsideOut" { Properties { _M原创 2016-02-20 23:35:14 · 9926 阅读 · 11 评论 -
半透模型内部的深度显示问题
在写半透shader时,我们一般会关闭ZWrite,以免离摄像机近的半透物体会遮挡离摄像机远的半透物体,导致后者完全显示不出来。(如果不理解为何会有这个现象,需要先学习深度缓存、ZWrite和ZTest的概念。)但是有一次我们在立方体(Cube)上应用一个关闭了ZWrite的半透shader时,却遇到了问题。请看下面的立方体:注意红框框住的那片花纹。它位原创 2016-03-06 20:45:54 · 1970 阅读 · 0 评论 -
Unity中有两种Animation Clip
在Unity中,我们有两种方法创建Animation Clip。一种(后面简称方法一)是选中挂载了Animation组件的GameObject,在Animation窗口中点击Create New Clip创建出来的Animation Clip。另一种(后面简称方法二)是在Project窗口的空白地方右键单击,选择Create->Animation创建出来的A原创 2016-05-01 21:49:33 · 21043 阅读 · 5 评论 -
Unity的Scene视图中Irradiance模式的作用
Unity官方文档的说明是(下面是我自己翻译的):该模式只显示间接光照(Enlighten生成的实时GI光照贴图的内容)。模型表面的交错覆盖图显示的是辐照度(irradiance)贴图的分辨率。如果实时GI被禁用,那么该视图模式不可选。试验了一下,效果如下图:上图的场景中有一束光打在红色长方体上。光线接触长方体后变成红色,反射到球体和地面上。在常用的Shad原创 2017-02-22 18:57:39 · 1690 阅读 · 0 评论 -
在Unity的后处理shader中通过屏幕像素坐标和深度贴图反推世界坐标
要通过屏幕像素坐标反推世界坐标,就要知道世界坐标是如何变换为屏幕坐标的。理论上,将世界坐标(x, y, z)变换为(u, v, d)的过程如下:第一步,将坐标点(x, y, z, 1)乘以从世界坐标系到相机坐标系的转换矩阵(World-to-Camera 4x4 Matrix),将坐标点(x, y, z, 1)变换为相机空间(Camera Space)坐标,转换后的坐标为(x1, y1原创 2017-03-02 17:59:59 · 11854 阅读 · 7 评论 -
在Blender中通过法线贴图和顶点位移实现石块地面的凹凸感
先看最终效果:这个地板在mesh层面其实就只是一个切割(Subdivide)了很多次有很多顶点的Plane:其实如果只加法线贴图而不做顶点位移的话,一个只有四个顶点的Quad也可以。添加颜色贴图(可通过3D View的Texture Mode查看贴图应用效果):和法线贴图:注原创 2017-02-17 18:20:13 · 9848 阅读 · 0 评论 -
用UGUI Slider做血条时遇到的一个小问题
前段时间想在小游戏中做一个血条UI,自然而然地想到了用UGUI的Slider。在Unity中可以通过编辑器菜单一键创建一个Slider。这样的一个Slider里会包含Background、Fill Area和Handle Slide Area三个部分。其中Handle Slide Area就是滑块。血条不需要滑块,因此要将它删掉。刚用编辑器菜单创建的Slider。需要将Handle Slide A...原创 2018-03-01 23:36:21 · 6513 阅读 · 3 评论 -
Aspect Ratio Fitter 和 Image
UGUI 里面 Aspect Ratio Fitter 的作用是保持一个 UI 控件的宽高比。然而 Image 自身就有一个 Preserve Aspect 属性用于保持自己的宽高比。因此起初我就想 Image 是不是就用不上 Aspect Ratio Fitter 了,或者说 Image 自身的 Perserve Aspect 的属性是不是多余的。后来发现并不完全是。前段时间遇到一种情况必须要使...原创 2018-04-10 20:33:24 · 2535 阅读 · 0 评论 -
用 Animation 实现匀速旋转
年初参加 GGJ 的时候,我曾想偷懒用 Animation 实现物体的匀速旋转。思路很简单,只需要0度和360(或-360)度两个关键帧,然后将动画设为循环播放。当时以为这样事情就成了。谁知做出来的效果是下面这样,物体转完一圈后会停一下:我知道问题就在动画曲线上:只要把曲线弄成一条直线就行。但是当时折腾了一会儿也没调出一条漂亮的直线,因此还是改用代码来实现匀速旋转。今天发现其实根本不用手调,只要右...原创 2018-04-12 16:58:13 · 11194 阅读 · 3 评论 -
将 Excel 表格导入 Unity 项目
在游戏开发过程中,策划往往会在 Excel 中配置游戏数据,比如物品、技能和 NPC 的属性等。因此如何将 Excel 里的数据导入到游戏中是游戏开发的重要课题。朴实的方法:另存为 csv比较朴实的方法是将 Excel 文件另存为 csv 文件,然后程序员写代码解析 csv 文件。可以将 csv 转换成游戏程序可以识别的格式,比如 Unity 的 ScriptableObject 或是一个硬编码的...原创 2018-04-29 20:32:27 · 2543 阅读 · 0 评论 -
2015年总结
2015年,对我来说可能是进入了瓶颈,并且还有所退步的一年。 这一年已经不再像2014年那样几乎将所有工作重心都放在UI上了。项目的UI风格、工作流程基本已经固定下来,UI框架和配套工具也已经趋于稳定,其他程序员对做UI也已经很熟练。我已经被解放出来可以去做很多别的事。这一年做了一个跨服商店大系统,用php搭了一个gm服务器(顺便学了学php和workerman框架),接下了客户端打包工具和资源加原创 2016-02-10 13:25:49 · 1046 阅读 · 3 评论 -
2014年总结——协作篇
2014年,技术外的事情比技术内有更多的波澜。年初,项目从零开始,团队也是由五湖四海拉来的一帮人组成;策划对ARPG没多少概念,美术对移动端斜45度视角没多少经验,程序和美术对Unity 3D则都不熟。这是最难熬的一个阶段,持续了大半年。原创 2015-01-18 16:44:25 · 1558 阅读 · 2 评论 -
2014年总结——技术篇
2014年我在CSDN的日志数量跌到8篇,看来这一年又比以前更忙了。其实无论在技术内还是在技术外,我在2014年的收获都比2013年多。在一个初创的团队中做事,感觉还是很不一样的。环境变化之快,意外之多,需要我更快速地学习更多更广的技术。 这一年在技术上最大的意外,莫过于将过半的时间都花在了客户端,花在了Unity——尤其是NGUI上。这和我年初主攻服务端Linux和lua,只是顺带原创 2015-01-05 00:02:03 · 1846 阅读 · 2 评论 -
论游戏中Buff的实现
源地址:http://blog.codingnow.com/2007/11/inertia_thinking.html晚上在办公室晃荡,对面的同事在加班写代码。我凑上去看看在写什么。我向他了解了后明白了,大约是服务器上角色 buff 的实现吧。BUFF 这个术语是现在网络游戏中非常常见的。给角色加一个 BUFF 通常意味着对虚拟角色的一些数值上的临时修正:例如,攻击转载 2012-09-13 14:30:20 · 7116 阅读 · 7 评论 -
对这几天服务器崩溃的小结
3月28日,《寻龙》不删档测试正式开启。可是才开服几天,服务器就出现了多次崩溃。造成崩溃的代码有三处,其中有两处造成了全服掉线,而且这两处代码都是由我负责的,实在是一大耻辱。 第一处崩溃位于物品拾取逻辑中。怪物死亡掉落物品的时候,服务器会为每件物品创建一个对象。玩家对物品进行掷骰分配时会用到指向这些物品对象的指针。怪物尸体消失的时候,如果尸体里的物品还没有被拾取,物品对象就会随着尸体原创 2013-03-31 15:07:49 · 1220 阅读 · 0 评论 -
绩效考核
前天迎来了人生第一次绩效考核。领导们对我给予了很大肯定,我也很受鼓励。自夸的话不必多说。倒是在考核中,我和领导们谈到了两个比较困扰的问题。 其实两个问题都可以归结为一个问题:如何有效利用自己极其有限的业余时间来提高自己?工作之后,自由时间远远没有读书时那么多了,下班回到家吃完饭收拾好通常都已经是9点多。一方面,现在工作上的任务越来越重,领导还给了我新的挑战——一人承担已有服务器运维监原创 2013-04-25 01:32:18 · 1220 阅读 · 0 评论 -
第一次遇到死锁——记一次程序卡住问题的错误排查过程
10月24日,周四 我负责的游戏启动程序(Launcher)更新上线后,临下班前接到运营消息,反映部分网吧启动Launcher后无反应。跑到客服现场,通过QQ远程桌面观察到如下现象:双击程序图标后,程序出现在任务管理器进程列表里,但无任何其它反应,没有任何界面弹出;然后程序就一直这样无任何响应,只能在任务管理器中把进程杀掉。 于是在现场通过Process Explore原创 2013-10-31 12:25:26 · 10099 阅读 · 3 评论 -
过度设计,被教育
昨天完善创建角色的游戏服务端逻辑。创建角色失败时,服务端要告知客户端具体的错误原因——比如角色名不可用,或SQL语句错误等。代码中原有的思路是,向客户端发一个ID为CREATE_PLAYER_ERR的包(这个ID是应用层的协议),包内含有具体的错误码,客户端在CREATE_PLAYER_ERR包的处理函数中根据错误码向玩家显示具体的出错消息。 我们的服务端是由C++和lua原创 2014-02-19 19:10:55 · 1589 阅读 · 2 评论 -
Unity+NGUI性能优化方法总结
一共9招。原创 2015-01-31 22:52:00 · 44867 阅读 · 15 评论 -
避免频繁调用GameObject.SetActive
昨天又从主程那学到一招Unity+NGUI性能优化方法。让对象一直保持激活状态(activeInHierarchy为true),而原来的SetActive(false)改为将对象移到屏幕外,SetActive(true)改为将对象移回屏幕内。原创 2015-02-06 10:15:37 · 23366 阅读 · 4 评论 -
寒假捉虫记——从一段损坏的调用栈开始折腾
放假在家,继续调试《家园》。目前的进度是MinGW上的编译链接都已通过,游戏程序也已经可以跑起来并进入主菜单界面,但加载关卡之后就会闪退。这让我想起了以前上中学时玩盗版游戏的日子。那个年代的单机游戏估计大多是用C/C++写的,一个不小心的内存操作就会让进程崩掉;而且那个年代的操作系统没现在稳定,可能破解技术也不够先进,从电脑城里买来的五六块钱的盗版游戏质量参差不齐。很多游戏跑着跑着就闪退,有的甚至原创 2015-02-18 13:51:16 · 4398 阅读 · 0 评论 -
使用NGUI时遇到物理引擎错误
使用NGUI时偶尔会遇到以下两个报错:Supplied NxActorDesc is not valid. createActor returns NULL. 以及 Actor::updateMassFromShapes: Can't compute mass from shapes: must have at least one non-trigger shape! 如果在NGUI中遇到了物理引擎的报错,或者UICamera没感知到触屏,则检查一下各个BoxCollder的尺寸是否正常。这个尺寸会受到多个原创 2015-02-06 12:19:35 · 4312 阅读 · 2 评论 -
Unity Shader中顶点坐标的大小似乎会受到Draw Call合批的影响
最近美术同事希望我能帮忙做一个由内而外流光的shader,效果类似下图:我最初的思路是利用模型的顶点坐标:美术制作模型的时候就将模型的原点设在中心。这样我在vertex shader中用length(i.vertex)求出每个顶点到中心的距离,进而在fragment shader中求出每个像素是否该显示流光。于是就想做个实验,看看Unity中的模型顶点的分布原创 2016-01-12 13:11:45 · 2564 阅读 · 2 评论 -
Unity 实现文字过长显示省略号
需求:假设有一行文字由于界面空间不足只能显示一部分,那么剩余部分需要被截断,并且显示出来的文字末尾需要添加省略号“…”。比如“一二三四五六七八九十”,最终显示出来的样子是“一二三四…”。这个需求在 CSS 中倒是挺好实现的。(题外话:这只限于显示出来的文字只有一行的情况。多行的情况下还是没那么容易,除非采用 WebKit 的 CSS 扩展属性 -webkit-line-clamp,不考虑兼容 ...原创 2018-08-30 18:13:27 · 6656 阅读 · 2 评论