最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
表示小数点后最多6位的小数
矢量(Vector)
表示在三维空间中的坐标(x,y,z),也可用4通道RGBY表示颜色。
旋转体(Rotator)
(F,Y,R) 分别表示三维空间中绕x、y、z轴的旋转值
变换(Transform)
包含矢量、旋转体、缩放的集合
字符串(String)
例如 Hello World
之类的一组字母数字字符(string
)。
命名(Name)
用于在游戏中识别事物的一段文本,一般用于给变量命名,速度是最快的。它不可操作,用法较少,如等于、不等于。
文本(Text)
向用户显示的文本,储存本地文本信息。下面介绍几种和文本有关的节点。
创建文本
大小写转换
移除空白字符
判断两文本是否相等(大小写)
判断文本是否来自字符串表
Out Table Id输出字符串表的存储路径 Out Key输出索引值 Return Value输出true或false
其余文本函数看介绍就知道大义
三种容器
主要有数组、集合、字典(映射)三种类型,下面将详细介绍。
数组(Array)
数组是同一种类型的数据的集合。在创建变量时,点击变量名称旁的图标即可创建数组。
数组索引
什么是索引?索引是用来快速访问数据库表格或者视图里的数据,需要存储空间。需要注意的,数组中的值的索引值是从0开始的 ,这意味着第一个索引是 0 而不是1。
Get(获取)
Get(获取) 节点取入一个数组和一个整型值,该整型值用作为索引编号。然后,它返回在索引编号处找到的数组值。
Add Item(添加项目)
Add Item(添加项目) 取入一个数组和一个变量。它将该变量插入到数组的尾部,并相应地增加数组的大小。
Clear(清除)
Clear 节点将清除相连接的数组中的所有数据,重置数组,并删除数组中的所有索引值。
Contains Item(包含项目)
Contains Item(包含项目) 节点允许搜索一个数组来查找特定项目。如果找到了该项目,那么该节点则输出True,否则会输出False。它不会返回找到的该项目所处的索引值。
Filter Array(过滤数组)
Filter Array(过滤数组) 节点取入一个类型为Actor(或其任何子项)的数组,并基于输入的Class(类)过滤该数组。所得结果是一个新数组,仅包含原始数组中和类的类型相匹配的项目。
Find Item(过滤项目)
Find Item(过滤项目) 节点取入一个数组和一个变量,然后查找在数组中第一次找到那个变量的值时该值所处的索引编号。
Insert Item(插入项目)
Insert Item(插入项目) 节点取入一个数组、一个变量值和一个整型值(索引编号)。然后,它把该变量的值插入到数组中的该索引值指定的位置处。
Last Index(最后一个索引值)
Last Index(最后一个索引值) 节点返回数组中最后一个值的索引编号。
Length(长度)
Length(长度) 返回数组的大小或数组中元素项的个数。如果数组中有 N 个对象,那么 Length 将返回 N , 而数组的有效索引值是从 0 到 N-1 。
Remove Index(删除索引)
Remove Index(删除索引) 节点通过使用项目的索引编号来从数组中删除那个项目。所有其他的索引编号将会自动更新来弥补该空缺。
Remove Item(删除项目)
Remove Item(删除项目) 将通过取入一个变量值来从数组中删除一个项目。如果在数组中找到了那个值,则删除它。所有其他的索引编号将会自动更新来弥补该空缺。这个节点具有布尔值输出,如果找到了该项目并将其删除了,则返回True。
Resize(调整大小)
Resize(调整大小) 节点将取入一个数组和一个整型值,该整型值为该数组的新的容量大小。如果调整大小后的数组小于原始数组,那么所有不适合调整后的数组的元素项都将会丢弃。如果调整大小后的数组大于原始数组, 则会在数组尾部添加空元素项。
Set Array Elem(设置数组元素)
Array Elem(数组元素) 允许您将一个数组的一个特定索引设置为特定的值。
集合(Set)
集合与数组的区别主要在于,集合中不能有重复的元素,且集合的处理速度比数组更快。集合没有get,如果想获取其特定值,需要通过To array转换为数组后再操作。
字典/映射(Map)
字典的定义,同样使用{},不过存储的元素是一个个的: 键值对(key不能重复,重复添加等同于覆盖原有数据)(通过字典可以通过key取出value)字典的key和value可以是任意数据类型(key不能是字典)。
Keys将字典中所有键值转换为数组,Values将数据值转换为数组,Find用于寻找与提供键对应的值。
小节
1.Array可以有相同元素,Set和Map不能有相同元素
2.Set和Map的速度大于Array(二叉树),但Array自由度高
3.Map用于数据对;Set用于数据的布尔运算;Array用于储存数据集合
循环
branch
分支,类比if()语句。condition不勾选时,condition处输入真执行true,假执行false。
for each loop
循环,类比for()语句。Exec为开始执行,Loop Body为循环体,Array为要循环的数组,ArrayElement为数组中该数据的值,Array Index为索引值,Completed为循环结束。
for loop
指定循环开始和结束的索引
for each loop with break
带有打断的for() 当Break执行时跳出循环至Completed
revere for each loop
数组倒叙从后往前循环
while loop
类比while()语句,condition用于判断何时结束循环
流程控制节点
Sequence
按顺序执行
Do N
执行给定次数N,执行完N次后必须触发Reset才能执行下N次。
Do Once
只执行一次 Reset后再执行一次
Do Once MultiInput
多通道只执行一次
Flip Flop
在A、B之间循环执行,若执行A输出true,B输出false。
Gate
门打开时执行,关闭时不执行。Taggle为在开、关之间循环。
MultiGate
Index指定从哪个out开始执行;Reset复位;random随机,若勾选此项,将随机从哪个out开始执行;loop循环如果勾选,将按照执行顺序循环执行。
Retriggerable Delay
无需复位,每执行一次,延时指定事件后,再执行后续操作。
Delay Until Next Tick
这一帧不执行,下一帧才开始执行。
结构体和枚举
结构体(Struct)
结构体是数据集合,而数据可以是变量,也可以是容器。
获取结构体值用Break
枚举(Enum)
官方一点说,枚举是具有不可变性的可被列举的集合(不能无穷)。通俗来说,枚举就是一个一个列出来。理论上可以用来代替枚举类的方法有很多种,如字典,但都存在着一些问题:
1.枚举值可以修改 (别人随便改岂不是很危险)
2.用类定义的话,这些枚举功能的类可以被实例化
3.枚举值是否重复无法检查 (这玩意写错了再调错了完蛋)
因此,使用枚举有以下优点:
1.不能被继承
2.定义之后不能在类内修改
3.枚举名称不能重复(这点和字典倒是一样的)如果名称重复则会覆盖
4.使用@unique可以识别值是否重复
在UE5中,枚举一般搭配switch使用,只运行指定的。
事件、函数、宏、事件分发器
事件
右键添加节点,在“添加事件”一栏中,显示出了UE5自带的事件,如事件开始、事件结束、事件销毁、事件Tick(每帧执行)等。也支持自定义事件,自定义事件可以在函数中被调用**。**
函数
除了UE5提供的函数外,也支持自定义函数。
宏
宏可以有多个输入执行Exec和多个输出执行Exec,也可以有多个输入和多个输出。本质上,宏和函数都是为了封装代码,但是宏的代码封装能力要强于函数。因为函数只能有一个输出,如果需要两个或多个输出时,可以使用宏做一些简单的运算。
事件分发器
创建事件分发器
事件分发器的作用
发信者利用事件分发器 发送消息给世界;发信者无法从接收者那里获取到任何信息即返回值、也不知道谁收到了消息;带有信息接收器的人,会接受到该消息并执行后续动作,比如:BOSS死亡引起灯灭、草燃、音乐停、重见天日等。事件分发器作为一种常用的蓝图通信节点,在下节将详细介绍。
常用的蓝图通信方式
蓝图间通信是蓝图通信的一部分。它们各自都有很多种方法来实现需求。对于蓝图间通信而言,我们要学习的不仅有通信方法,还有通信方式。从通信方法来看,蓝图间通信五花八门,有很多组合方式。但从通信方式来看,蓝图间通信只有两类:一类是一对一通信、另一类是一对多通信。
1.直接引用
直接蓝图间通信的本质是一对一通信。直接蓝图间通信用一句话概括就是:蓝图A通知场景中的蓝图B执行某个流程。对于蓝图A而言,它可以是场景中蓝图(Blueprint Actor),也可以是关卡蓝图(Level Blueprint)。对于 蓝图B 而言,它必须是一个场景实体(Actor)。因为通信一词也暗含了“两个对象之间发生的某事”这一意义。
对于蓝图A想要找到蓝图B而言,它也需要先找到蓝图B所属的类型(Class),例如蓝图B属于类型K,如此才能缩小检索范围,定位蓝图B的准确对象。对于蓝图A 来说,仅仅锁定 蓝图B 所属类型也不够,蓝图A 需要指认类型K中特定的 蓝图B,而不是蓝图C、蓝图H或蓝图X。所以可以通过以下流程实现这一查找过程:(从本质上来说,每个蓝图都是一个类,上图中的 BP_A_Child 就是 BP_A 派生出的一个子类。我们从场景中收集 BP_A Actors,然后再在 BP_A Actors 中筛选 BP_A_Child,最终找到 BP_A_Child Actor。)
2.事件分发器
事件分发器是名副其实的一对多通信。可以把事件调度器想象成一个插线排座,不同的蓝图可以在上面自由绑定或解绑 一个个自身的事件(Event),当我们给这个插线排座通电时,目前绑定在这个排座上的事件都会被激活。
事件调度器很适合用于整合不同蓝图对于同一个事件的不同反应。将蓝图BCD… 对于在蓝图A中的事件X 发生时做出的反应事件,绑定在蓝图A的事件X调度器上,如此,当蓝图A的事件X被触发时,蓝图BCD…中的相应事件也会被触发。
事件调度器是一个非常方便和灵活的通信功能,我们甚至可以在每次激活事件调度器后,对其上的系列事件进行重新解绑和绑定,这样下次再激活事件调度器时,执行的又是不同的事件。
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
度器是一个非常方便和灵活的通信功能,我们甚至可以在每次激活事件调度器后,对其上的系列事件进行重新解绑和绑定,这样下次再激活事件调度器时,执行的又是不同的事件。
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
[外链图片转存中…(img-3Badz2bX-1715210332825)]
给大家整理的电子书资料:
[外链图片转存中…(img-WnaWpXwf-1715210332826)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!