- 博客(91)
- 资源 (3)
- 收藏
- 关注
原创 OBJ文件动态载入Unity中的一个算法小问题
FBX、OBJ等格式的3D文件,拖入Unity工程时,都经历了一个内部处理过程以转换成Unity能使用的格式。通常游戏项目的模型文件都是作为静态资源打包进安装包的。但假设面临在程序运行时,灵活动态获取模型文件,并马上使用的需要,该怎么办呢?Unity在这块并没有做很好的支持,不要和我说什么AssetBundle,那个也是要预先在Editor里手工处理好才能下载使用的。我是指直接丢过来一个O...
2016-12-30 17:42:13
3717
7
原创 每多变幻
又有近半年没更了。写上一篇文章的时候,我所在的游戏项目团队已是摇摇欲坠,所以正在利用业余时间持续开发山寨版的物理沙盒游戏,积极筹备跳槽。后来八月末误打误撞进了一家做医疗软件的小公司玩起了Hololens开发,也就是所谓的AR了。工具还是Unity,所以技术上倒也没多大变化。项目说大不大,说小呢,也不是那么简单。两个月做了个Demo,然后各种其他功能慢慢加,同时要面对工程的可维护性以
2016-12-30 16:52:26
484
原创 C# foreach循环内不要修改集合
之前在游戏中为了实现剧情脚本延时创建Npc的功能,写了这么一段代码:LinkedList DelayCreateNpcTasks = new LinkedList(); void TickDelayCreateNpc() { foreach (CreateNpcTask task in DelayCreateNpcTasks)
2016-07-28 08:41:43
6577
原创 ulua(一)上手
在项目中引入脚本系统有两个好处:1.灵活快速地调试测试各种数值、设定,省却重编译的时间2.热更新,游戏内容修改后用户不需要重新下载安装要在Unity中使用Lua脚本,各种解决方案很多,我选择较为热门的ulua来试试。关于ulua的前世今生、各种奇奇怪怪的项目名字、分别包含哪些东西、可以用来做什么,我想首先是要搞清楚的。这些问题的答案在www.ulua.org这个网站
2016-07-17 18:02:45
1471
原创 C#设计模式(一)订阅-发布模式
本来是在持续开发Besige,但考虑到以后迟早会在设计模式这块继续拓展,就新开了一个标题,算是个开个头。模式这东西原本可以独立于语言之外来说,但考虑到不同语言的实现毕竟有些差异,我本人搜索文章时,也不喜欢搜出一堆其他语言的参考资料来,为了少制造些垃圾信息积点德,就在标题前加了个C#。订阅-发布模式又称观察者模式,很多资料只是介绍了个大致思想,很难找到把订阅者和发布者最大化解耦的参考
2016-07-01 22:55:57
2468
原创 山寨Besiege(七)加入零件朝向的调整操作
前文提到了一些需要处理的细节问题,今天我们来一个个解决:一、轮子的安装位置调整 因轮子尺寸相对立方体木块的不规整性,直接固定在立方体Trigger的位置点,明显是浮空的。我之前想过用额外规定吸附点之类的方式解决此问题,后来转念一想,冒出个最朴素的解决方案:直接对固定位置点作一个调节。 为此我强行oop了一波,把Modules类的LinkTo方法设为v
2016-06-25 22:33:09
1881
原创 山寨Besiege(六)代码托管、重构
停更了好久,一是最近试着找了下新工作费了些精力,二是公司项目比较忙,三是项目从试验阶段进入重构阶段的时候,往往也确实费工夫。现在抽空继续……一、Besige项目现已托管在csdn平台上了!地址:https://code.youkuaiyun.com/obmar45/besige/tree/master考虑到空口说白话对类似重构这种工作很难做到精确到位的描述,这样可能就让难得有少数几个愿意深
2016-06-20 03:16:04
819
2
原创 山寨Besiege(五)车轮
自从有了电,生活真方便。自从有了引擎,做游戏真方便。再度感慨下社会分工合作的神奇,假如自己做一个WheelCollider,不知道复杂到哪里去了。Unity的WheelCollider是个很高端的玩意,不光会滚,还自带悬挂弹力模拟,所以做出像越野摩托那种弹力十足的东西也应该不难。轮子就没什么好贴图的了,直接选讲参数:1.Wheel Damping Rate
2016-05-21 05:35:00
1385
原创 山寨Besiege(四)操控轴
这次我们实现转向轴。先贴两个图给个直观印象:题外话一:猪哥考虑过学一学3DMax,一是方便自己做点需要的模型,二是工作中可以更好地和美术沟通,三是某些时候这种复合型淫才的招聘薪资屌爆了。但综合考虑了一下,这种没什么难度但需要一定时间的活还是留到更后面一点再做,先赶程序本职工作最要紧的搞扎实了先。题外话二:我这人好妄自菲薄,刚接触Besiege这个游戏
2016-05-21 04:36:28
1339
原创 山寨Besiege(三)需求分析与架构设计
在昆明工作的日子,我虽对经理忽悠的作风极为不屑,但对他整天挂在嘴边的那些软件工程思想还是很尊崇的。无论是传统的瀑布流,还是敏捷开发,无论是大的系统,还是小的功能,先分析需求、再构思设计、再实现的流程是永恒真理。事情还没弄清楚就开始动手做,是初学者的幼稚行径,越成熟的设计师,越是重视前期的需求分析,思路清晰后,编码也只是“唰”一下的事情了。习惯总得从无到有养成。所以这次我刻意走一个完
2016-05-08 15:46:58
1415
原创 山寨Besiege(二)瞎扯下项目管理
上回说要用Github维护项目,试了下上传速度为5-10k/s,用买的vpn则是50k/s,虽然传200M的东西也不是不可能,但终感太麻烦,于是放弃了这个念头。也许能畅快地翻墙是一个高级码农必备技能,但现在这个逼我还是不装了。同时在本地使用版本管理系统的必要性也还不是那么强烈,我想等有需要的时候弄一个也不是什么难事,这次就打打嘴炮算了。关于版本管理:我倾向于用Git
2016-05-08 13:08:54
746
原创 山寨Besiege(一)计划
去年我玩到一款游戏叫做《Besiege》,号称steam三大收割膝盖之一的神作,确实一分钟就爱上了它。然后自己在家初步仿制了一下手机版,现在是这个样子:中间浅色木箱是核心块,深色的是新加木块,从左下角图标中拖出零件,拖动中会有提示图标,拖到能安放的地点时会有提示木块出现,松手则确认组装。然后点击右上角的运行按钮,箱子摔下来变成这样:零件间的粘合力是我
2016-05-01 00:18:14
880
原创 C#碎碎念(二)快进一波
可能更有效率的学习方式是先泛读系统姿势,再在实战中根据需要翻书。我讨厌在语法中裹足不前的状态,这次再快进一波。1. 三个参数修饰符 ref out paramsref表示按引用传参,out加了一道必须返回值的验证,params可用于传多个参数非常方便。2.属性相较于C++常需自己写读写方法,C#算是先进一步,自动实现的属性已经大大简化写法,要习惯用。3.
2016-04-30 18:32:01
708
原创 C#碎碎念(一)值类型与引用类型
凌晨四点写这种东西,一股森森的咏春打木桩的既视感。说要强化语言其实是个很棘手的事情,因为一个人不知道自己不知道什么,不过好在鄙人在此方面积淀尚薄弱,随便翻翻书也能有所收获。预计会将专门学习C#的周期计划从五周压缩到三周,比如我一开始是想先讲“反射”的,但翻完一整章实在又不知道从何说起,毕竟实战出真知,有些东西项目中暂时用不到就真是没法学。所以不求全,短期内随便能总结几点是几点吧。
2016-04-26 05:02:12
445
原创 三言两语说shader(九)钻石
这次的目标是绘制一颗闪闪发光的钻石,追求效果是越接近真实越好。先说说为此我这几天干了些什么。1.看了stalendp blog里那篇《钻石效果》后头的参考文献最有价值的就是ATI在2004年GDC上作的演讲,题目就叫Drawing a Diamond。但是由于只有ppt,所以很难重现工程深入学习。思路大概是预备了一张折射CubeMap,一张带模拟色散的反射CubeMap,最后再
2016-04-17 14:36:48
7255
原创 三言两语说shader(八)墙体透明
很抱歉这篇文章要放个空弹。计划写“墙体透明”的原因,也是工程实际需要,摄像机固定侧视主角,但场景是真3D的,所以有时主角会被墙挡住,这时要作一些处理。之前用过一种直接让人物变色显示的方案,但性能损耗严重,具体原因我还没分析。个人觉得让墙体变透明的方案观感效果可能更好。还是一样,什么都自己想办法是不明智的。上网搜了下,文章很多,随便贴两篇:Unity 墙遮挡人物时
2016-04-09 22:27:03
814
原创 三言两语说shader(七)黑幕扩散
按计划继续,目前为止写了三篇对工程已有shader的分析解读,当然实际上我读的shader远不止这三个啦,比如这周就把乐乐同学的blog里的几十篇文章泛泛通读了一遍,主要也是为自己开始构思写一些简单的shader作准备,所谓“思而不学则殆”,不多看些别人的东西自己就想搞创作明显是要吃亏的。所谓“黑幕扩散”,就是一开始屏幕全黑,然后从中心向外逐渐展示出游戏画面。为什么我要做这么一个东
2016-04-09 21:18:07
2674
原创 三言两语说shader(六)外发光、表面shader
外发光(Rim Light),网上也很多例子。可用来做怪物受击时的身体闪光等。我一开始以为和轮廓描边差不多,实际上样子是类似,原理还是完全不同的。手头工程里有个顶点像素shader的例子,但是我发现Unity Surface Shader Examples里就有Rim Light,所谓简单就是美,直接贴这个官方例子,顺便说说Surface Shader好了。考虑到这次的内容比较
2016-04-03 16:13:13
4881
1
原创 三言两语说shader(五)轮廓描边
这也是个常见的shader,可以实现类似动漫《枪之国度》的那种轮廓描边卡通画风。在我手头的项目里用来给怪物加“霸体”效果,所谓霸体意思是怪物此时无法被击倒。用途诸如此类。下面放效果图:原谅我在Asset Store里找了半天最后找到这么个丑陋的模型,不过刚好它不是很精细,很好的暴露出了缺点,模型表面法向量突变(也就是不光滑)的地方描边会断掉。这个shader
2016-04-03 14:10:58
7633
原创 三言两语说shader(四)渲染流水线及相关
对一件事物的理解,分真懂和假懂,以及似懂非懂,往往前面走快了,中途就要停下来想一想,不然后面就越来越慢,搞技术,大抵如此了。前几天刷刷看了几个shader,产生一些疑问,比如一个shader完全没有properties可不可以?那些所谓的“语义”到底有什么用?顶点shader的参数从哪里传过来的?等等。都是些基本东西,不过越基本越重要啦。所以今天继续讲原理。先贴两个
2016-04-02 09:29:43
1074
原创 三言两语说shader(三)矩阵变换
一、话痨接下来两篇打算补点理论姿势,哪里讲错了大家及时指出,多多包涵。说好讲轮廓效果的,怎么又扯起矩阵来了? 是这样的,即便是上一篇中最简单的黑屏效果,里头的顶点处理函数vert_img,其实也包含了一句: o.pos = mul (UNITY_MATRIX_MVP, v.vertex); 这个MVP是unity shaderlab提供的内置矩阵,大体就是从物体本地坐标变换到世界坐标、再到
2016-03-29 00:50:35
1496
原创 三言两语说shader(二)黑屏效果
我看了下shader这东西要玩深也是要经年积累的,按一般的顺序从漫反射到镜面反射等等那样来的话,太费精力。我这次是要作一个游戏开发技能的系统学习总结,所以shader这块大致的计划是以手头项目为依托,先看懂其中用到的大概三个,包括黑屏和两个轮廓描边,再自主编写一到两个有实际需求的,包括一个黑幕扩散、一个墙体后的人物透视,最后再做一个稍微酷炫些的比如钻石光效之类的,然后就收手转入下一块。计划
2016-03-25 21:04:08
2478
原创 三言两语说shader(一)前言、一些资源
先说明下情况,本人也是刚刚开始学习shader,这次开更要写的一系列文章也都是自学笔记形式,只求交流探讨,不敢擅为人师。本来不想用这个标题的,搞得像什么大师一样,但忆起达叔曾经曰过:“男人不装酷,枉在世上混”,我也就无所畏惧了。所谓游戏,就是一个不断在屏幕上画图的程序。根据模型的位置、贴图、环境光等原始信息,计算出屏幕上应该显示出什么图像,就叫渲染。很久以前这段计算
2016-03-25 08:59:12
558
原创 开更
快两年没更新这个博客了,时间6得飞起。2014年7月停更后大概一直在学Unity3D,然后2015年5月终于如愿进入了一家游戏公司干到现在。觉得是时候再学习总结一些东西,让技术上一个台阶了。
2016-03-25 08:18:19
310
原创 广义表
广义表是一种能嵌套自身的数据集合,即某个元素本身又可能是一个小的广义表。实现广义表的过程中,我发现数据结构设计倒不难,难在如何表现、如何解析上。最简单的表现形式就是带括号的字符串,比如(A,B,(C,D))这种。那么(, B)这种合不合法呢?对于(A,B))这种明显不合法的输入,又如何检测出来呢?为此我还专门去看了下正则表达式这玩意。最后我意识到,首先要给出合法的定
2014-06-09 14:58:51
685
原创 堆分配存储串
string类型是天天用的玩意,但是自己实现时,用顺序存储还是链式存储更合适呢?《数据结构》中介绍了三种方式:1,定长顺序存储 长度有限,貌似没大用处3,块链存储 数组和链表的一种混用形式,原本直觉上认为这种方式较合理,但仔细思考发现,其便利性也仅体现在连接了。综合来说不如第2种。2,堆分配存储 这种方式是今天要实现的。 方法的选择上,理论上
2014-04-19 13:20:33
776
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人