Lua5.0原理探究
前言
马上要去公司搬砖了,想要提前做一下准备,emm。。。其他倒还好,Lua没用过,也没详细了解过,怕到时候拉胯,所以先准备一下Lua吧。
Lua作为一个内部的软件开发工具,诞生于学院实验室,然而,不知何故,很快被全世界的几个工业项目所采用,而且目前正被广泛运用于游戏行业。
Lua基础
解释与执行
首先,Lua是一个基于C而制作的的脚本语言(动态语言,弱类型语言),他与我们常使用的C++,C#这些编程语言(静态语言,强类型语言)的最大差别之一就是前者在运行时进行编译,后者则是在运行前就编译好
用图片表示就是这样
下面是我做了一个Lua与C#编译运行的对照表格
语言
编辑
预编译
运行时编译
执行
Lua
编写lua文件
无
虚拟机读取字节码并转换成虚拟机指令,汇编器编译成机器码
CPU执行机器码
C#
编写cs文件
被C#编译器编译成dll,包含IL代码
CLR使用JIT编译把IL转换成机器码
CPU执行机器码
我们可以看到,Lua较为核心和重要的点就是他的虚拟机了,接下来就看看虚拟机在这个过程中具体做了什么
编译系统
编译系统的工作就是将符合语 ...
Unity DOTS:ECS拓展内容
Sync points
synchronization poin(sync point)是程序执行中的一个点,它等待到目前为止已调度的所有job的完成。同步点会限制您一段时间内使用Job System中所有可用工作线程的能力。因此,通常应避免同步点。
Structural changes(结构变化)
同步点是由 您在任何其他job正在操作components时不能安全执行自己的操作所引起的。ECS中数据的结构更改是引发Sync points的主要原因。以下所有都是结构上的变化:
创建entities
删除entities
向entity添加component
从entity中删除component
更改sharedcomponent的value
广义上讲,任何更改entity archetype或导致chunk中entities顺序更改的操作都是结构性更改。这些结构更改只能在主线程上执行。
结构更改不仅需要Sync points,而且还会使对任何component数据的所有直接引用无效。这包括DynamicBuffer的实例以及提供对component(例如Component ...
Unity Profiler学习笔记:CPU使用分析器模块
CPU Usage Profiler module
CPU使用分析器模块的图表显示了在应用程序中花费的时间。它包含应用程序花费时间的所有重要领域的概述,比如渲染,它的脚本和动画[toc]。本文包括: - CPU使用图表 - CPU使用模块详细信息窗格 - Timeline视图 - 层次结构和原始层次结构视图 - 常见的样品 - 性能警告 - 分配调用堆栈 - 只有在编辑器模式下才会出现的样例
Chart categories(图表类)
CPU使用分析器模块的图表跟踪应用程序主线程上花费的时间。时间花费分为九类。您可以通过在图表的图例中拖放类别来更改图表中的类别顺序。您还可以单击类别的彩色图例来切换其显示。
Rendering(渲染)
应用程序在渲染图形上花费的时间。
Scripts(脚本)
应用程序在运行脚本上花费的时间。
Physics(物理)
应用程序在物理引擎上花费的时间
Animation(动画)
您的应用程序在动画化SkinnedMeshRenderers、GameObjects上花费的时间 以及应用程序中的其他组件。这还包括用于系统动画和Animator组件的 ...
(译)Introduction To Direct3D 12
本文翻译自:Introduction to Direct3D 12 的前半部分,前半部分讲了一些DX细节,对于理解基础知识很有帮助,后半部分偏实践练习,翻译意义不大。
介绍Direct3D 12
DirectX 12是微软最新一代的DirectX APIS,Direct3D 12是其图形API集合(其余API类型为DirectSound,DirectInput,DirectDraw等)。Direct3D 12比先前的任何一个Direct3D版本表现的都要好,Direct3D提供了对于图形硬件更加底层的控制来允许更加高效的利用多线程。我们可以利用多线程来填充command lists。有更多控制权同时也意味着我们需要承担更多的责任,例如CPU/GPU同步以及内存管理。
Direct3D通过使用预编译的pipeline state objects(PSO)和command lists(bundles)来最小化CPU开销。
在我们应用的初始化阶段,我们会创建很多由shaders(vertex,pixel等)和其他管线状态(blending,rasterizer,primitive top ...
从零开始分析C#所有常用集合类的设计(源码向)
前言
此些天来,武疫兴然,吾甚惧焉,居家不出,项目做完,游戏玩腻,根亦秃噜,百无聊赖,猛然惊醒,吾当面试,基础犹菜,从何下手,唯有C#,C#之何,集合为多,多而不晓,遂有此文。
环境
.Net Framework 4.8
前置知识
Hash
Hash算法无论是在项目开发还是底层语言设计上都是非常常见的一个算法,既然如此常用,那么它的重要性自然不必多说,这也是把它放在第一位讲的原因。
Hash算法与Hash函数
Hash算法是一种数字摘要算法,它能将不定长度的二进制数据集给映射到一个较短的二进制长度数据集。常见的MD5算法就是一种Hash算法,通过MD5算法可对任何数据生成数字摘要。而实现了Hash算法的函数我们叫它Hash函数。Hash函数有以下几点特征。
相同的数据进行Hash运算,得到的结果一定相同。
不同的数据进行Hash运算,其结果也可能会相同。
Hash运算是不可逆的,不能由key获取原始的数据。
常见的Hash算法
直接寻址法:取keyword或keyword的某个线性函数值为散列地址。即H(key)=key或H(key) = a•key + b,当中a ...
Unity DOTS:Components部分
组件
Components是ECS体系结构的三个主要元素之一。它们代表您的游戏或应用程序的数据。Entities是索引您的components集合的标识符,而systems提供了行为。
ECS中的Components是具有以下“标记接口”之一的结构体类型:
IComponentData —用于通用和[chunk components]。
IBufferElementData —将[动态缓冲区(dynamic buffers)]与entities相关联。
ISharedComponentData —按archetype中的值对entities进行分类或分组。有关更多信息,请参见[Shared Component Data]。
ISystemStateComponentData —将特定system的状态与entity相关联,并检测何时创建或销毁单个实体。有关更多信息,请参见System State Component。
ISharedSystemStateComponentData —共享状态和System状态 数据的组合。请参阅System State Component。
Bl ...
Unity DOTS:使用ECS进行GamePlay开发
本节包含有关如何在Unity Editor中创建基于DOTS的游戏和其他应用程序的信息。它还涵盖了ECS提供的可帮助您实现游戏功能的systems和components。
该systems包括:
Unity.Transforms:提供用于定义世界空间变换,3D对象层次结构以及管理它们的systems的components。
Unity.Hybrid.Renderer:提供components和systems以在Unity运行时中渲染ECS entities。
GamePlayer支持包
DOTS中的某些游戏功能需要额外的程序包来支持它们。有关需要其他软件包的功能列表,请参见下表。
Feature
Packages
DOTS ECS
com.unity.entities
Rendering
com.unity.rendering.hybrid
- Hybrid Renderer V2
com.unity.render-pipelines.high-definition or com.unity.render-pipelines.universal
- A ...
Unity DOTS:Systems部分
Systems
一个system,也就是ECS里的S,提供了将component的数据从其当前状态变换到其下一个状态的逻辑-例如,一个system可以通过velocity乘以Time.deltaime来更新所有可移动entities的位置。
Instantiating systems
Unity ECS自动在您的项目中发现system类型,并在运行时实例化它们。它将每个发现的system添加到默认system groups之一中。您可以使用system attributes来指定system的父组以及该system在该group中的顺序。如果未指定父项,则Unity将以确定性的,但并未指定顺序的将system添加到默认世界的Simulation system group中。您也可以使用attribute禁用自动创建。
system的更新循环由其父ComponentSystemGroup驱动。ComponentSystemGroup本身是一种特殊的system,负责更新其child systems。group可以嵌套。system从运行的world获取time数据;time由Up ...
基于Github使用Hexo建站过程记录
前言
从WordPress刚转过来,感觉很爽,本主题基于butterfly:https://github.com/jerryc127/hexo-theme-butterfly 配置,本文记录Hexo建站过程中遇到的问题和相关解决方案。
快速入门Hexo
https://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html
npm Install卡住
使用代理registry
1npm config set registry https://registry.npm.taobao.org
来自OSS的图片无法显示
因为防盗链的原因,所以需要给每个md文件加上
1<meta name="referrer" content="no-referrer" />
详见:https://segmentfault.com/a/1190000017896469
Hexo更换电脑重新部署
https://www.jianshu.com/p/906294181814 ...
2020个人年度总结
今年的时间线很简单,最主要还是因为疫情原因吧。(好吧,我本身也是个比较无聊的人,打代码,打游戏,吃饭,睡觉,但是我对这样的生活不感到枯燥,反而有种岁月静好的感觉,hh。)
简单归简单,好说歹说也发生了对我人生影响重大的一件事不是?
那么,让我带你坐上时光机器,回溯我的2020吧。
一月
这个月本来是平平无奇的,十几号放假回的家,因为疫情原因,印象中月底的时候学校就发布消息准备延迟开学了。
印象中我是1.8号开始投递的简历,第一次投简历就投的腾讯,现在想起来我是真的莽夫。
对于新冠时间线,有兴趣的可以去看网友的整理:https://zhuanlan.zhihu.com/p/107418492?from_voters_page=true。
二月
二月中再次收到推迟开学的消息,我继续到处投简历,网龙,畅游,网易雷火,网易互娱,米哈游,4399等有点名气的我都投了一遍,期间应该有一场网易雷火的面试,也是我第一次面试,但我也没有很紧张,面试官也很亲和,很愉快的一次面试经历。
然后这个月好像就没什么事情了,嗯,没错。
三月
三月的时候貌似就直接通知这学期的课程全部转线上了,有点爽,为期大半 ...