渲染流水线
渲染流水线概叙1.流水线:流水线相当于一种并行操作,可以提高单位时间的生产量。流水线系统中决定生产速度的是最慢的工序所需的时间。
2.渲染流水线:
应用阶段:有开发者决定,输出渲染图元
场景数据准备:摄像机位置、视锥体、场景中的模型数据、光源信息;
不可见剔除工作(Culling):把不可见的物体进行剔除;
渲染状态设置:设置模型的材质(漫反射颜色、高光反射颜色)、使用的纹理、使用的Shader等;
几何阶段:将顶点坐标变换到屏幕空间中,、输出二维顶点坐标、每个顶点对应的深度值、着色器相关信息;
光栅化阶段:对几何阶段得到的数据进行插值,然后进行逐像素处理;
3.渲染中GPU的可配置和可编程阶段
几何阶段:
顶点着色器:必编,实现顶点的空间变化和着色功能;
曲面细分着色器:可编,用于细分图元;
几何着色器:可编,用于执行逐图元的着色操作,或者用于产生更多的图元;
裁剪:可配,将不在摄像机视野内的顶点裁剪掉,并剔除某些三角图元的面片;
屏幕映射:固定,将图元的坐标转换到屏幕坐标系中;
光栅化阶段
三角形设置:固定,程序函数阶段;
三角形遍历:固定,程序函数阶 ...
ILRuntiome热更新技术
ILRuntime介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。
ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优点:
无缝访问C#工程的现成代码,无需额外抽象脚本API
直接使用VS2015进行开发,ILRuntime的解译引擎支持.Net 4.6编译的DLL
执行效率是L#的10-20倍
选择性的CLR绑定使跨域调用更快速,绑定后跨域调用的性能能达到slua的2倍左右(从脚本调用GameObject之类的接口)
支持跨域继承
完整的泛型支持
拥有Visual Studio的调试插件,可以实现真机源码级调试。支持Visual Studio 2015 Update3 以及Visual Studio 2017和Visual Studio 2019
最新的2.0版引入的寄存器模式将数学运算性能进行了大幅优化
C# vs Lua 目前市面上主流的热更方案,主要分为Lua的实现和用C#的实现,两种实现方式各有各的优缺 ...
YooAsset资源加载
YooAsset介绍 YooAsset是一套用于Unity3D的资源管理系统,用于帮助研发团队快速部署和交付游戏,它可以满足商业化游戏的各类需求,并且经历多款百万DAU游戏产品的验证。
安全高效的分包方案
基于资源标签的分包方案,自动对依赖资源包进行分类,避免人工维护成本。可以非常方便的实现零资源安装包,或者全量资源安装包。
强大灵活的打包系统
可以自定义打包策略,自动分析依赖实现资源零冗余,基于资源对象的资源包依赖管理方案,天然的避免了资源包之间循环依赖的问题。
基于引用计数方案
基于引用计数的管理方案,可以帮助我们实现安全的资源卸载策略,更好的对内存管理,避免资源对象冗余。还有强大的分析器可帮助发现潜在的资源泄漏问题。
多种模式自由切换
编辑器模拟模式,单机运行模式,联机运行模式。在编辑器模拟模式下,可以不构建资源包来模拟真实环境,在不修改任何代码的情况下,可以自由切换到其它模式。
强大安全的加载系统
异步加载 支持协程,Task,委托等多种异步加载方式。
同步加载 支持同步加载和异步加载混合使用。
边玩边下载 在加载资源对象的时候,如果资源对象依赖的资源包在本地不存 ...
情商的修炼之道
(人生往往是经历无数后悔才能实现的自我救赎,而高情商可以让你少走很多弯路)
何为情商情商的本质 情商的本质就是情绪,体现在以下几点;
论点一:情商高的表现之一就是让别人开心,跟你在一起很舒适,有情感上的共鸣;
论点二:同时,高情商在让别人开心的同时,也让自己开心,而那种靠牺牲自己,为难自己去让去别人感到舒适的,这并不是高情商;
结论:总之,真正的高情商是在自己和别人的情绪之间找到一个和谐点,彼此都特别愉快的实现共赢;
情商的层级 情商也是有层次的,请慢慢尝试从这几步去提升自己的情商
认识自己的情绪;
管理自己的情绪;
认知他人的情绪;
影响他人的情绪;
认识自己的情绪接受自己的情绪:
原因:一味的压抑自己的情绪并不是高情商的表现,当你被别人骂了,自己不开心时,却总安慰自己说没事,去学习、工作的时候就是很开心,隐藏自己的笑容却内心苦苦的,那只是憋屈和强忍;
结论:所以,我们得先学会人有这种情绪,才是解决这个情绪的开始,而接受、了解自己的情绪的情绪就得先从下面三点入手;
给情绪上标签
原因:情绪并没有我们眼里的那么简单,也许大部分人仍然认为情绪就是喜悦、愤怒和悲伤,但是这只是 ...
编译原理
引论什么是编译原理1.计算机编译语言的层次:
机器语言:可以直接被计算机直接理解;
汇编语言:引入助记符,但是还是难以被直接理解,由汇编语言到机器语言是通过汇编的形式;
高级语言:能直接理解的,由高级语言到汇编语言或者机器语言是通过编译的形式;
编译程序补充说明1.编译程序的功能:是把高级语言翻译成等价的目标程序,编译程序把”源语言”翻译成二进制文件的”目标语言”的过程,目标程序可以独立源程序运行(注意编译和运行是分俩个阶段的);
2.编译器的系统位置以及语言处理流程:源程序=>经过预处理源程序=>汇编语言程序=>可重定位机器码=>目标机器代码;
预处理器:把存储在不同文件中的源程序聚合在一起,把被成为宏的缩写语句转换为原始语句;
编译器:如上;
汇编器:进行可重定位,可重定位指的是在内存中存放的起始位置L不是固定的,而起始位置+相对地址=绝对地址;
链接器/加载器:其中加载器修改可重定位地址,将修改后的指令和数据放到内存中适当位置,而链接器将多个可重定位的机器代码文件连接到一起以及解决外部内存地址问题;
编译系统的结构1.编译过程的划分:分俩批次
第 ...
Unity相关-.Net说明以及mono跨平台原理
了解.Net相关知识微软.Net概述1.微软.Net说明:微软的.Net即不是编程语言也不是框架,是类似于互联网时代、次世代、21世纪的宣传口号,是一整套技术体系的统称,或者说是微软提供的技术水平的代号,本质上是微软为自己一系列取的一个代号,以下是包含内容;
框架体系:.Net Framework、.Net Core、Mono等等;
开发语言:C#、VB、F#等等(C#是.Net平台主推的开发语言);
开发工具:Visual Studio、Visual Studio Code 等等;
2.微软实现.Net平台的目的:
跨语言:只要是面向.NET平台的编程语言(C#、VB、C++、F#等等),用其中一种语言编写的内容可以无缝地用在另一种语言编写的应用程序中;
跨平台:一次编译,不需要任何代码修改,应用程序就可以运行在任意有.NET框架实现的操作系统上,即代码不依赖于操作系统,也不依赖硬件环境;
.Net跨语言1.跨语言公共语言规范:微软为了实现跨平台,制定了一些规范,只要一门语言支持这个规则,就能在.Net平台下开发应用程序,以下是规则说明;
CLS(公共语言规范):.Net专 ...
Unity插件-Animancer
Animancer介绍Animancer初步使用使用方法:添加Animator组件和AnimancerComponent相关组件,再编写脚本控制动画;
脚本案例:
public sealed class PlayAnimation : MonoBehaviour
{
[SerializeField] private AnimancerComponent _Animancer;
[SerializeField] private AnimationClip _Clip;
private void OnEnable()
{
_Animancer.Play(_Clip);
var state = _Animancer.Play(_Clip);
state.Speed = ...
state.Time = ...
state.NormalizedTime = ...
state.Events.OnE ...
ET6.0框架笔记
ET6.0框架介绍项目的初步运行1.运行Unity客户端项目,并且打开编程软件进行初步编译;2.打开服务端项目,第一次打开编译Client下的Mono文件夹;3.重新编译整个解决方案;4.客户端F5生成代码;
ET前后端通讯机制登录实例:1.通过NetKcpComponent组件创建Session会话连接;2.Session(由ET框架管理)会话的Id和TChannel进行绑定;3.而TChannel实际创建Socket连接,所以有了SessionId就有了Socket;4.Session向Socket写入客户端登录数据,传输到网关负载均衡服务器;
ET的多线程和分布式第一代服务器架构:使用单台物理机,单个服务器进程,单线程无阻塞Socket服务器所有玩家(无数据库软件);第二代服务器架构:采用分区分服模式,引用数据库软件存储数据,多个服务器进程同时运行,每个服务器单独一个游戏世界,互不牵扯,可以使用多台计算机部署架构,但是游戏服务器进程直接和玩家连接,同时也要和数据库连接;第三代服务器架构:发展除让玩家统一连接的网关服务器,游戏服务器进程只和网关服务器进行通讯,而数据库的任务则交给数 ...
Unity进阶-FairyGUI
FairyGUI概叙FairyGUI介绍 FairyGUI是跨引擎的开源UI解决方案,它包含一个UI编辑器 以及 多个流行游戏引擎的运行库(SDK),支持包括Unity,Unreal,Cocos2dx,Egret,Laya,Flash等等游戏引擎。
FairyGUI的工作流程1.在FairyGUI编辑器中编辑UI;2.将编辑好的UI导出对应资源(图集和配置文件);3.将资源导入对应引擎后,结合FairyGUI提供的运行库(SDK) 进行UI功能的制作;
FairyGUI的优缺点优点:
可以让美术同学使用编辑器进行UI面板的拼凑,降低美术同学的学习成本,美术不用学习如何使用游戏引擎;
方便项目UI部分的移植;
FairyGUI提供了比UGUI、NGUI更多的功能,方便我们的使用;
缺点:
由于它是跨引擎的工具,对部分引擎支持不到位,使用时会遇到一些bug,但Untiy作为主流引擎,相对来说问题较少;
FairyGUI基础编辑器基础使用1.项目文件夹结构:
assets:包内容放置目录 ,例如package1:每个包一个目录。目录名就是包名;
assets_xx:分支内容放置目 ...
Unity进阶-Editor
Editor文件夹1.Editor介绍:以下介绍
Editor文件夹可以放在项目的任何文件夹下,可以有多个;
放在其中的内容,项目打包时不会被打包到项目中;
一般编辑器相关代码都可以放在该文件夹中;
要想访问Editor的代码,必须也放在该文件夹下;
添加菜单栏1.编辑器菜单栏添加新的选项入口
//可以通过Unity提供我们的MenuItem特性在菜单栏添加选项按钮
//特性名:MenuItem
//命名空间:UnityEditor
//规则一:一定是静态方法
//规则二:我们这个菜单栏按钮 必须有至少一个斜杠 不然会报错 它不支持只有一个菜单栏入口
//规则三:这个特性可以用在任意的类当中
[MenuItem("GameTool/Test")]
private static void Test()
2.刷新Project窗口内容
//类名:AssetDatabase
//命名空间:UnityEditor
//方法:Refresh
Direct ...
Unity进阶-InputSystem
InputSystem概述1.InputSystem说明:Unity提供的新的用于检测玩家设备输入的系统,InputSystem让我们可以专注于功能逻辑开发,不用操心输入检测相关代码;
2.InputSystem导入说明:packageManager中导入Input System
3.InputSystem选择说明:导入InputSystem包后,老的输入系统会被禁用掉,可以在File——>Build Setting——>Player Setting——>Other——>Active Input Handling中可以同时启用也可以只启用其中之一,每次启用后会重启Unity;
InputSystem知识点代码检测输入1.代码直接监听的说明:这种观察者模式的监听方式和InputManager是基本类似的,但是这也就是InputManager的弊端,所以直接得代码检测方式对于InputSystem一般是简单做法或者是有特殊需求才使用的,新输入系统的设计初衷就是想提升开发者的开发效率,不提倡写代码来处理输入逻辑,之后我们学了配置文件相关知识后,都是通过配置文件来设置监 ...
Lua语言
Lua概述 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。
轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
其它特性:
支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
语言内置模式匹配;闭包(cl ...