自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小强的博客

记录自己的想法和学习过程

  • 博客(28)
  • 收藏
  • 关注

原创 Unity Shader学习记录(十一)

Unity Shader学习记录(十一)  关于风格化渲染的东西内容非常丰富,除了以前提过的卡通风格之外,素描风格也是一种有趣的效果,它的原理是通过光照信息采样几张不同的,代表笔触的纹理贴图,并以采样结果作为效果渲染到画面上;这样一来就如同是真的实现了画笔效果那样,光照明亮的地方没什么笔画,阴影的地方笔画很密。   此外还有一类重要的效果,那就是噪声(Noise),这一类效果泛用性很强,无论...

2018-07-30 16:57:22 535

原创 Unity Shader学习记录(十)

Unity Shader学习记录(十)  前文提到的屏幕后处理特效只是一类在渲染完成后的帧画面基础上做二次处理的特效,虽然在大部分情况下它们是可用而且足够高效的,但更多的情况下我们不仅需要当前的帧画面,还需要场景的深度和法线信息。   一个典型的例子是边缘检测,前文中使用Sobel算子进行卷积运算来检测边缘其实并不精确,因为颜色的变化有时候并不说明真正的物体边缘,而且光照效果也会影响到边缘检...

2018-05-31 13:46:10 491

原创 Unity Shader学习记录(九)

Unity Shader学习记录(九)  屏幕特效是一种很常见的平面特效,不同于直接在三维渲染中做出的特效,屏幕特效仅针对已经渲染完成的屏幕显示,通俗点说就是一张和屏幕大小相当的图片。这种针对已经渲染完成的屏幕图片进行特效处理的行为被称作“屏幕后处理”。   实际使用场景中的屏幕后处理类型繁多,不同的效果各有各的针对,能良好地使用这种后处理能极大地增加游戏内容表现力,而随之带来的则是性能消耗的上升

2018-05-07 16:26:16 375

原创 Unity Shader学习记录(八)

Unity Shader学习记录(八)  大部分情况下,Shader的运行过程是与时间无关的静态过程,换句话说游戏进行过程中渲染的结果不会有什么变化;动态光影或许是比较典型的例外,但它们和游戏运行时间依然没有什么直接的联系,仅仅与场景的变化有关。   但有些情况下,能将Shader的渲染流程与游戏运行的时间建立联系是有益处的,比如希望渲染出随着时间变化而变化的效果,水波或者移动等。因此Unity的

2018-04-13 16:24:32 372

原创 Unity Shader学习记录(七)

Unity Shader学习记录(七)  阴影和光照总是密不可分的,就像明亮和阴暗本身就是两种亮度的对比那样。   在计算机图形渲染中,阴影的产生遵循着类似现实中的阴影现象的原理,也就是寻找光线无法照到的地方将其认定为阴影并予以渲染。但和现实中不同的是,很多时候计算机实时渲染并不会真的去寻找每条光线能照射到什么地方,或者说至少不是每次渲染都寻找;有一种常用的被称为“阴影映射(ShadowMap)”

2018-03-28 16:04:25 469

原创 再谈UGUI列表

再谈UGUI列表  在之前的两篇博客《UGUI的列表》和《UGUI列表进阶》中讨论了如何基于UGUI的ScollView通用可滑动组件设计一个功能相对窄化的列表组件方便使用,采用了类似Android系统中的ListView组件设计思想,抽象化的列表,剥离子项生成与列表本身,使用Adapter机制等等。   两篇博客一共讨论了两种实现方式,非重用的和重用的,两者的最大区别在于生成的子项数目不同,非重

2018-03-23 09:43:55 725

原创 Unity Shader学习记录(六)

Unity Shader学习记录(六)  Shader的基本高光模型能给物体渲染上亮眼的反光效果,但在实际使用中这个效果却并不总是需要那么亮的,尤其是在一些粗糙表面上。当一个物体具有粗糙表面并且使用法线贴图进行渲染后,高光模型制造出来的光照效果会显得十分违和;本来粗糙表面就不应该有高光反射,但同时产生高光的光源又一定会在粗糙表面产生一片更亮的区域。   为了解决这个矛盾现象,一种可行的方案便是使用

2018-03-19 10:56:48 293

原创 Unity Shader学习记录(五)

Unity Shader学习记录(五)  在游戏中会有多种多样的渲染风格,有写实的,复古的,追求光影的,追求精细度的等等等等,但有一种渲染风格能为游戏营造一种完全不同的氛围,它不以追求真实性为目标,却反其道而行之,为玩家制造出一种容易辨识和更加夸张的感觉;这便是卡通风格渲染。   说到卡通风格渲染,有很多典型的例子,比如军团要塞2,比如无主之地系列;它们使用卡通风格渲染为玩家营造的氛围就是一种荒诞

2018-03-12 09:26:08 299

原创 Unity Shader学习记录(四)

Unity Shader学习记录(四)  前文结尾提到的一种能在模型平面上渲染出凹凸感的技术,也就是法线贴图技术,其原理并不复杂;考虑到凹凸感本身来源于模型不同表面特性对光照的反应,而影响光照的最大因素之一当然是法线了,平面上每一点的法线都是一样的,这也就是为什么渲染到平面上的纹理看起来是平的,如果给与一个平面上不同点以不同的法线参数,那么理论上就能实现凹凸不平的效果。法线贴图  法线贴图技术是现在

2018-03-07 15:41:00 246

原创 Unity Shader学习记录(三)

Unity Shader学习记录(三)  前文中编写的Shader只有个漫反射颜色设置,渲染出来的模型是单调的纯色,而且虽然有点光照效果,但是看起来暗淡无光,总之就是不好看。在实际的游戏或者场景渲染中,模型的表面是多姿多彩的,光照也是复杂多变的,因此Shader往往需要具有处理这些数据的能力。纹理贴图  纹理和贴图都是在计算机图形图像中很常见的概念,简单说来它们指的就是一张图片,在渲染时根据模型的信

2018-03-02 17:31:35 228

原创 Unity Shader学习记录(二)

Unity Shader学习记录(二)  在进入真正能看到效果的Shader之前,需要一点数学基础,也就是向量和矩阵方面的数学知识,关于这些知识不予赘述,有大量的书籍资料以及网络文章可以学习,在此仅列举一些必要的概念方便查阅。   Shader中涉及到的数学知识包括向量的运算矩阵的定义矩阵的运算矩阵与向量之间的关系矩阵与坐标系统之间的关系  具备一定的数学基础后,便可以正式编写能看出三

2018-02-28 09:19:27 174

原创 Unity Shader学习记录(一)

Unity Shader学习记录(一)  Shader,一般称为“着色器”,是在显示处理中的渲染流水线里扮演重要角色的一种程序,它的目的是为了更加详细和精确地控制显卡渲染图像的方式和方法,极大地增加了图形图像编程人员对显卡工作流程的干预能力。   现代显卡的渲染流水线一般而言分成三个阶段,应用阶段,几何阶段和光栅阶段。其中应用阶段是指在图形图像制作软件里的过程,比如使用3D模型制作工具May...

2018-02-26 13:41:21 244

原创 状态机杂谈

状态机杂谈   计算机控制系统的控制程序具有有限状态自动机(FA)的特征,可以用有限状态机理论来描述。有限自动机(Finite Automata Machine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(Finite State Machine),是一种应用非常广泛的软件设计模式。  状态机这个名字听上去似乎是个很不得了的东西,然而实际上它普遍应用于计算机行业,毕竟现代编

2018-02-05 18:10:13 425

原创 EventSystem的使用

EventSystem的使用  EventSystem在Unity中是一个看起来像是专门服务于UGUI系统的组件,每当在场景里创建UGUI对象时,Unity编辑器都会自动产生一个EventSystem对象放在场景中,与之相对应的也有一个Canvas对象,这两个对象就组成了UGUI系统的基础,所有开发人员能看到和能用到的UGUI功能都依附于这两个对象。UGUI中的EventSystem  使用UGUI

2018-01-26 15:50:42 7414

原创 自定义操作指令集

自定义操作指令集  在游戏系统中充满了各种各样的指令,玩家的操作输入,AI角色的行为输入,剧情的进展,战斗时的数据运算等等,这些看起来各自独立的部分在背后其实都被指令联系到了一起。   试想一下要是不使用指令,各种行为和运算都是硬编码写在游戏逻辑中,且不说后续拓展基本变为不可能的任务,光是编码过程中的白盒测试都难以进行,更让人无奈的是,这样的情况与编程人员的编码能力无关,仅仅是设计上的失误而已。从

2018-01-24 10:09:31 821

原创 UGUI列表进阶

UGUI列表进阶  在Unity中使用UGUI来设计用户界面是很方便的,但是对于列表显示这个特定的需求,UGUI没有给出一个足够具体的解决方案,而是设计了一个很宽泛的组件ScrollView,让设计者们自己想办法实现列表。   在前文中初步讨论了如何设计一个可用的列表组件,最后设计出的结果是一个基本满足要求的通用列表组件,参考了安卓的ListView和Adapter,设计成类似的数据与展示解耦的结

2018-01-19 11:33:25 648 2

原创 UGUI的列表

UGUI的列表  Unity3D提供的UGUI系统非常适合于制作基本的用户图形操作界面,也就是常说的GUI。在标准的UGUI组件包里有很多常用的UI组件,只需要将它们进行组合便能制作出合乎要求又好用的图形界面。   但是UGUI并没有提供一个常用的界面组件,即列表展示组件,取而代之的是一个更加泛化的滑动组件ScrollView,这个组件的特点就是能轻松地做出水平或垂直方向有滑动能力的界面组件

2018-01-17 09:56:48 5109 3

原创 自定义UGUI界面抽象框架

自定义UGUI界面抽象框架  使用UGUI来制作用户界面是很方便的,但如果每个界面都用原始的方法,独立写一个脚本对每个UI组件进行控制和操作,虽然一样能工作的很好,但对于后续拓展以及调试等工作会造成不小的麻烦,想象一下臃肿复杂的Start方法和Update方法,在需要修改的时候会非常痛苦。   因此一个比较抽象的,条理清晰的框架就显得很必要了,这种框架的设计方法有很多很多种,不同的人也会

2018-01-15 14:57:11 595 2

原创 简单的2D射击游戏实践

简单的2D射击游戏实践  Unity3D编辑器虽然从名字上看是个制作3D游戏的工具,但其实它也提供了2D游戏制作的相关资源和功能,而且使用Unity3D来制作2D游戏并不难,只要准备好相关的图片等资源文件,有一定的编程能力就可以动手了。   接下来的分享的一个小项目是作者刚刚学习Unity3D没多久的时候为了实践一些想法和巩固对Unity3D游戏结构与制作方法的印象而编写的,非常简单,也没有使用商

2018-01-10 16:12:18 2279

原创 自定义事件驱动系统

自定义事件驱动系统  在程序设计里有一种模型叫做“事件驱动模型”,这个模型最初是用于异步处理之间的冲突而出现的,后来被用到各种程序中,成为了一种重要的程序设计模型,广为流传。基于事件驱动的程序结构  在最早没有事件驱动的程序中,要获取到外部设备的输入,比如键盘或者传感器之类的设备输入,则必须做设备轮询,即按照一定频率轮流访问输入设备,检查是否存在有效输入,如果有则将其读出,随后向后轮询;若没有有效输

2018-01-08 14:10:39 1222 2

原创 Canvas使用技巧

Canvas使用技巧  安卓系统提供了许多方便开发者的组件,比如TextView和ImageView等,它们的组合可以迎合实现大部分一般生产环境的需求,无论是数据展示还是页面交互,只要合理运用这些原生组件或者一些通过重写原生组件达到拓展功能的第三方组件便可以实现要求。   但是偶尔在编写应用时会遇到原生组件无论怎么组合都难以实现需求的情况,而且也不能用这个当理由去怼设计和产品人员,因为往往这样的设

2018-01-03 17:34:10 1160

原创 横向滑动的列表

横向滑动的列表  在安卓开发中,有时候会遇到列表宽度不足以显示所有数据的情况,如果不打算使用两级显示(即列表显示有限的数据,点击后转到新页面显示详细数据)就需要一种能左右滑动来展示更多数据的列表,然而无论是ListView还是ExpandableListView乃至ScrollView都没有这样的能力,因此实现这个功能需要另辟蹊径。简单而又直接的方案  第一种方案的想法非常简单而且直接,安卓提供的各

2018-01-01 14:48:16 3836

原创 列表中的列表

列表中的列表  安卓平台上的列表组件是ListView,它的功能强大,性能也非常优秀,在应用编写过程中是很重要的数据展示组件。   在有些需求里会要求实现一个嵌套型的列表,也就是列表之中的元素依然是列表,对于特定的情况可以使用ExpandableListView来实现嵌套列表,但这也只能涵盖一部分需求,更多的时候是需要真正意义上的嵌套列表。嵌套列表的实现  比如做一个资料页,页面上包含四到五个展示

2017-12-29 23:17:06 970

原创 下拉刷新与上拉加载

下拉刷新与上拉加载  在使用列表组件展示数据的时候,更新数据的交互曾经是一个没有定论的问题,有留一个刷新按钮的,有按时自动刷新的,还有根本不刷新的。但是随着移动平台的普及,移动应用的用户群越来越大,数据刷新的交互就慢慢固定下来了,而在各种交互方式中脱颖而出的一种就是人们熟悉的“下拉刷新”。   下拉刷新是个很简单也很友好的交互方式,列表滚动到顶端后可以强制下拉一段,拉出来的多余部分会显示一些提示,

2017-12-27 09:56:52 9067

原创 组件使用之ExpandableListView

组件使用之ExpandableListView  安卓的各种组件中,ListView是一个非常常见的组件,它用于展示列表或者可以放入列表的各种数据;但是ListView也是有它的局限性的,首先就是要用它实现按照每个列表项展开子表这种需求会非常麻烦,关于位置的控制以及点击事件的处理都很繁琐,不巧的是类似的需求非常常见,而且这种展开子表的交互对用户来说也是十分友好的,iOS有原生控件支持这种需求,安卓自

2017-12-25 14:21:20 462

原创 组件使用之ListView

组件使用之ListView  列表在很多应用场景中都是非常重要的信息展示方式,表型数据结构也是大部分用户都能轻松接受并且看懂的一种。无论是联系人列表,还是新闻标题列表,或者论坛主题列表,邮件列表,待办事项列表等等;可以说有了列表就有了实现大部分用户所需要的应用功能的基础。简单实用的ListView  安卓中的ListView组件就是个很常用的列表数据展示组件,它能灵活地实现各种各样的列表效果,满足大

2017-12-22 14:08:29 476

原创 组件使用之Fragment与ViewPager

组件使用之Fragment与ViewPager  Fragment和ViewPager都是安卓原生的组件,尤其是Fragment更是Activity之外的又一个重要的界面组分,它们各自有各自适合使用的场景,也各有各的使用技巧,但它们两者结合能产生的效果优于两者分别使用的效果,所以放到一起谈谈。麻雀虽小五脏俱全的Fragment  Fragment是继Activity之后安卓的又一重要组件,它的作用就

2017-12-20 09:39:35 464

原创 编写一个信息查询小应用

信息查询小应用  考虑一个简单的数据查询应用,数据为本地源Json文件,以字符串形式给出,要求做到一个列表以及多种功能。   数据源为手机游戏《皇牌机娘》的卡片数据,Json字符串大致类似如下的结构{ "ammoConsume": 7, "armor": 27, "atk": 50, "equip": 3, "equipDetail": [{

2017-12-18 16:13:16 664

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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