unity

unity(1)unity基础笔记02:材质,着色器,摄像机,天空盒

冷暖自知 提交于 2019-12-14 02:38:33
unity视频av28779788学习笔记~~DAY2上午 当前为-->第一部分:UNITY基础 以上是昨日学习内容。 材质 操作:给物体赋予材质(见视频av28779788?t=619&p=10,略) 材质的渲染模式Rendering Mode: 1.Opaque:默认为不透明的,即直接覆盖; 2.Cutout:裁切模式.不显示纹理中的透明背景. 3.Fade:淡入淡出.调节A通道可以让物体完全不可视至完全可视. 4.Transparent:透明模式(须指定透明度A通道).譬如玻璃.注意:即使A通道指定为0,物体还是可视的,并不会看不见. 例如,以上是4种渲染模式的区别。如果树(Plane物体)不指定Cutout模式而是用默认的Opaque模式,则Plane物体会连树带黑漆漆的背景一起显示,不是我们想要的结果。 指定为Transparent的物体,A通道即使设置为0,我们也可以看得见。如果想物体完全不可视看,可指定为Fade模式,且A通道指定为0即可。 摄像机 勘误:上图Field of View裁剪面实际为【Clipping Planes裁剪面】 Depth:如果有多个摄像机。则先渲染Depth值小的摄像机,再渲染Depth值大的摄像机。 天空盒 操作:创建并使用天空盒 1.建立一个材质,把它的着色器Shader设置为Skybox中的6 sided

[Unity Shader] Shader学习笔记2

时光总嘲笑我的痴心妄想 提交于 2019-12-13 21:52:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Unity 有三种编写shader的方式: surface shaders , vertex and fragment shaders , fixed function shaders . fixed function shader (固定功能着色器): 对应于固定管线硬件的操作,最简单的着色器类型,只能使用Unity3D自带的固定语法和提供的方法,适用于任何硬件,使用难度最小。 vertex and fragment shader (顶点片段程序着色器): 顶点和片段着色器,如前所述,是可编程图形管线主要支持的方式。是效果最为丰富的着色器类型,使用Cg/HLSL语言规范,着色器由顶点程序和片段程序组成。所有效果都需要自己编写,使用难度相对较大。 surface shader (表面着色器): Unity推荐的shader类型。同样使用Cg/HLSL语言规范的着色器类型,不过把光照模型提取出来,可以使用Unity3D自带的一些光照模型,也可以自己编写光照模型,着色器同样由顶点程序和片段程序组成,不过本身有默认的程序方法,使用者可以只针对自己关系的效果部分进行编写。由于选择性比较大,所以可以编写出较为丰富的效果,使用难度相对vertex and fragment shader小。 可以理解其是对Vertex 和

猫都能学会的Unity3D Shader入门指南(一)

人盡茶涼 提交于 2019-12-13 21:52:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原文地址 http://onevcat.com/2013/07/shader-tutorial-1/ 动机 自己使用Unity3D也有一段时间了,但是很多时候是流于表面,更多地是把这个引擎简单地用作脚本控制,而对更深入一些的层次几乎没有了解。虽然说Unity引擎设计的初衷就是创建简单的不需要开发者操心的谁都能用的3D引擎,但是只是肤浅的使用,可能是无法达到随心所欲的境地的,因此,这种状况必须改变!从哪里开始呢,貌似有句话叫做会写Shader的都是高手,于是,想大概看看从Shader开始能不能使自己到达的层次能再深入一些吧,再于是,有了这个系列(希望我能坚持写完它,虽然应该会拖个半年左右)。 Unity3D的所有渲染工作都离不开着色器(Shader),如果你和我一样最近开始对Shader编程比较感兴趣的话,可能你和我有着同样的困惑:如何开始?Unity3D提供了一些Shader的手册和文档(比如 这里 , 这里 和 这里 ),但是一来内容比较分散,二来学习阶梯稍微陡峭了些。这对于像我这样之前完全没有接触过有关内容的新人来说是相当不友好的。国内外虽然也有一些Shader的介绍和心得,但是也同样存在内容分散的问题,很多教程前一章就只介绍了基本概念,接下来马上就搬出一个超复杂的例子,对于很多基本的用法并没有解释

优化

非 Y 不嫁゛ 提交于 2019-12-13 12:41:37
WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享。 一、移动平台硬件架构 移动平台无论是Android 还是 IOS 用的都是统一内存架构,GPU和CPU共享一个物理内存,通常我们有“显存”和“内存”两种叫法,可以认为是这块物理内存的所有者不同,当这段映射到cpu,就是通常意义上的内存;当映射到gpu,就是通常意义上的显存。并且同一段物理内存同一时刻只会映射到一个device。 即使是在同一物理内存上 ,之前的openGL ES规范中CPU和GPU之间的内存是不能共享的,vertex和texture的buffer是需要拷贝的。后面出来的vulkan 与IOS的metal 可以共享内存。 了解了移动平台的硬件架构,就知道了 1)CPU 2) 带宽 3) GPU 4) 内存 都有可能成为移动平台3D应用性能瓶颈。 二、移动平台3D应用的画面渲染过程 1、CPU通过调用绘制命令(称为一次Draw Call)来告诉GPU开始进行一个渲染过程的。一个Draw Call命令会指向本次绘制需要渲染的信息,这些信息包括:顶点数据、纹理数据、shader参数(光照模型、法线方向、光照方向等)等,简单地说就 画什么,用什么画,怎么画。 2、GPU接收到Draw

Unity 关于帧同步的一些问题

≡放荡痞女 提交于 2019-12-13 04:51:05
1:帧同步如何解决不同步的问题? 可靠稳定的帧同步基础算法 消除浮点数带来的精度误差 控制好随机数 参考: Unity帧同步游戏极简框架及实例(附客户端服务器源码) 2:帧同步怎么做到流畅的战斗? 首先,定义一下流畅的战斗,流畅的战斗并不是代表着游戏的帧数一定要多高多高,而是说游戏的帧数在某一个帧数范围内小规模的变动,例如稳定在30帧这样。 对于单机游戏来说,如果要保证稳定在30帧,每一帧的逻辑、渲染等耗时不能高于33MS,所以需要小心的规划每一个函数的使用,采用分帧执行、算法优化等手段优化卡顿点。 而对于帧同步来说,不仅仅需要完成单机游戏的优化、还要针对网络波动进行针对的优化。 我们知道,网络传输无法保证每一次传输的延迟都是一定的,有时候10MS就能完成一次传输,有时候1000MS才能完成一次传输,那么客户端如何保证网络传输不稳定的情况下,逻辑帧的运行还是相对稳定的呢?下面是给到的两种解决方案。 收到逻辑帧消息之后,不立即去播放,而是存着,播放使用固定的延迟进行播放 ,表现上就是玩家每次进行操作的时候,并不是马上生效的,而是有一小段固定延迟,这样网络在我们设置的延迟内波动的话,玩家是感受不出来卡顿的。但是缺点也很明显,每一个玩家都会有一段延迟。 另外一个处理方式就是, 逻辑和表现进行分离 , 表现帧由玩家和逻辑帧进行驱动,逻辑帧卡顿并不影响表现帧,表现帧由玩家进行控制播放

运行时关闭unity的Debug.Log

£可爱£侵袭症+ 提交于 2019-12-12 19:19:48
Debug.unityLogger.logEnabled = false(目前我在unity2018版本中用到) 在开发Unity的时候,在输出log的时候大家都会采用Debug.log()的方式来输出Log,但是游戏发布的时候这样的Log是不能关闭的,在用户手机运行产生一堆LOG也不是啥好事,一定要关闭才行、主要是unity官方也没有提供直接关闭的方法。 既然官方没提供方法,那么我们就得自己想办法。于是我写了一个类把Debug.log包了一层。 C# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 using UnityEngine; using System.Collections; public class Debuger { static public bool EnableLog = false; static public void Log(object message) { Log(message,null); } static public void Log(object message, Object context) { if(EnableLog) { Debug.Log(message

unity 画折线图,饼型图插件

荒凉一梦 提交于 2019-12-12 17:15:24
在unity中画折线图,和饼型图等数据分析图是很困难 的一件事,幸好我找到了一个插件很方便的解决了这件事,效果如下图: 折线图,饼型图,等。 运行效果如下: 百度网盘下载地址:链接: https://pan.baidu.com/s/10oLG1Zmffv7ASWG0pvx05w 提取码:lub1 如果链接失效,请留言。 来源: 51CTO 作者: GuangYao_Li 链接: https://blog.51cto.com/14058389/2425723

Unity 资源优化方法及移动设备上优化

元气小坏坏 提交于 2019-12-12 16:50:52
1、光照烘焙(Baked Lighting) 关闭实时阴影,得到实时阴影的物体将无法被批处理,导致大量的额外绘制调用的开销。在PC上,你仅能通过单一的即时方向光来得到不错的动态阴影,但在移动端请用烘焙好的光照,不要用实时阴影。 2、纹理集合(Texture Atlasing) 每个不同材质都会至少导致一个新的绘制调用,你可能会以为一个木头门和铁椅子必须使用不同的材质,毕竟它们使用了不同的纹理。但是如果它们能使用同样的着色器,你可以使用纹理集合来创建一个材质,同时兼容这两个物体。 一个纹理集合其实就是一个大纹理贴图,里面包含了各种各样的小纹理。你可以让某个材质加载几个纹理而非让一堆材质加载一堆纹理,每个物体都能通过不同的纹理映射来加载这个纹理集合上的不同坐标位置的一小片纹理。你也可以在绘制管线中手动生成纹理集,Juan Sebastian的Pro Draw Call Optimizer工具非常有用,它可以生成纹理集,并且在替换新对象时不会搞混资源。 3、动态批处理(Dynamic Batching) 移动非静态物品也能被动态批处理为单一绘制调用,这对于CPU来说开销较大,每帧都经过计算,但就优化最终结果来说还是不错的。不过要注意的是这只对低于900个顶点并有着同样材质的物体才有用,使用纹理集合来为你的动态物体创建一个单一材质,然后你就能得到简单的动态批处理了。 4、多细节层次

unity A Star寻路算法

怎甘沉沦 提交于 2019-12-12 04:34:30
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class AStar : MonoBehaviour { private static AStar _instance; public static AStar Inst() { return _instance; } void Awake() { _instance = this; } public int width;//地图的宽(需要为双数) public int height;//地图的高(需要为双数) public const float gridWidth = 0.5f;//格子的宽高 private const float gridGapDis = 0.05f;//格子之间的间隙 public Point[,] map;//格子 private List<Vector2> aimPosList_Test = new List<Vector2>();//测试用目标点位置列表 void Start() { SetMapWH();//根据屏幕的高宽设置格子的个数 map = new Point[width, height];//地图格子二维数组 InitMap();/

Unity相关知识体系梳理(一)c#语言_5

Deadly 提交于 2019-12-12 03:07:45
Unity相关知识体系梳理(一)c#语言_5 昨天我们进行了C#的第四部分的梳理,我们今天将讲解的主要部分是C#中的判断条件和循环条件等。 判断条件 判断句就是我们日常生活中所说的,如果是真的那就怎么样,如果是假的那又怎么样。还有其他的一些情况,在代码的表现看下例: static void Main ( string [ ] args ) { int tmpIntA = 0 ; int . TryParse ( Console . ReadLine ( ) , out tmpIntA ) ; if ( tmpFunction ( tmpIntA ) == "" ) { Console . WriteLine ( "我输入了奇怪的东西" ) ; } else { Console . WriteLine ( tmpFunction ( tmpIntA ) ) ; } } static string tmpFunction ( int Input ) { string tmpStringA = "" ; switch ( Input ) { case 0 : tmpStringA = "我输入了 0" ; break ; case 1 : tmpStringA = "我输入了 1" ; break ; case 2 : tmpStringA = "我输入了 2" ; break ;