NPBehave(行为树)中文文档
前言
NPBahave是GitHub上开源的一个行为树,其代码简洁有力,与Unity耦合较低,适合拿来做双端行为树。注意,由于时间关系,原文中的链接这里将不再提供引用。
开源链接
https://github.com/meniku/NPBehave
正文
NPBehave致力于:
轻量,快速,简洁
事件驱动
易于拓展
一个用代码定义AI行为的框架,目前没有可视化编辑器支持(本人将为其贡献一个)
NPBehave基于功能强大且灵活的基于代码的方法,从behavior库定义行为树,并混合了虚幻引擎的一些很棒的行为树概念。与传统的行为树不同,事件驱动的行为树不需要每帧从根节点遍历。它们保持当前状态,只有在实际需要时才继续遍历。这使得它们的性能更高,使用起来也更简单。
在NPBehave中,您将发现大多数节点类型来自传统的行为树,但也有一些类似于虚幻引擎中的节点类型。不过,添加您自己的自定义节点类型也相当容易。
安装
只需将NPBehave文件夹放入Unity项目中。还有一个Examples子文件夹,其中有一些您可能想要参考的示例场景。
例子:“Hello World” 行为 ...
计算机组成原理复习纲要
计算机系统概述
冯 诺依曼计算机
五大功能部件
基本要点
计算机由五大部件组成,采用二进制形式表示数据和指令。
采用存储程序方式。
输入设备
将程序和数据以机器所能识别和接受的信息形式输入到计算机内。
比如键盘、鼠标、扫描仪、语音输入设备、手写笔、触摸屏、数码摄像设备等。
输出设备
将计算机处理的结果以人们所能接受的信息形式或其它系统所要求的信息形式输出。
如显示器、打印机、绘图仪 、音箱等。
存储器
用于存放程序和数据。存储器是计算机存储信息的核心。
主存储器(主存,内存)
CPU能直接访问,主存分为若干个存储单元,每个单元都有唯一的地址编码,通常是按字节或字节的整数倍编码。存储器总是按地址访问的,
辅助存储器(外存,辅存)
CPU不能直接访问,辅存中的信息必须调入主存后,才能为CPU所使用。
辅存速度较慢,但容量大,用于存放CPU暂时不用的程序和数据。
比如软盘、硬盘、光盘、磁带机等。
运算器
用于对数据的加工处理,完成算术逻辑运算。
组成
核心是算术逻辑部件(Arithmetic and Logical Unit),简称为ALU。
还有若干寄存器,用于存放操作数、中间结果或 ...
软件工程重点知识整理
前言
。。。没啥好说的,真是太痛苦了
基础知识汇总
单句
一
从结构化的瀑布模型看,在它的生命周期中的各阶段中,需求分析阶段出错,对软件的影响最大。
螺旋模型将瀑布模型和演化模型相结合,并增加了风险分析。
结构化分析方法是一种预先严格定义需求的方法,它在实施时强调的是分析对象的数据流。
进行需求分析可以使用数据流图(DFD),判定表,数据字典。
在面向数据流的软件设计方法中,一般将信息流分为变换流和事务流。
PAD图的控制执行流程为自上而下,从左到右。
概要设计阶段产生的文档包括概要设计说明书,数据库设计说明书,用户手册。
与选择编程语言有关的因素是软件开发的方法,软件执行的环境,软件开发人员知识。
软件工程针对维护工作的主要目标是提高软件的可维护性,降低维护的代价。
开发软件工具的主要目的是为了提高软件生产率和改善软件质量。
在软件需求分析中,必须采用合理的步骤,才能准确地获取软件的需求,可归纳为4个步骤:需求获取,分析建模,文档编写,需求验证。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度,模块间的耦合性越高,其模块的独立性就越弱。
在面向对象的设计方法中,对象 ...
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 ...