![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity3D
文章平均质量分 67
惊风无尘
研发工程师一枚,热爱编程,喜欢探讨,有问题加群522192138,一起交流,一起进步
展开
-
分析矩形绕任意点旋转N度
一、点绕原点旋转A度二维平面的旋转矩阵是,点p(x,y)绕原点(0,0)旋转A度 就是*旋转后的点为p1(x1,y1)其中:x1 = cosA*x -sinA*y ; y1 = sinA*x + cosA * y;二、点绕任意点旋转A度点(x,y)绕任意点(ox, oy)旋转A度的做法分两步:1:转换到绕原点(0,0)的旋转,即:两个点都平移(-ox, -oy),则点p的新坐标就是p(x - ox, y - oy)旋转后的点为p1(x1,y1)其中:x1 = ...原创 2021-09-16 18:10:42 · 2842 阅读 · 0 评论 -
Unity GC 算法->Boehm GC algorithm
Mono支持内存自动回收,因为MONO集成了内存回收算法。在1.X到2.X的版本中,MONO集成了贝母内存管理及回收算法;而在3.X或更高版本中,则开始启用SGEN内存管理及回收算法。BOEHM属于一个开源项目,其实现为支持C/C++的内存管理及GC,在C/C++项目中,将分配内存部分接口(malloc或者其他分配内存等接口)替换成BOEHM提供的内存分配接口(GC_malloc),则可以在C/C++项目中实现内存自动管理,无需手动调用free等释放内存接口。而MONO正是基于BOEHM,实现了内存管理及原创 2021-02-22 18:14:22 · 1751 阅读 · 0 评论 -
shader基本知识汇总,关键字详解Tag,Lab,Properties,_Time,渲染顺序
TagTags { “Queue”=“Geometry+10” “RenderType”=“Opaque” }“Queue"标签。定义渲染顺序:“Background”。值为1000。比如用于天空盒。“Geometry”。值为2000。大部分物体在这个队列。不透明的物体也在这里。这个队列内部的物体的渲染顺序会有进一步的优化(应该是从近到远,early-z test可以剔除不需经过FS处理的...原创 2019-12-28 16:14:11 · 817 阅读 · 0 评论 -
UnityShader 内置函数
编写Unity Shader时有很多内置函数,在网上查找了一些,把他们记录了下来,以供大家参考使用参考网址:http://www.cppblog.com/lai3d/archive/2008/10/23/64889.html这个是MSDN上的,DirectX Documentation里也有,其实也就是HLSL的内置函数Intrinsic Functions (DirectX HLSL) The转载 2017-08-03 13:16:18 · 513 阅读 · 0 评论 -
Unity3D优化
优化: 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种, 每家的GPU支持不同的压缩格式,但他们都兼容ETC格式,对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit。减少FPS,在ProjectSetting-> Quality中的 VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS=60,Eve原创 2017-08-04 11:25:07 · 1440 阅读 · 0 评论 -
Shader-ZTest, ZWrite
参考博客:http://blog.csdn.net/lyh916/article/details/45317571参考博客:http://blog.csdn.net/cbbbc/article/details/70118013介绍深度测试(ZTest)和深度写入(ZWrite)意义之前先解释下二者的概念:颜色缓存color buffer/pixel buffer:储存该点即将显示的颜色,RGBA值原创 2017-09-12 14:10:55 · 883 阅读 · 0 评论 -
Unity3D Shader语法
本文转载于:http://www.omuying.com/article/27.aspxShader “name” { [Properties] Subshaders [Fallback] } 定义了一个着色器。着色器拥有一个 Properties 的列表。着色器包含一个子着色器的列表(SubShaders)。并且至少包含一个(SubShader)。当加载一个着色器时,Unity 将遍历这个列表,获转载 2017-08-03 13:37:23 · 549 阅读 · 0 评论 -
NGUI WrapContent
为了解决启动成就、排名等UI时的卡顿问题,需要用wrapcontent脚本,在网上找了篇博客,试了试,还行,支持多行单列,多行多列。(多行多列我的做法是用一个空gameobject作为多列子项的父物体)。 具体做法: 首先给UIGrid组件所在物体挂wrapcontent脚本,然后设置minIndex = 0, itemSize = grid.cellHeight, 最后设置刷新函数o...原创 2018-04-08 14:02:39 · 1441 阅读 · 0 评论 -
NGUI的TypewriterEffect
在制作人物会话时,一般喜欢文笔内容逐字显示,但ngui自带的TypewriterEffect不能满足多次使用要求,然后就自己改了改: 用法:每次给UILabel控件赋值完成后,调用Reset函数。 lab.text = str; effect.Reset(str); 修改后的脚本内容如下://----------------------------------------------...原创 2018-04-08 14:11:20 · 1160 阅读 · 0 评论 -
菲涅尔效果
游戏中为了体现人物处于某种特殊状态(如狂怒,矍铄等),可以在模型的表面在一些顶点出增加自己设定的颜色,如下图所示 菲涅尔效果的意义是:当光从一种具有折射率为的介质向另一种具有折射率为的介质传播时,在两者的交界处(通常称作界面)可能会同时发生光的反射和折射。菲涅尔方程描述了不同光波分量被折射和反射的情况。 shader如下:Shader "Custom/ShipShader" { ...原创 2018-04-14 17:51:43 · 4098 阅读 · 0 评论 -
隐藏虚拟按键
android sdk 19以上的手机存在虚拟按键,玩游戏本着屏越大越舒服的感觉,因此在游戏刚开始的时候自动隐藏的虚拟按键,对用户来说是很友好的做法,代码如下:void onCreate(Bundle savedInstanceState) {{ super.onCreate(savedInstanceState); initImmersiveMode();}@Supp...原创 2018-04-20 16:29:27 · 719 阅读 · 0 评论 -
在shader调用unity内置lightmap和Light Probes
在编写unity shader的时候,有时候会有需求,希望写的shader能支持unity内置lightmap或者light probe (灯光探测器)。如果是用surface 编写的话,这些自然不用考虑,unity会自动编译支持,但如果是用vert&frag编写shader,这些需要自己添加相关代码调用了 。unity内置lightmap的调用为了使unity内置数据和各种宏定义...转载 2018-04-20 16:59:28 · 924 阅读 · 0 评论 -
边缘发光
边缘发光公式:最终颜色 = (漫反射系数 * 纹理颜色 * RGB颜色) + 自发光颜色练习shader代码Shader "Custom/MarginLight" { Properties { _EmissiveTex("emissive texture", 2D)="white"{} _Color("blend color", Color)=(1原创 2017-07-25 17:08:50 · 442 阅读 · 0 评论 -
曲面绘制Mesh
在 3d模型上边绘制mesh是很平常的操作,如车轮压过的轨迹等等。在场景中建一个空的gameobject, 然后添加meshfilter 和meshrender组件, 传入参数,把返回值赋值给meshfile.mesh对象就能在屏幕上看见了,代码如下: 有中间点的mesh绘制代码 public static Mesh CreateCurveMesh(MeshFilter meshFi原创 2017-07-21 20:37:40 · 1286 阅读 · 0 评论 -
NGUI_Panel(clipped panels must have a uniform scale)
使用NGUI,通过更改父物体的scale来适配屏幕时,如果子panel使用softclip,子panel会出现错误:clipped panels must have a uniform scale, 出错原因是子panel的scale的x,y,z不一致,因此解决方法就是把panel物体的transform的scale的xyz换算成(1,1,1),通过改变所有子物体的,但改变后为了裁剪会出问题,因此通原创 2017-07-20 11:22:42 · 1112 阅读 · 0 评论 -
Shader performance
Performance of a shader mostly depends on two things: shader itself and which Rendering Path is used by the project or specific cameraFrom the rendering paths Unity supports, Deferred Lighting and V原创 2015-04-07 08:16:31 · 956 阅读 · 0 评论 -
Mesh renderer 和 Mesh 和 Mesh Filter
Mesh:网格作用:由三角形组成。由一个数组存储,前3个元素表示第一个三角形的顶点,然后依次表示第2个、第三个。法线是三角形边和角之间的面方向的插值,法线插值可以用来创建平滑着色,来近似曲面。为了实习光照射表面的阴影效果,增加了法线。通过入射光方向和法线的夹角进行着色处理。网格的表面是纹理(texturing)纹理三角形被拉伸和固定以适应网格三角形。纹理三角原创 2015-04-06 10:43:11 · 5610 阅读 · 0 评论 -
material之UV,offset,tiling
UV坐标系如图: offset指定使用贴图的起始位置, 取值范围[0,1]tiling:从offset位置处开始平铺图片,超过的部分(即空白处)会按比例生成新的区域 拼接 到空白处。 取值范围[-1,1] 在unity中建一个cube,新增一个用下图填充的材质球,改变offset和tiling的值,你就会明白为什么。 假设:offset的x和y的值分别为(0.1,0.25),则可以理原创 2016-03-17 20:03:43 · 5230 阅读 · 0 评论 -
Unity Render Path
Render Path详细讲解转载:http://blog.sina.com.cn/s/blog_471132920101dfvh.html一:Vertex Lit Vertex Lit即顶点光照,顾名思义, 就是所有的光照计算都是在顶点进行的,因此所有的像素运算效果都不支持,如阴影,法线贴图,light cookies等。一个物体一般只有一个pass。效果最差,运行最快。适合老设备或者一般的移动转载 2017-04-12 19:58:07 · 1209 阅读 · 0 评论 -
雷达小地图制作
小地图在游戏中很常见,制作原理也很简单,简单说明下: 让美工做一张整个场景平面分布图片,然后通过计算模型与图片的比例来计算角色摄像机所在地图位置映射到小地图上对应的位置,具体步骤:1、要知道模型以及图片大小,用来计算比例。2、通过角色位置,利用模型与图片的之间的比例,计算指标位置所在位置。3、角色左右旋转的角度传到到UI指标的上来。原创 2017-05-25 16:46:32 · 1360 阅读 · 0 评论 -
向量点乘 和 叉乘
向量点乘点乘结果是一个标量,并满足交换律向量a = (ax,ay);向量b = (bx,by);a . b = ax * bx + ay * by = ||a|| * ||b|| * cosA; A 为两向量的夹角。几何意义:点乘结果描述了两个向量的“相似”程度。点乘结果越大,两向量越相近。(点乘对零向量的解释是,零向量和其它任意向量都垂直)a . b > 0 : 0 方原创 2015-04-14 21:21:32 · 6333 阅读 · 0 评论 -
Unity3d实现帧同步
第一部分在帧同步模型中,每个客户端都会对整个游戏世界进行模拟。这种方法的好处在于减少了需要发送的信息。帧同步只需要发送用户的输入信息,而对于反过来的中心服务器模型来说,单位的信息则发送越频繁越好。比如说你在游戏世界中移动角色。在中心服务器模型中,物理模拟只会在服务器执行。客户端告诉服务器,角色要往哪个方向移动。服务器会执行寻路而且开始移动角色。服务器紧接着就会尽可能频繁地告知每个客户端该角色的位置。转载 2017-05-27 20:04:08 · 4901 阅读 · 0 评论 -
Shader学习(一)
Unity的Shader分为三种: (1)Fixed function shader 属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的Fallback。使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。 (2)Vertex and Fragment Shader 最强大的Shader类型,属于可编程渲染管线. 使用原创 2017-07-04 11:20:34 · 229 阅读 · 0 评论 -
Shader学习(二)
unity 中绘制屏幕要将每个物体从自己所属的物体空间依次经过世界空间,摄像机空间,裁剪空间,标准设备空间进行变换,最终到达实际窗口空间。整个渲染过程分为应用阶段、几何阶段、光栅化阶段: 应用阶段 输出 渲染图元 给 几何阶段 几何阶段 输出 屏幕空间的顶点信息 给 光栅化阶段 1. 应用阶段 通常由cpu负责实现, 把数据加载到显存 设置好每个模型的渲染状态, 调用DrawC原创 2017-07-04 12:45:05 · 302 阅读 · 0 评论 -
VR开发中陀螺仪数据转换
1、判断手机是否支持陀螺仪 SystemInfo.supportsGyroscope 2、获取陀螺仪数据并转换Gyroscope gyro = Input.gyro;gyro.enabled = true;读取陀螺仪数据并转换到右手坐标系下var att = Input.gyro.attitude * Quaternion.identity;att = new Quaternion(att.原创 2017-07-04 13:13:13 · 1881 阅读 · 1 评论 -
左手坐标系和右手坐标系
左手坐标系:伸出左手,让大拇指和食指形成L形状,大拇指向右,食指向上,其余的手指指向前方。拇指指向代表X正方向,食指指向代表Y正方向,其余手指指向代表Z正方向。右手坐标系:伸出右手,让大拇指和食指形成L形状,大拇指向右,指向向上,其余的手指指向前方。拇指指向代表X正方向,食指指向代表Y正方向,其余手指指向代表Z正方向。原创 2015-03-29 19:24:05 · 849 阅读 · 0 评论