自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

纸箱猪的专栏

挨踢民工生涯

原创 我的独立博客

我的独立博客终于搭建好了,欢迎大家造访:zxtechart.com独立博客上不仅仅会记录我在技术方面的学习心得,也会记录我在艺术方面的成长经历。csdn博客依然会继续维护,我的技术文章除了在独立博客上发表也会在csdn上发表。

2017-03-27 21:23:51 504

原创 安卓模拟器、HAXM、Hyper-V

刚才打算用 Android Studio 配套的模拟器测试一个 apk,谁知启动虚拟设备的时候遇到 “Unable to open HAXM device: ERROR_FILE_NOT_FOUND” 这样的报错。有人在 Windows 10 上通过禁用 Hyper-V 并重装 HAXM 解决了该问题。此法在我的环境中有效。简单查了一下,Hyper-V 和 HAXM 都是虚拟化技术。前者是微软...

2018-09-26 13:47:37 2810

原创 List<A>转型为List<B>

假设现在有两个类—— A 和 B ,其中 A 是 B 的子类。将 A(子类)的引用转换为 B(父类)的引用是很普通的事,在任何编程语言中都不存在问题。但是将 List&amp;lt;A&amp;gt; (子类的容器)转换成 List&amp;lt;B&amp;gt; (父类的容器)就不是那么简单的事情了,因为 List&amp;lt;B&amp;gt; 并不是 List&amp;lt;A&amp;gt; 的父类。不过从 .NET 4.0起,我们已经可以在 ...

2018-09-02 10:23:41 417

原创 Unity 实现文字过长显示省略号

需求:假设有一行文字由于界面空间不足只能显示一部分,那么剩余部分需要被截断,并且显示出来的文字末尾需要添加省略号“…”。比如“一二三四五六七八九十”,最终显示出来的样子是“一二三四…”。这个需求在 CSS 中倒是挺好实现的。(题外话:这只限于显示出来的文字只有一行的情况。多行的情况下还是没那么容易,除非采用 WebKit 的 CSS 扩展属性 -webkit-line-clamp,不考虑兼容 ...

2018-08-30 18:13:27 2961 1

原创 EMwI更新:版本1.1 支持批量添加

使 WordPress 媒体库支持外链图片的 External Media without Import 插件自发布以来,就收到了好些用户的反馈。其中相当一部分用户希望插件可以支持批量添加的功能,也就是一次性可以添加多个 URL 。非常惭愧的是,虽然我大约一年前就收到了这样的建议,并且自己也觉得应该添加这个功能,但却一直没能抽出时间做这件事。两个月前本想利用自己睡前或是上学前的零碎时间一点点把代码...

2018-08-29 23:17:07 159

原创 将 Excel 表格导入 Unity 项目

在游戏开发过程中,策划往往会在 Excel 中配置游戏数据,比如物品、技能和 NPC 的属性等。因此如何将 Excel 里的数据导入到游戏中是游戏开发的重要课题。朴实的方法:另存为 csv比较朴实的方法是将 Excel 文件另存为 csv 文件,然后程序员写代码解析 csv 文件。可以将 csv 转换成游戏程序可以识别的格式,比如 Unity 的 ScriptableObject 或是一个硬编码的...

2018-04-29 20:32:27 1304

原创 用 Animation 实现匀速旋转

年初参加 GGJ 的时候,我曾想偷懒用 Animation 实现物体的匀速旋转。思路很简单,只需要0度和360(或-360)度两个关键帧,然后将动画设为循环播放。当时以为这样事情就成了。谁知做出来的效果是下面这样,物体转完一圈后会停一下:我知道问题就在动画曲线上:只要把曲线弄成一条直线就行。但是当时折腾了一会儿也没调出一条漂亮的直线,因此还是改用代码来实现匀速旋转。今天发现其实根本不用手调,只要右...

2018-04-12 16:58:13 5545 1

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

原创 主机无法访问后学到了一些东西

上周五突然发现我无法访问自己的博客了,但是国内的朋友可以访问。心里一惊:不会被封了吧?!可是我的博客一向老实本分啊。关键是,我买的是香港主机,IP是新加坡的,境外主机被封的话难道不应该是国内用户访问不了,国外用户可以访问吗?怎么现在反过来了?所以很可能是主机公园——也就是主机供应商方面的原因,大概线路故障什么的。更何况经过试验,即便从国内访问也无法登陆主机的cPanel管理界面,因此服务商方面故障...

2018-03-27 15:12:39 610

原创 将git工作目录的改动应用到svn

之前在维护自己写的WordPress插件时,为了能够方便地同时向GitHub仓库和WordPress官方的svn仓库提交,我只在本地维护了一个git工作目录,然后用git svn dcommit向svn仓库提交,用git push向GitHub提交。(详见我之前写的日志。)但可能是因为WordPress官方的svn仓库太大,历史记录太多,而git-svn的内部实现又有点问题,所以最近几次我用git...

2018-03-21 08:03:46 267

原创 EMwI插件启用失败的问题

有几名External Media without Import的用户向我反馈说插件启用失败,提示语法错误。其中还有一名用户就此问题在github上向我提了一个issue。具体的错误提示是Parse error: syntax error, unexpected T_STRING in …….external-media-without-import.php on line 25。然而extern...

2018-03-08 09:36:25 170

原创 用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 4523 2

原创 EMwI插件更新:防XSS攻击

8月底的时候External Media without Import插件在github上收到了一个pull request。对方指出我的代码存在XSS漏洞。惭愧,直到最近才腾出时间仔细研究他说的问题。插件的1.0.2版本合并了对方的pull request,修复了该漏洞。在修复之前,我的插件中有如下代码(点击查看源文件):function admin_post_a

2017-10-24 08:29:03 393

翻译 WordPress官方的代码审查意见

在向WordPress官方首次提交插件代码的时候,我收到了对方的反馈邮件。WordPress官方在邮件中对我的代码提出了一些审查意见,其中的内容挺值得学习的,因此在这里分享一下。其实大致意思就两点:一是后端不要信任前端发来的数据,要多做检查和处理,这是做后端的常识;二是尽量使用WordPress已有的API而不要自己直接调用curl。原文如下:There are issues

2017-07-21 07:47:42 718

原创 对一个项目同时使用svn和git两个远程仓库

以前曾经和朋友讨论过在一个项目中同时使用svn和git两个远程仓库的可能,如今真的遇到了这样的实际需求。在开发WordPress插件External Media without Import的时候,因为希望插件能在WordPress官方渠道发布,所以需要在WordPress官方提供的svn远程仓库上托管这个项目。WordPress官方给我提供的svn仓库的地址是https://plugin

2017-07-16 21:45:15 9318

原创 搭建本地WordPress开发调试环境

WordPress的运行环境是很传统的Apache + MySQL + PHP,其中PHP用的是PHP5,因此部署过程中应该不会有很难解决的问题,只不过步骤可能会比较繁琐。除此以外就是调试的配置需要摸索一阵子。一开始我曾想过花钱买MAMP PRO来搭建WordPress的本地开发环境(MAMP免费版本只支持PHP7),图省事。但后来还是决定自己折腾,省下这笔钱。于是花了那么几天自己搭建了一

2017-06-23 07:18:51 5871

原创 一个让WordPress媒体库支持外链图片的插件

最近有一个月左右没更新了,因为这个月的业余时间都在忙于一个WordPress插件:External Media without Import。其实只是很小很简单的一个插件,代码不过短短几百行。不过这东西一旦被当成产品认真做起来,依然让我感到——每天在上班时间以外,应对完工作上的需求和bug之后,接着还要在业余时间认真做好另一个产品是多么劳心劳力。这是我正式发布并打算认真维护的第一个个人

2017-06-05 10:05:39 11702 11

原创 排查Mac中的Finder无限卡住的问题

某个周末,Mac突然抽风。Finder卡住,鼠标变成了风火轮一直在转。除了Finder以外的其它程序可以打开勉强使用,但那些程序打开没多久也会卡住。用活动监视器也无法让Finder强制退出;用命令行killall杀掉Finder进程也没用,它马上就会重启然后继续卡住。重启系统也没用。于是Finder就一直这样处于未响应状态,进而导致整个系统卡死

2017-05-10 09:41:12 25660 2

原创 Ionic中不合理的view层级导致afterEnter没有被调用

在公司的ionic项目中我们定义了如下状态:$stateProvider .state('A', { abstract: true, views: { root: { template: '' } } }) .state('A.B', { url: '/A/B', templateUrl: 'A

2017-03-27 14:01:56 1833 1

原创 在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 8236 7

原创 Unity的Scene视图中Irradiance模式的作用

Unity官方文档的说明是(下面是我自己翻译的):该模式只显示间接光照(Enlighten生成的实时GI光照贴图的内容)。模型表面的交错覆盖图显示的是辐照度(irradiance)贴图的分辨率。如果实时GI被禁用,那么该视图模式不可选。试验了一下,效果如下图:上图的场景中有一束光打在红色长方体上。光线接触长方体后变成红色,反射到球体和地面上。在常用的Shad

2017-02-22 18:57:39 1171

原创 在Blender中通过法线贴图和顶点位移实现石块地面的凹凸感

先看最终效果:这个地板在mesh层面其实就只是一个切割(Subdivide)了很多次有很多顶点的Plane:其实如果只加法线贴图而不做顶点位移的话,一个只有四个顶点的Quad也可以。添加颜色贴图(可通过3D View的Texture Mode查看贴图应用效果):和法线贴图:注

2017-02-17 18:20:13 6519

原创 Unity中有两种Animation Clip

在Unity中,我们有两种方法创建Animation Clip。一种(后面简称方法一)是选中挂载了Animation组件的GameObject,在Animation窗口中点击Create New Clip创建出来的Animation Clip。另一种(后面简称方法二)是在Project窗口的空白地方右键单击,选择Create->Animation创建出来的A

2016-05-01 21:49:33 15819 4

原创 半透模型内部的深度显示问题

在写半透shader时,我们一般会关闭ZWrite,以免离摄像机近的半透物体会遮挡离摄像机远的半透物体,导致后者完全显示不出来。(如果不理解为何会有这个现象,需要先学习深度缓存、ZWrite和ZTest的概念。)但是有一次我们在立方体(Cube)上应用一个关闭了ZWrite的半透shader时,却遇到了问题。请看下面的立方体:注意红框框住的那片花纹。它位

2016-03-06 20:45:54 1659

原创 从圆心向外流光的魔法阵shader

终于实现出美术同事想要的这个效果了:  下面就来讲述我写这个shader的思路。  首先需要一张魔法阵的底图:  用一个平面(Plane)做模型,将底图贴在模型上:  代码如下:Shader "Inception-Fx/FlowInsideOut" { Properties { _M

2016-02-20 23:35:14 7211 9

原创 2015年总结

2015年,对我来说可能是进入了瓶颈,并且还有所退步的一年。  这一年已经不再像2014年那样几乎将所有工作重心都放在UI上了。项目的UI风格、工作流程基本已经固定下来,UI框架和配套工具也已经趋于稳定,其他程序员对做UI也已经很熟练。我已经被解放出来可以去做很多别的事。这一年做了一个跨服商店大系统,用php搭了一个gm服务器(顺便学了学php和workerman框架),接下了客户端打包工具和资源加

2016-02-10 13:25:49 916 3

原创 Unity Shader中顶点坐标的大小似乎会受到Draw Call合批的影响

最近美术同事希望我能帮忙做一个由内而外流光的shader,效果类似下图:我最初的思路是利用模型的顶点坐标:美术制作模型的时候就将模型的原点设在中心。这样我在vertex shader中用length(i.vertex)求出每个顶点到中心的距离,进而在fragment shader中求出每个像素是否该显示流光。于是就想做个实验,看看Unity中的模型顶点的分布

2016-01-12 13:11:45 2151 2

原创 有时候没必要用回调

回调是个好东西。它可以让程序变得更灵活,模块与模块之间的代码更加隔离,尤其写异步逻辑的时候用回调写起来会很方便。在很长一段时间里我经常喜欢给自己的代码设计回调。比如当模块A的某段逻辑中需要执行模块B的函数,而这两个模块在语义上给人感觉没什么关联时,我就会在A的逻辑中安插回调,让B的函数注册这个回调。感觉这样代码更有设计感,更符合面向对象的风格。   但如今写上层逻辑写多了之后,我这个喜好有

2015-05-16 19:00:23 918

原创 如何更好地给同事讲代码?

我们技术团队有两个习惯:一是程序员写好一个新的比较重要的系统,或是引入了一个第三方框架或库后,主程会要求程序员做一个ppt,在会议室里给所有程序与QC做一次团队分享;二是程序员写好一个新系统,或做了比较大的或比较重要的修改后,要知会相关QC,并把QC叫到电脑前,一对一把相关代码给QC讲一遍。   我认为做ppt团队分享可以起到两个重要作用:一是让团队成员之间时常互通有无,避免各人只了解自

2015-04-11 14:58:11 2332 1

原创 该多写写业务了

最近通勤的路上一直在读《走出软件作坊》。书中以业务为中心的思想让我感受颇深。虽说作者一直专注在企业管理软件行业,书中的很多具体事例方法也是就这个行业而展开,但是就软件开发而言,乃至放大到做事情而言,道理都是一样的。让我印象最深的一个段落是讲作者手下一个新手,在开发中极度追求OO与设计模式,搞得代码很麻烦,自己看自己的代码赏心悦目,别人看他的代码云里雾里;而作者的代码简洁清晰,从中很容易就可以看出业

2015-04-04 18:11:36 1002

原创 玩玩PHP

最近项目需要做GM工具。我想把它做成Web的形式。最后决定用PHP做,也见识一下这门被黑了无数次的“世界上最好的语言”。后来发现PHP写起来真是挺爽的。目前让我感觉最爽的有两点:一是可变函数的特性。二是格式化字符串。另外还发现一个很好用的中国人写的PHP socket服务器框架:http://www.workerman.net/。

2015-03-07 12:18:55 682

原创 寒假捉虫记——从一段损坏的调用栈开始折腾

放假在家,继续调试《家园》。目前的进度是MinGW上的编译链接都已通过,游戏程序也已经可以跑起来并进入主菜单界面,但加载关卡之后就会闪退。这让我想起了以前上中学时玩盗版游戏的日子。那个年代的单机游戏估计大多是用C/C++写的,一个不小心的内存操作就会让进程崩掉;而且那个年代的操作系统没现在稳定,可能破解技术也不够先进,从电脑城里买来的五六块钱的盗版游戏质量参差不齐。很多游戏跑着跑着就闪退,有的甚至

2015-02-18 13:51:16 3809

原创 gcc链接静态库时对待.a文件和.o文件的不同

很多人都知道,gcc在链接静态库时是从前往后找符号。因此如果一份文件foo引用了静态库bar.a,那么在链接命令中,bar.a必须放在foo的后面,也就是像gcc ... foo ... bar.a这样;否则链接时会报找不到定义的错误(即undefined reference to ...)。如果我们在链接命令中,直接用.o文件替换.a文件,那也需要遵循gcc的这种链接顺序吗?可以用gcc .. bar.o ... foo这样的链接命令吗?可以做个简单的试验。

2015-02-11 12:16:22 14509 3

原创 使用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 4101 2

原创 避免频繁调用GameObject.SetActive

昨天又从主程那学到一招Unity+NGUI性能优化方法。让对象一直保持激活状态(activeInHierarchy为true),而原来的SetActive(false)改为将对象移到屏幕外,SetActive(true)改为将对象移回屏幕内。

2015-02-06 10:15:37 20451 4

原创 Unity+NGUI性能优化方法总结

一共9招。

2015-01-31 22:52:00 42376 14

原创 2014年总结——工匠精神篇

2014年,同事(尤其是程序与测试同事)在我身上用得最多的词,莫过于“纠结”。我把这种“纠结”看做是自己的工匠精神,可能叫技术宅精神也行。

2015-01-24 16:06:19 3878 4

原创 2014年总结——协作篇

2014年,技术外的事情比技术内有更多的波澜。年初,项目从零开始,团队也是由五湖四海拉来的一帮人组成;策划对ARPG没多少概念,美术对移动端斜45度视角没多少经验,程序和美术对Unity 3D则都不熟。这是最难熬的一个阶段,持续了大半年。

2015-01-18 16:44:25 1393 2

原创 2014年总结——技术篇

2014年我在CSDN的日志数量跌到8篇,看来这一年又比以前更忙了。其实无论在技术内还是在技术外,我在2014年的收获都比2013年多。在一个初创的团队中做事,感觉还是很不一样的。环境变化之快,意外之多,需要我更快速地学习更多更广的技术。  这一年在技术上最大的意外,莫过于将过半的时间都花在了客户端,花在了Unity——尤其是NGUI上。这和我年初主攻服务端Linux和lua,只是顺带

2015-01-05 00:02:03 1647 2

原创 在Linux上为指定IP端口模拟网络收发包延迟

编写网络应用程序时,我们一般都是在网络状况良好的局域网甚至是本机内进行测试调试。有没有办法在网络状况良好的内网环境中,在不改动程序自身代码的前提下,为应用程序模拟复杂的外网环境——尤其是网络延迟呢?这是我在学校写网络程序时就有过的想法,只是一直没认真研究,直到最近在公司编写跨服代码。  跨服涉及多台服务器之间,还有服务器与客户端之间的通讯,流程很复杂,其中每一步都要正确处理网络异常延迟

2015-01-02 18:06:59 5403 3

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