Unity中实现纹理色块替换

项目开发笔记(十二)

哈,又一年了。在小时候过年总是非常有感觉,也满心期待。长大一点到了17 18岁的阶段,慢慢感觉过年失去味道 慢慢变成形式化,觉得过年传统做的节目都太无聊。又长大一点 到了25 26岁,过着常年背井离乡的生活 反而小时候对过年的期待又回来了,这几年我甚至非常热忱的参与到 杀猪 贴门神 拜天地等活动中…说回正题,我最近遇到一个需求.

一个小需求

对纹理中的指定色块,使用另一个纹理替换,如下图,这个图我们叫它原纹理

继续阅读“Unity中实现纹理色块替换”

构建工具一体化的实现

项目开发笔记(十一)

终于又可以继续我的项目开发笔记了,经过大半年的沉淀,我分别捣鼓了很多东西,大多数都应该整理笔记记录下来。构建工具一体化的实现我打算形成一个系列,把我的思路和部分实现记录一下。这里主要是针对Unity项目,在我实现整个流程之后 发现针对其他任何项目应该也类似,不管是需每次编译整个源码的cocos项目 还是AS项目Android原生项目。

相关涉猎

运行环境

Win10,OSX,Web

技术栈

SVN(or Git),应用在项目版本和源码管理

BAT批处理,SHELL脚本,应用在本地编译和打包

Jenkins,应用在控制远程执行打包,控制构建前后事件和任务

具体项目本身的适应,我准备拿Unity项目作为例子,这里如何把Unity的打包流程一键化是keypoint

继续阅读“构建工具一体化的实现”

有时候你不需要搜索代码

编程感悟

最近一段时间团队里新加入了一些小伙伴,我一直希望大家在参与具体项目功能开发之前,先好好熟悉框架熟悉代码熟悉流程,在开始某个模块开发之前,先好好熟悉产品文档,先构思一翻。奈何有的同学似乎还是按照他原本的工作套路做事,无奈。

今天主要说说代码里的搜索功能(主要是指微软的IDE神奇VS里的代码搜索功能)

Visual Studio里的代码搜索功能非常丰富,常用的有:

0x00. Ctrl+F 主要是当前源代码文件里的搜索或者替换
0x01. Ctrl+Shift+F 主要是当前项目或者当前解决方案全局的搜索或者替换
0x02. Ctrl+;(冒号) 搜索解决方案资源管理器,主要是搜索当前解决方案ListBox里的源文件名字
0x03. Visual Assits 中的Shift+Alt+O 快速打开源文件,其中每输入一个字符 可根据当前字符定位最接近的源文件
0x04. Visual Assits 中的Shift+Alt+S 和 Shift+Alt+F 等
注意 Visual Assits 是一款最常用的VS插件,本人是烂番茄的深度中毒者。。近几年还购买了正版,略贵但是却物超所值的一个插件。

使用上述的几个功能,极大的提升了开发效率,而且我也几乎每天都需要使用它们。但是,针对新加入项目的同事,或者对项目组成一点不熟悉对代码基本结构毫不了解的同学我真的严重不推荐使用。

继续阅读“有时候你不需要搜索代码”

成为负一代

买房这件事

终于还是做了这一件事 — 买房.换一种很说法 — 终于成为了负一代.

这个时代,是一个大多数人都买不起房的时代,我也深知目前楼市泡沫严重,极有可能崩盘,即使如此我依旧出手的原因只有一个 – 刚需.

我老家风景秀丽,山水毫无污染,家家户户都拥有土地,山,是的每家都有山.下图就是我的家乡

虽然我的老家得天独厚,非常适合人居住,但是有一个非常严重的问题,由于人口最近十年来的迁移变化,导致家乡的人口急速减少,幼儿园小学初中等教育设施直接关门,我的小学母校初中母校现在已经不复存在,距离我家最近的小学在距离家里20KM的镇上,最近的初中在距离家里50KM的县里,最近的医院在距离家里50KM的县里.这些都是我不得不面对的问题..这些也是我下定决心买房的因素之一.

在过去的两个月(2016.09,10)的时间里,多次奔波之后,这件事情已尘埃落定.回想起整个过程,发现需要了解的事情实在太多,有必要写一篇文章记录一下.

继续阅读“成为负一代”

当我是个面试官(一)

最近代码量有所减少
一来是业余项目进入维护和交接阶段;
二来新的个人项目处在构思起步中;
三来公司项目处在平缓过度期;
四来近两月都参与公司招聘工作,负责技术基础功底面试,也就是所谓的技术一面。公司目前基本面试分为三面:HR面,技术一面,技术二面(基本就是CTO面了);
五来九月十月份私人事务繁忙,老家深圳往返多次,这两月我做了一件可能有点意义的事情,关于这件事情改天再写篇文章记录一下。

这里说说我作为面试官的经历

在我呆过的公司中几乎都参与了程序员的招聘工作,每一次都有不同的感受。

继续阅读“当我是个面试官(一)”

Unity提审AppStore踏坑指南

这是一篇把Unity做的应用提审到AppStore的踏坑指南,记录这个过程中遇到的几乎所有问题。

!!注意!! 这篇文章可能具有一定时效性,由于苹果审核策略一直在更改,所以文章中所述言论仅仅基于当前的审核制度。

首先…Show一下苹果对我提交的应用的拒绝记录(我的内心此刻布满黑人问号)

从上图的时间看,苹果的审核速度大大加快,与2013年的审核速度简直云泥之别.然而反观国内的某些平台审核..越来越慢(客观非黑)

继续阅读“Unity提审AppStore踏坑指南”

Android拍照并添加进相册

最近有个小需求,在移动设备(iOS / Android)中应用调用拍照并把所拍照片存入相册。我原本以为这是一个很简单的事情,不就拍个照然后把照片丢进相册?心想最多100行代码即可解决问题,谁知还是踩中坑。且听我一一分解。

必备权限

<uses -permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses>
<uses -permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses>
<uses -permission android:name="android.permission.CAMERA"></uses>

添加入 AndroidManifest.xml 中

执行拍照

File destDir = new File(m_ImageRootPath);
if (!destDir.exists())
{
      destDir.mkdirs();
}

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(m_ImageRootPath , m_ImageName)));
startActivityForResult(intent, 100);

代码中 m_ImageRootPath 为照片所存目录,m_ImageName为照片名。注意,若拍照不止一张 则照片名字最好每次不一样,否则你打开相册有可能每次都只能看到一张照片。

继续阅读“Android拍照并添加进相册”

变化如梭

忽然之间就到了年中,7月也在还没反应过来就已经到了最后一天。虽然才到年中,但是今年遇到的事情已经足够多了。简单记录一下。

工作

是的,和很多坚如磐石的同学朋友不一样,我的工作又变动了(上次变动是一年之前),又经历了一次 离职谈判散伙聚伙,还好这次也不需要经历那种 投简历 – 约面试 – 谈薪资 的过程。可能是由于不是第一次经历这种事情 所以丝毫没有任何的离别情绪和不舍,一年前从毕业后的第一家公司离职 满腔遗憾和愁绪还是略微大一点点,现在的这次反而落得轻松自在。目前我已经在新的公司入职半个月,从效率和任务完成度 心态 甚至代码量上看 这次的工作变动是一个好事。

这次离职也并不是那么的顺利,如果敞开说 甚至可以唠上一整天,我们这个环境下 10个公司有9个都是耍流氓的,原本以为可以轻松的拿到赔偿(N+1)走人,结果谈判了半个月才顺利结束了合同!这是这段工作中唯一的遗憾。

这次的离职后 有朋友邀请我去国外工作,这对我来说是巨大的诱惑,从金钱和发展上都是,毕竟从技术上讲 我现在应该处在一种舒适区,我内心迫切的想跳出这种舒适区,从金钱上讲,我目前的阶段已经很难找到直接double薪酬的工作了(除非天降大运),考虑半个月之后 我居然拒绝了他。目前已经在新的公司和项目组工作了半个月,由于组里基本都是熟悉的人 所以没磨合的压力。目前反而每天很乐意去上班,这与之前每天起床不想去上班简直是天地之别。我承认过去有超过半年的时间里 非常讨厌上班。现阶段的工作目标就是单纯的完成基本任务了 — 又回到这种单纯的工作状态。

继续阅读“变化如梭”

西藏生死书记忆评

这是一篇书评

西藏生死书,这本书我在两年前阅读了一遍,为何等待到今天才想起把当时的想法写下来?一来是两年之久 我还能存在于我心中的东西 才是我真正在这本巨作中得到的东西,二来因为针对书中的话题,我需要长久的去思考,实在是太沉重了。抛开书中的宗教倾向,这本书的主题是 — 生与死。这本书应该可以划分为宗教书籍(据我考察 它也确实是西藏佛学典籍),但是我认为剥开宗教信仰神论的部分 才是它的精髓所在。

从我很小的时候开始,我对死亡的好奇心就重于生

我从小就非常想知道 我死之后会发生什么(当然我还有其他很多好奇的事情),想知道宇宙浩瀚究竟是怎么回事?想知道我为何是独立的个体?我为何有“思想与想法”这种东西?我死后我的思想会不会在另一个个体里存在?想知道我眼里的红色和你眼里的红色是一个颜色么?想知道我对气味,阳光,雨露,风霜的感受是不是和每个人一样?

继续阅读“西藏生死书记忆评”

Unity项目DLL代码保护方案概述

项目开发笔记(十)

最近真是繁忙,公司项目 业余项目都同步推进中

公司的项目最近略有松散,但是感觉自己也应该做到了称职。按照公司目前的项目开发模式,可以预见未来很长一段时间都会处在一种 改 改 改 改 的节奏中。在这种节奏下 很容易把代码写烂,在很多次产品改需求 催进度的时候 我都时刻暗示自己 不要因为时间紧迫,而生产垃圾代码,不要因为功能变动,而产生过多硬编码,从这种角度来看 可能这种开发模式可以磨练人呢。

业余项目最近也处在最关键的一个阶段,业余项目的一个好处就是 我可以把任意一个地方模块 写成我自己想要的样子,我不用担心任何人破坏我原本的代码思路,我可以无限次重构 直到自己觉得优雅为止。可喜可贺的是,业余的项目终于可以产生收益了 Orz,之前的独立游戏 也有国外渠道愿意推广(太有眼光了),虽然对独立游戏的收益不抱希望。不管这些事情结果如何 都感谢大家的赏识。

好了,我们接下来扯今天要分享的技术内容。针对Unity使用c#脚本编写逻辑的项目,逻辑代码的保护也就是DLL文件的防反编译(Anti-Decompile) 目前市面上还没有一套完整的方案。

一般的防破解思路

在软件保护中 一般分为 客户端软件的保护 和 web软件的保护。客户端软件一般的防破解思路基本都一致,无论是win/OSX/Linux/Android/iOS 还是其他单片机上的软件程序。防破解的做法都是从 静态保护动态保护 两个方面着手。有可能很多其他地方管着两种方式的命名不一样。通俗的叫法应该是 防止静态反编译 防止动态反编译。

静态反编译(Static decompile)

所谓的静态反编译,就是在不调试的情况下根据软件的本体去查看实现逻辑或者原理(Q.普通没代码的软件也可以调试? A.一般无论是什么系统 Win Linux Android OSX iOS,其核心库 – Kernel层中都会带有调试功能的API,即使是在发行版本的操作系统中 这些调试接口也会被保留,而这些调试接口可以调试任意User层的软件,而我们开发的大多都是属于User层的软件。)

举几个例子:

使用Dex2jar工具对安卓安装文件APK进行导出jar,就属于一种针对安卓软件的静态反编译技术,
使用IDA OD等工具对 .exe .dll进行反编译 也算是一种针对win平台软件的静态反编译的行为。
使用JDgui工具对jar进行查看代码,也算是针对Java软件的一种静态反编译行为

继续阅读“Unity项目DLL代码保护方案概述”