Unity开发学习之路
文章平均质量分 71
Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
heyuchang666
这个作者很懒,什么都没留下…
展开
-
材质、着色器和纹理
Unity 中的渲染采用材质、着色器和纹理。所有这三者之间有着密切的关系。 材质通过包含对所用纹理的引用、平铺信息、颜色色调等来定义表面应使用的渲染方式。材质的可用选项取决于材质使用的着色器。 着色器是一些包含数学计算和算法的小脚本,根据光照输入和材质配置来计算每个像素渲染的颜色。 纹理是位图图像。材质可包含对纹理的引用,因此材质的着色器可在计算游戏对象的表面颜色时使用纹理。除了游戏对象表面的基本颜色(反照率)之外,纹理还可表示材质表面的许多其他方面,例如其反射率或粗糙度。 材原创 2021-06-17 16:25:13 · 745 阅读 · 2 评论 -
Unity_UGUI VertexHelper
图形学的基础知识:1、所有的渲染对象都是由网格(Mesh)构成,Mesh的绘制单位是图元(点、线、三角形)。意思也就是说所有的游戏对象都是在绘制一些点、线、三角形的集合。2、顶点数据中最主要的是位置,颜色,纹理坐标,法线等。也就是说顶点中保存着其位置、颜色、纹理坐标、法线信息等。3、贴纹理是指,将一张纹理(可以称为图片),根据纹理坐标,贴在模型上面。就好比同一个模型人,穿上了不同的衣服。纹理坐标指的是根据坐标将图片信息覆盖在Mesh表面,就相当于,柚子就贴在手腕处,裤子就贴在腿上。UGUI提供了原创 2020-07-03 18:58:27 · 1062 阅读 · 0 评论 -
屏幕显示模式ScreenOrientation
描述屏幕方向,目前,这仅适用于移动设备。下面是官方API截图:Portrait 竖屏PortraitUpsideDown 竖屏 上下颠倒。LandscapeLeft 横屏从逆时针旋转LandscapeRight 横屏从顺时针旋转AutoRotation 自动旋转unity 设置屏幕旋转只允许竖屏:Portrait √Portrait Upside Down √Landscape Right ×Lan...原创 2020-07-01 18:44:03 · 1465 阅读 · 0 评论 -
Unity中MonoDevelop字体颜色的修改
用MonoDevelop开发Unity时,可以适当调一下颜色保护下视力。[Tools]->[Options]->[Text Editor]->[Syntax Highlighting] ,可以选择默认的几种,也可以自己设置,自己设置的话需要,先New一个新的之后再进行编辑,例如我新建的取名为style:comments 注释,line comments 行注释,block comments 块注释,doc comments doc注释comments tags 注释标签,想要改一般注释的话,可以改l原创 2016-10-21 11:55:35 · 5739 阅读 · 0 评论 -
Unity_二维纹理 Texture 2D_4_总结细节
Unity支持下面的文件格式:PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT。应注意,Unity可以导入多层PSD和TIFF文件,在导入时,层将自动被塌陷,因此你不必浪费时间,直接使用源文件类型。这Texture Sizes 纹理大小 这些尺寸如下:2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 或 2048像素。纹理可不必是正方形,即宽度和高度可以不同。点很重要,允许只有一个纹理拷贝,使用从Photoshop,三维原创 2016-06-06 11:49:33 · 2920 阅读 · 0 评论 -
Unity_二维纹理 Texture 2D_3_按平台覆盖
当你在不同的平台构建(游戏),你必须考虑为目标平台决定你的纹理,尺寸和质量。使用Unity3,你可以覆盖这些选项,并根据你要部署的平台指定具体的值。注意,当你构建项目时,如果你没有选择任何值覆盖,编辑器会选择默认值。除非你是针对一个特定的硬件,像Tegra,我们建议你使用ETC1压缩。如果需要可以储存额外的alpha通道并仍能得到较低的纹理占用空间。如果你一定要储存alpha通道在纹理中,RGBA16位是所有的硬件厂商所支持的压缩。 如果你的应用程序采用一个不支持的纹理压缩,纹理将解压到原创 2016-06-06 11:04:35 · 2141 阅读 · 0 评论 -
Unity_二维纹理 Texture 2D_2_高级纹理
Non Power of 2 不是2的幂:如果纹理大小不是2的幂,这将定义在导入时的缩放行为(更多信息请参阅下文纹理尺寸部分): None 无:纹理将被填充到下一个较大的2的幂大小以便与GUI纹理组件使用。(真别扭!) To nearest 到最近的:纹理在导入时将被缩放到最近的幂大小。例如257x511纹理将成为256x512。请注意,PVRTC格式要求纹理是正方形(宽度与高度相等),因此最终大小将变换到512x512。 PVRTC是一种有损的纹理压缩技术,主要用于iPhone,iPod原创 2016-06-06 10:26:01 · 3576 阅读 · 0 评论 -
Unity_二维纹理 Texture 2D_1_Properties 属性
纹理使你的网格、粒子、和界面更生动!它们是你覆盖或环绕着对象的图片或影片文件。由于它们是如此的重要,它们有很多的属性。如果你是第一次阅读这一点,跳到细节,当你需要一个参考时返回到实际设置。 用于对象的着色器可以指定所需要的纹理,但基本原则是可以放置项目中任何图像文件。如果它符合尺寸要求(见以下说明),它将会被导入并优化。对于多层Photoshop文件或TIFF文件——它们在导入过程中被塌陷合并,所以对于游戏没有不利影响。原创 2016-06-05 15:16:03 · 2459 阅读 · 0 评论 -
Unity渲染路径 Rendering Paths_3_Vertex Lit 顶点光照
顶点光照(Vertex Lit) 是最低保真度的光照、不支持实时阴影的渲染路径。最好是用于旧机器或受限制的移动平台上。1.顶点照明渲染路径通常在一个通道中渲染物体,所有光源的照明都是在物体的顶点上进行计算的。2.顶点照明渲染路径是最快的渲染路径并且有最广泛的硬件支持(然而,请记住:它无法工作在游戏机上)。3.由于所有的光照都是在顶点层级上计算的,此渲染路径不支持大部分的逐像素渲染效果:如,阴影、法线贴图、灯光遮罩、高精度的高光原创 2016-06-02 11:29:13 · 2827 阅读 · 0 评论 -
Unity渲染路径 Rendering Paths_2_Forward Rendering 正向渲染
正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。 根据影响物体的光源的不同,正向渲染路径用单个或多个通道来渲染物体。在正向渲染中,光源本身也会根据他们的设置和强度受到不同的对待。原创 2016-06-02 11:41:57 · 3513 阅读 · 0 评论 -
Unity渲染路径 Rendering Paths_1_Deferred Lighting 延时光照
延时光照是有着最高保真度的光照和阴影的渲染路径。如果你有很多实时灯光,最好是使用延时光照。它需要一定水平的硬件支持,仅在 Unity Pro可用,移动设备上不支持。 延迟光照是一种当前最高级的能实现光线和阴影保真的渲染路径1.完全采用以每像素的方式评估光线,这等于意味着全部将以正常贴图的方式正确的和物体交互2.所有光线都能拥有信息缓存3.所有的光线都能产生阴影4.对于能影响任何物体的光线数量没有上限原创 2016-06-02 11:18:14 · 3727 阅读 · 0 评论 -
Unity渲染路径 Rendering Paths介绍
Unity支持不同的渲染路径。应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影。 项目所使用的渲染路径在Player Settings选择。此外,可以为每个摄像机重写(不同摄像机可以是不同的设置)。如果图形卡不能处理选定的渲染路径,Unity将自动使用一个较低保真度的设置。因此,在GPU上不能处理延迟照明(Deferred Lighting),将使用正向渲染(Forward Rendering )。如果不支持正向渲染(Forwa转载 2016-06-02 11:09:31 · 2964 阅读 · 0 评论 -
Bezier曲线原理—动态解释
贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。在Flash4中还没有完整的曲线工具,而在Flash5里面已经提供出贝塞尔曲线工具。贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔(原创 2016-03-17 11:15:37 · 9055 阅读 · 0 评论 -
插值原理—线性,球面插值 ,四元数
3D空间中,在等长度的两个交角为theta的向量v1(x1,y1,z1),v2(x2,y2,z2)之间进行球面线性插值。1。一般线性插值:我们知道一般两个量之间进行线性插值的方法为:v(t) = v1 + t*(v2-v1)(0<=t<=1)(因为t是一次方的,所以是线性的。)2。一般球面线性插值:将一般线性插值得到的结果乘以放大系数k(t),使其长度放大到|v1|或|v2|,即得保持向量长度不变的插值:v(t) = k(t)*(v1 + t*(v2-v1))其中k(t) = |v1|/|v(原创 2016-03-16 21:23:08 · 10928 阅读 · 0 评论 -
UGUI(十)_无限循环列表
循环列表其实是针对列表组件的优化,如果有1000条数据普通列表会创建1000个item,这样在打开或关闭界面时会有很明显的卡顿现象。而且这种功能自己尝试写一写是很好的事情。图中显示到1000条数据的位置,但是注意红框中的item个数它只有11个,所以界面打开关闭也不会有明显的卡顿,原理并不复杂,当滑动条向下滑时,第一个超过显示区域时就移动到最下面;当滑动条向上滑时,最后一个超过显示区域就移动到最上面,然后从数据集合中取出数据进行显示,如此循环即可。原创 2016-03-10 11:53:56 · 6470 阅读 · 1 评论 -
UGUI(九)摄像机渲染纹理
以前在项目中弄过摄像机渲染纹理,现在再来整理下思路。渲染纹理在游戏中的运用非常常见,比如任务对话框上的3DNPC模型显示,角色装备栏中玩家的3D模型显示等。在Unity中实现这个功能非常容易1.创建一个临时纹理RenderTexture2.新建一个单独的摄像机(可称为photo摄像机),将目标纹理设置为临时创建的纹理3.将临时创建的纹理赋值给UI上的纹理组件原创 2016-03-10 11:43:33 · 1440 阅读 · 1 评论 -
UGUI(八)_资源下载之Icon
说起icon相信大家都不陌生,如果是页游icon会做成动态下载,其实其他平台也是如此,需要单独给一组icon打包,然后游戏载入时根据类型和文件名加载图片。如果你在学习UGUI相信也接触过NGUI,NGUI制作的图集作为prefab存在工程目录下,我们直接写打包工具就可以,而且游戏载入图集资源和显示时,在Game下也只是占用一个DrawCalls,这样挺好。 但是UGUI却不一样,合成之后的图集不会以文件的形式存在工程目录下,这时我们就不能和NGUI一样对一个parfab进行打包,是不是很纠结?但是我们还原创 2016-03-10 11:14:45 · 1015 阅读 · 0 评论 -
UGUI(七)_UI节点制作
游戏开发中UI是由各种基本或者高级组件组合而成,UGUI,NGUI也是如此,不过它们是在可视化过程中进行制作,开发效率会很快。 以前用的NGUI只有一个UIRoot作为UI的父节点,能设置一些UI整体缩放类型,比如原始大小,自动适应等,还有它必须有一个UI摄像机带上UICamera组件,里面封装了各种操作事件等。 而UGUI的选择更多了,它的Canvas中可以直接设置UI在屏幕空间【最普通的界面】,或者在屏幕空间的摄像机上【控制UI摄像机更自由,类似NGUI】,还有就是在世界空间【3D界面】。原创 2016-03-09 21:34:07 · 1430 阅读 · 0 评论 -
UGUI(六)_界面拖动和焦点界面
UGUI的官方例子中有实现拖动的脚本DragPanel,不过它没支持界面排序,加个排序很简单,在按下鼠标时调用tranform的SetSiblingIndex即可,值越大越靠前,在这里我只是简单的实现了这个基本功能,最终用到项目是需要设计一下的,因为很多时候需要记录打开界面的一些信息,在这里就不多说了。原创 2016-03-09 19:40:50 · 1784 阅读 · 0 评论 -
Unity_UGUI(五)_动画系统
Unity暂时没有单独给UGUI提供动画系统,用官方的动画系统也能做只是比较麻烦,所以我们有很多选择了。1.修改NGUI的UITweener在用UGUI上,轻量级动画系统。2.使用第三方插件入iTween,DoTween,HOTween等。 发现DoTween不错,就试试了。先来看效果图:这里用到了位置,旋转,缩放,颜色四个最主要的动画效果,暂时简单写一个例子,以便以后使用时查阅。下载地址和详细使用说明如下。原创 2016-03-07 11:54:54 · 4546 阅读 · 0 评论 -
UGUI(四)_官方案例—下载
UGUI官方案例—下载,喜欢的同学可以看看,本人觉得不错原创 2016-03-03 19:34:14 · 4650 阅读 · 0 评论 -
LuaStudio编辑调试软件
该编辑调试器最大特点就是可以注入到宿主程序内对lua脚本进行调试,还可以设置断点观察变量的值,功能非常强大。 现在已有的编辑器有Notepad++, Editplus, luaforwindows, Script.Net, Decoda, LuaCoding, SciTE, BabeLua 等等、但唯有LuaStudio才是真正意义上的IDE、集成了编辑、工程管理、调试、远程调试、等各种功能。主要是可以调试,和跳到函数定义处。这样的话,会方便很多,不然的话就是要用find苦逼的查找了。在“原创 2016-02-26 17:13:18 · 8082 阅读 · 2 评论 -
LuaInterface简介
Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库。LuaInterface则用于实现Lua和CLR的混合编程。(一)Lua from the CLR(1)CLR中不能自动匹配Lua类型的对象(以上基础类型之外的类型)传给Lua时,转换为userdata,当Lua把这些userdata传回给CLR时,这些userdata又转换回原类型对象;(2)Lua里面生成的userdata从Lua传到CLR时转换为LuaInterface.LuaUserData。(二)CLR fro原创 2016-02-23 14:09:53 · 3434 阅读 · 0 评论 -
在Unity中使用Lua脚本:语言层和游戏逻辑粘合层处理
为什么非要在Unity里面用Lua呢?原因:方便做功能的热更新;Lua语言的深度和广度都不大,易学易用,可以降低项目成本。转载 2016-02-22 11:25:49 · 1950 阅读 · 0 评论 -
C#面向对象概念总结
1. 封装封装就是指把对象的全部属性和全部服务结合在一起形成一个不可分割的独立单位。封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部对用户是隐蔽的。封装的目的在于将对象的使用者与设计者分开,使用者不必了解对象行为的具体实现,只需要用设计者提供的消息接口来访问该对象。例如,各种有标准视频接口的设备都可以连接电视机。原创 2016-01-17 14:21:42 · 2274 阅读 · 0 评论 -
Unity中Json创建,解析
我用的是LitJson.dll,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 Json创建中writer.WriteObjectStart ();就等同于“{”,writer.WriteObjectEnd ()就等同于“}”,最后要转换成string型,json = writer原创 2016-01-14 23:43:28 · 6078 阅读 · 3 评论 -
XML的使用,增删改查(Unity中的)
<root_CharacterTmp> <CharacterTmp id="1000" name="xml"> <JobID>2</JobID> <JobMode>none</JobMode> <InitForce>2.2</InitForce> </CharacterTmp> <CharacterTmp name="name1"> <JobID> </JobID> <JobMode>none</JobMode> <InitForce>2.原创 2016-01-14 23:25:16 · 1874 阅读 · 0 评论 -
Unity中数据库建立与读写详情
两个类,DbAccess和TestDBTestDB类测试,创建数据库,创建数据表,插入数据,更新数据,删除数据,查询数据原创 2016-01-13 00:35:28 · 7199 阅读 · 2 评论 -
基础Shader
Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组 合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设 置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,将材质赋予合适的 renderer(渲染器)来进行渲染(输出)了。原创 2015-11-12 00:38:17 · 1328 阅读 · 1 评论 -
Unity3D面试题(全)
第一部分1.请简述值类型与引用类型的区别2.C#中所有引用类型的基类是什么3.请简述ArrayList和List<Int>的主要区别4.请简述GC(垃圾回收)产生的原因,并描述如何避免?5.请描述Interface与抽象类之间的不同6.下列代码在运行中会产生几个临时对象?7.下列代码在运行中会发生什么问题?如何避免?8.请简述关键字Sealed用在类声明和函数声明时的作用9.请简述p...原创 2015-07-09 20:44:11 · 4065 阅读 · 0 评论 -
Unity3D游戏开发-模仿项目一 第一人称角色射击(有源代码)
第一人称射击类游戏,FPS(First-person Shooter), 严格来说第一人称射击游戏属于ACT类游戏的一个分支,但和RTS类游戏一样,由于其在世界上的迅速风靡,使之发展成了一个单独的类型。英文名:FPS (First-person Shooter)第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏。玩家们不再像别的游戏一样操纵屏幕中的虚拟人物来进行游戏,而是身临其原创 2015-06-06 23:02:41 · 14480 阅读 · 13 评论 -
Unity_UGUI判断鼠标或者手指是否点击在UI上(三)
比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分。为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上。 以前NGUI的时候都是自己来发送射线判断,现在UGUI好了系统提供了更为简便的方法。转载 2016-02-17 17:58:52 · 5099 阅读 · 0 评论 -
Unity_UGUI研究院之UI的深度学习(二)
UGUI真是好的不得了。以前用NGUI的时候UI的深度就是一个指定的数值,数值越大越靠前,尤其在布复杂界面的时候,深度值不知道怎么填非常恶心。现在有了UGUI这问题即可迎刃而解呀~如下图所示,Red图片在Blue图片前面,在看看Hieraychy视图,因为Blue在Red的上面,所以优先渲染Blue,然后是Red。那么Blue就在Red的上面了。。UGUI深度和在Hierarchy中的位置有关,位置越靠前的,深度值越小,显示渲染的位置越靠后。转载 2016-02-17 17:19:01 · 1442 阅读 · 0 评论 -
Unity_UGUI学习图集与使用(一)
UGUI的Atlas和NGUI的Atlas的区别,NGUI是必须先打出图集然后才能开始做界面。这一点很烦,因为始终都要去考虑你的UI图集。比如图集会不会超1024 ,图集该如何来规划等等。而UGUI的原理则是,让开发者彻底模糊图集的概念,让开发者不要去关心自己的图集。做界面的时候只用小图,而在最终打包的时候unity才会把你的小图和并在一张大的图集里面。然而这一切一切都是自动完成的,开发者不需要去care它。一定要打包才可以。转载 2016-02-17 16:36:28 · 4674 阅读 · 1 评论 -
Unity中鼠标左键按下,拖拽物体移动
鼠标左键按下,拖拽物体移动private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标 private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标 private Transform _trans;// 目标物体的空间变换组件 private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标 private Vector3 _vec3Offset;原创 2015-12-17 21:32:15 · 1641 阅读 · 0 评论 -
Unity3d 支持的图形格式和大小优化
主要参考了官方文档,Unity3D支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT(但根据本人的亲手测试,Unity3D对高压缩游戏贴图DDS是具有良好的解析功能的, 但DDS具体也分很多格式类型,我仅对游戏中提取出的DDS进行了测试)。 PSD中层在导入Unity之后将会自动合并,但原PSD文件的层则作为保留,不必介意在PSD里面存放有多个图层。原创 2015-11-18 19:20:18 · 6745 阅读 · 0 评论 -
Draw Call介绍和优化
Unity每次在准备数据并通知GPU渲染的过程称为一次Draw Call。一般情况下,渲染一次拥有一个网格并携带一种材质的物体便会使用一次Draw Call。对于渲染场景中的这些物体,在每一次Draw Call中除了在通知GPU的渲染上比较耗时之外,切换材质与shader也是非常耗时的操作。Draw Call的次数是决定性能比较重要的指标。对于IOS平台上来说,Draw Call应该控制在20此以内,这个值可以在Game视图窗口中的Statistic面板中查看。原创 2015-11-15 17:26:08 · 1126 阅读 · 0 评论 -
Unity3D播放视频
Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象。如下图所示,MOMO将default_video.mp4拖拽入Project视图中,如果视频中含有音频的话会对应生成audio文件,因为我的视频没有音频所以没有生成 audio文件。接着在Hierarchy视图中创建一个Plane对象视频将在它之上播放,Directional light世界定向光用于照亮整个游戏场景,最原创 2015-11-14 23:09:38 · 716 阅读 · 0 评论 -
Unity+NGUI性能优化方法总结
游戏中会有很多地方使用同一份资源。比如,有些界面会共用同一份字体、同一张图集,有些场景会共用同一张贴图,有些会怪物使用同一个Animator,等等。可以在制作游戏安装包时将这些公用资源从其它资源中分离出来,单独打包。比如若资源A和B都引用了资源C,则将C分离出来单独打一个bundle。在游戏运行时,如果要加载A,则先加载C;之后如果要加载B,因为C的实例已经在内存,所以只要直接加载B,让B指向C即可。如果打包时不将C从A和B分离出来,那么A的包里会有一份C,B的包里也会有一份C,冗余的C会将安装包撑大;并且转载 2015-11-11 23:10:27 · 840 阅读 · 0 评论 -
Unity基础—射线概念和API
射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。原创 2015-09-17 15:03:56 · 1530 阅读 · 0 评论