UE5初学者快速入门教程
虚幻引擎是一系列游戏开发工具,能够将 2D 手机游戏制作为 AAA 游戏机游戏。虚幻引擎 5 用于开发下一代游戏,包括Senua's Saga: Hellblade 2、Redfall(来自 Arkane Austin 的合作射击游戏)、Dragon Quest XII: The Flames of Fate、Gears of War 6、 Ashes of Creation和古墓丽影的下一部分。

虚幻引擎 5 (UE5) 为现实环境带来了全新的工具:
- Lumen,一种新的照明技术。
- Nanite,一个用于详细模型和环境的系统。
- World Partitions,允许流式传输大型世界。
- One File Per Actor,这使开发人员可以更轻松地处理同一项目。
- 与 Quixel Megascans 库集成。
- MetaHuman — 一种用于逼真化身的技术。
- 还有很多!
在虚幻引擎 5 中进行开发对于初学者来说很简单。使用蓝图可视化脚本系统,您无需编写一行代码即可创建整个游戏!结合易于使用的界面,您可以快速启动并运行原型。
本虚幻引擎 5 教程侧重于帮助初学者入门。本教程将涵盖几个方面,包括:
- 安装虚幻引擎
- 导入资产
- 创建材质
- 使用蓝图创建具有基本功能的对象。
使用此链接下载项目的资产。准备好深入了解虚幻引擎!
1、安装虚幻引擎 5
虚幻引擎 5 使用Epic Games Launcher进行安装。前往虚幻引擎网站并单击右上角的下载按钮。

你可以选择Publishing或Creators许可证。如果打算发布项目或通过项目获利,请选择发布选项。现在选择下载Epic Games 启动器。
下载并安装启动器后,打开它。系统将提示您使用 Epic 帐户登录:

使用下载启动器时使用的相同方法登录。登录后,点击右上角的安装引擎。如果没有安装任何版本的虚幻引擎,启动器会将你带到一个屏幕,可以在其中选择安装位置以及要安装的组件。

如果已经安装了一个版本,请单击库选项卡,然后单击引擎版本 +按钮以选择安装新版本的虚幻引擎。选择 Unreal Engine 5.0.0 版本开始安装。

接下来,单击图标上的安装。你需要选择一个安装目录。

注意: Epic Games 会不断更新虚幻引擎,因此您的引擎版本可能与此不同。本教程的 2022 更新现在包含在 Unreal Engine 5 版本中拍摄的图像,并且视图可能会随着引擎的发展而变化。
2、创建项目
引擎安装完成后,返回Epic Games Launcher并选择左侧的 Unreal Engine 选项卡。
单击启动 UE5按钮以打开项目浏览器。这可能需要一段时间,尤其是对于初始运行。

项目浏览器打开后,单击左侧的“游戏”按钮以查找可用于开始新项目的模板。
在这里,选择其中一个模板。因为你是从头开始,所以选择空白模板。在Project Defaults下,保留 Blueprint 而不是 C++ 的默认设置。

以下是下一个选项的作用:
- 目标平台:选择手机或平板会禁用一些后期处理效果。它还可以使用鼠标作为触摸输入。将此设置为Desktop。
- 质量预设:选择可缩放将禁用一些后期处理效果。将此设置为最大值。
- 入门内容:此选项包括一些入门内容。取消选中Starter Content以创建一个干净的项目。
- 光线追踪:这可以实现实时微妙的照明。不选中此选项。
最后,你必须指定项目文件夹的位置和项目名称。
项目名称不代表游戏的名称,以后想改名称也不要着急。选择项目名称字段中的文本并输入Submarine。
最后,单击“创建”开始你的 UE5 奥德赛!
3、导航界面
创建项目后,编辑器将打开。如果你使用过 UE4,会看到新的编辑器视图简化了控件和侧边栏以专注于游戏视图。
编辑器分为多个面板:

- 视口:虚幻引擎 5 使你的关卡视图成为主要焦点,而其他面板则减少了占用空间。按住鼠标右键并移动鼠标环顾四周。要移动,请按住右键单击并使用WASD键。
- 模式:此面板可让你在景观工具和植物工具等工具之间进行选择。放置工具是默认工具。它允许你将多种类型的对象放置到关卡中,包括灯光和相机。
- World Outliner:显示当前关卡中的所有对象。你可以通过将相关项目放入文件夹来组织列表,并且可以按类型搜索和过滤。
- 详细信息:你选择的任何对象都将在此处显示其属性。使用面板编辑对象的设置。所做的更改将仅影响对象的该实例。例如,如果你有两个球体并更改一个球体的大小,则只会影响所选对象。
- 工具栏:包含多种功能。最常使用的是Play。
- 内容抽屉:此面板显示你的所有项目文件。使用它来创建文件夹和组织文件。你可以使用搜索栏或过滤器搜索文件。展开以显示项目中的所有资产。
4、导入资产
你将需要在智能手机中开始使用这种类型,将材料方便下载用于提供一个虚拟文件中,包括一个 3D 的fbx模型submarine-low-poly/submarine.fbx和该模型的贴图Submarine-low-poly/*.png。
在 Unreal 可以使用任何文件之前,必须导入它们。导航到 Content Drawer 并单击内容并创建一个名为模型的新文件夹。

选择FBX模型和你的文件夹。

虚幻为你提供了一些 .fbx 文件的导入选项。将模型的Import Uniform Scale设置为100以统一放大模型。
现在将Material Import Method设置为Do Not Create Material并取消勾选 Import Textures。你将导入纹理并分别创建材质。
接下来,单击Import All按钮。FBX 中包含的模型将出现在你的Content Browser文件夹中。请注意,在 Unreal 中,这些模型称为静态网格。

导入文件时,除非你明确这样做,否则它不会保存到你的项目中。通过右键单击文件并选择Save来保存文件,或者通过选择File ▸ Save All一次保存所有文件。经常保存!
现在在 Content Drawer 中创建一个名为Materials的文件夹,并将五个 PNG 纹理导入到Materials文件夹中。同样,在导入纹理后保存文件。

接下来,我们将重新组装模型组件和纹理部件以构建完整的潜艇。
5、创建第一个Actor
Actor是放置在关卡中的对象,无论是相机、静态网格还是游戏关卡的起始位置。
我们将创建一种称为蓝图的特殊类型的Actor,它可以将网格组件组合成一个在游戏中使用的对象。
蓝图比简单地加入 3D 模型更强大——它们还可以将复杂的逻辑与模型集成在一起,并共同创建可重用的部分以添加到游戏中。
在最简单的意义上,蓝图代表一个“事物”。蓝图可让你为对象创建自定义行为。你的对象可以是物理的东西(例如潜艇)或抽象的东西,例如健康系统。
想做一辆移动的汽车?制作蓝图。会飞的猪呢?使用蓝图。一只在撞击时爆炸的小猫怎么样?蓝图。
要创建 蓝图,首先在 Contents Drawer 中创建一个名为Blueprints的文件夹。
接下来,右键单击你的Blueprints文件夹并选择创建一个Blueprint Class。选择制作一个 Actor,并将其命名为Submarine。

现在双击此蓝图 Actor 以打开蓝图 Actor 的编辑器。是时候建立你的潜艇模型了!
5.1 蓝图编辑器
蓝图编辑器有五个主要面板:
- 组件:包含当前组件的列表。
- 我的蓝图:此部分主要用于管理您的图表、函数和变量。
- 事件图:这就是魔法发生的地方。你所有的节点和逻辑都在这里。按住右键单击并移动鼠标进行平移。通过滚动鼠标滚轮进行缩放。
- 视口:任何具有视觉元素的组件都会出现在这里。使用与主编辑器中的视口相同的控件移动和环顾四周。
- 详细信息:这将显示所选项目的属性。

潜艇模型可以使用组件进行组装。
5.2 什么是组件?
如果你在为潜艇写蓝图,它会描述构成潜艇的部件:主体、窗户、潜望镜和螺旋桨。在虚幻引擎中,这些都是蓝图组件的示例。
5.3 添加组件
在您看到任何组件之前,如果您还没有,请切换到视口视图。单击“视口”选项卡进行切换。
DefaultSceneRoot是模型的最顶层成员,但它只会显示在编辑器中。将每个模型部件从 Content Browser 拖到DefaultSceneRoot下的这个蓝图中。这些模型零件将再次组装成潜艇。

在蓝图编辑器中选择编译并保存。在更新蓝图后始终执行这些步骤,以便能够查看更改如何影响游戏。
6、关于材料
如果你仔细观察这艘潜艇,你会发现它的表面有一个棋盘,而不是正常的外观。为了给潜艇颜色和细节,你将创建一个材质。
6.1 什么是材料?
材料决定了事物表面的外观。从根本上说,材料定义了四个要素:
- 基色:表面的颜色或纹理。用于添加细节和颜色变化。
- 金属:表面有多“金属”。通常,纯金属的金属值最大,而织物的金属值为零。
- 镜面反射:控制非金属表面的光泽度。例如,陶瓷将具有高镜面反射值,但粘土不会。
- 粗糙度:具有最大粗糙度的表面不会有任何光泽。它用于岩石和木材等表面。以下是三种材料的示例。它们具有相同的颜色但具有不同的属性。每种材料对其各自的属性都有很高的价值。其他属性设置为零。

6.2 创建材质
关闭潜艇蓝图并返回 Content Drawer,选择 Materials 文件夹并单击绿色的Add按钮。将出现一个菜单,其中包含你可以创建的资产列表。单击材料。

6.3 材质编辑器
将材质命名为SubmarineMaterial,然后双击该文件以在材质编辑器中打开它。

材质编辑器有几个面板:
- 视口:包含将显示你的材质的预览网格。按住左键并移动鼠标来旋转相机。通过滚动鼠标滚轮进行缩放。
- 详细信息:你选择的任何节点都将在此处显示其属性。如果未选择节点,面板将改为显示材料的属性。
- 材质图:此面板将包含你的所有节点和结果节点。按住右键单击并移动鼠标进行平移。通过滚动鼠标滚轮进行缩放。
- 调色板:可用于你的材质的所有节点的列表。
6.4 什么是节点?
在开始制作材料之前,你需要了解图形的节点和引脚。
节点构成了材质的大部分。许多节点可用并提供不同的功能。
节点可以有输入和输出,也称为针脚,用带箭头的圆圈表示。输入在左侧,输出在右侧。
例如,使用Multiply和Constant3Vector节点将黄色添加到纹理:

6.5 添加纹理
要为模型添加颜色和细节,你需要一个纹理。纹理是 2D 图像。通常,它被投影到 3D 模型上以赋予它们颜色和细节。
材质有一个称为Result节点的特殊节点,在本例中已为你创建了SubmarineMaterial。这是你的所有节点将结束的地方。无论插入此节点的任何内容都将决定最终材质的外观。

查看Result节点的一些组件:
- 基础颜色:这描述了最重要的纹理,它提供了 3D 网格表面上的基本颜色映射。
- 法线:法线贴图允许通过在沿表面的每个像素处提供法线向量来将重要的附加细节添加到网格中。
- 环境光遮蔽:描述光线更难到达的表面区域。
从该窗口的底部打开内容抽屉。从 Materials 文件夹将五个纹理中的每一个拖到图形中。
在图表中,通过在两个节点的引脚之间拖放一条线,将纹理节点的RGB引脚与材质中的相应连接建立连接。

最后,你的材质应包含所有五种纹理:

单击工具栏中的应用并保存以更新材料并关闭材料编辑器—完成。
6.7 使用材料
要将你的材质与潜艇一起使用,请指定它。返回内容抽屉并双击潜艇蓝图将其打开。选择Viewport选项卡并缩小以查看整个潜艇:

选择蓝图中的所有五个模型,然后转到 Details 面板并找到Materials部分。单击Element 0右侧的下拉菜单,然后选择SubmarineMaterial。

编译并保存你的潜艇蓝图。下面我们将通过动画使该资产栩栩如生!
7、向蓝图添加逻辑
要探索虚幻引擎的深度,我们需要了解更多关于蓝图的知识。
与材质类似,蓝图中的脚本通过基于节点的系统工作。这意味着需要做的就是创建节点并链接它们。无需编码。
虚幻引擎也支持使用 C++ 编写逻辑,但我建议你从蓝图系统开始。
蓝图的一些好处:
- 通常,使用蓝图进行开发比使用 C++ 更快。
- 易于组织。你可以将节点划分为函数和图形等区域。
- 如果与非程序员一起工作,那么修改蓝图很容易,因为它具有可视化和直观的特性。
一个好的方法是使用蓝图创建您的对象。当您需要额外的性能时,请将它们转换为 C++。
8、关于蓝图节点
是时候让这艘潜艇移动了——在蓝图中为螺旋桨设置动画很容易。这就是蓝图节点的用武之地。
与材质节点表亲不同,蓝图节点具有称为执行引脚的特殊引脚。左边的引脚是输入,右边的引脚是输出。所有节点将至少具有其中之一。
如果一个节点有一个输入引脚,它必须有一个连接才能执行。如果一个节点没有连接,任何后续节点都不会执行。
这是一个例子:

节点 A和节点 B将执行,因为它们的输入引脚有连接。节点 C和节点 D永远不会执行,因为节点 C 的输入引脚没有连接。
9、旋转螺旋桨
打开潜艇蓝图。要开始编写脚本,请切换到Event Graph选项卡。

使对象旋转非常简单,你只需要创建一个节点。右键单击图形上的空间以显示可用节点的菜单。搜索AddLocalRotation。旋转subabian_Motor组件。选择AddLocalRotation (submarine_Motor)。
注意:如果未列出该节点,请取消选中菜单右上角的Context Sensitive 。

你的图表现在将有一个新的AddLocalRotation节点。目标输入将自动连接到所选组件。
要设置旋转值,请转到Delta Rotation输入并将Y值更改为2.0。这将导致蓝图围绕其 Y 轴旋转。较高的值将使螺旋桨旋转得更快。

要不断旋转转盘,你需要每帧调用AddLocalRotation 。要每帧执行一个节点,请使用Event Tick节点。它应该已经在你的图表中。如果不是,请使用与以前相同的方法创建一个。
将Event Tick节点的输出引脚拖到 AddLocalRotation节点的最顶部输入引脚。

注意:在这个实现中,旋转速率取决于帧速率——螺旋桨在较慢的机器上会以较慢的速率旋转,反之亦然。这对本教程来说很好。
最后,转到工具栏并单击编译以更新您的蓝图,然后关闭蓝图编辑器。

10、将Actor带到现场
添加蓝图与添加网格的过程相同。从内容抽屉中,将潜艇蓝图拖到视口中。

关卡中的对象可以移动、旋转和缩放。这些的键盘快捷键是W,E和R。
10、添加水效果!
这艘潜艇看起来像是搁浅在沙漠中!添加一些效果让它看起来像在水下怎么样?
首先,在大纲视图中选择VolumetricCloud并将其从场景中删除以移除云。
创建蓝色大海的一种简单方法是添加后期处理效果以将世界染成蓝色。后期处理效果是在渲染帧后应用的那些更改。
后期处理效果通常用于提供风格变化,例如运动模糊、光晕和黑白照片风格。
通过单击工具栏中的快速添加按钮并选择Volumes ▸ PostProcessVolume将PostProcessVolume添加到场景:

这将创建一个盒子。如果相机在其范围内,则会应用后期处理效果。在Outliner树中选择新添加的PostProcessVolume并查看详细信息。通过将变换设置为(X:0.0,Y:0.0,Z:0.0)的位置和(X:50.0,Y:50.0,Z:50.0)的比例,确保框位于原点并覆盖视图.

要更改世界的显示方式,请找到名为Color Grading的部分,并将Global Contrast和Gamma设置为蓝色值:

现在应该看起来你在水下。屏住呼吸,但不要太久,因为您仍然需要测试所有辛勤工作的结果!
导航到工具栏并点击播放以查看潜艇在其自然栖息地中的运行情况。

相关文章:
UE5初学者快速入门教程
虚幻引擎是一系列游戏开发工具,能够将 2D 手机游戏制作为 AAA 游戏机游戏。虚幻引擎 5 用于开发下一代游戏,包括Senuas Saga: Hellblade 2、Redfall(来自 Arkane Austin 的合作射击游戏)、Dragon Quest XII: The Flames of Fate、…...
论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY
论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY 1. 文章简介2. 文章概括3 文章重点技术3.1 联邦学习(federated learning, FL)3.2 Structured updates3.3 Sketched Update 4. 文章亮点5. 原文传送门 1. 文章简介 标题:FEDERATE…...
STM32MP157驱动开发——按键驱动(异步通知)
文章目录 “异步通知 ”机制:信号的宏定义:信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制: 信号的宏定义&#x…...
医疗器械维修工程师心得
彩虹医械维修技能班9月将开展本年第三期长期班,目前咨询人员也陆续多了起来,很多刚了解到医疗行业的,自身也没有多少相关的基础,在咨询时会问到没有基础能否学的会? 做了这行业的都知道,无论多么复杂的设备…...
Vue3 Radio单选切换展示不同内容
Vue3 Radio单选框切换展示不同内容 环境:vue3tsviteelement plus 技巧:v-if,v-show的使用 实现功能:点击单选框展示不同的输入框 效果实现前的代码: <template><div class"home"><el-row …...
FreeRTOS之二值信号量
什么是信号量? 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代 码段不被并发调用。 信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用&am…...
ChatGPT API进阶调用指南
原文:ChatGPT API进阶调用指南 ChatGPT API 进阶调用指南 ChatGPT API 是基于 OpenAI 的 GPT模型的一个强大工具,可以用于构建各种对话式应用。以下是一些使用 Markdown 语法的进阶调用指南,以帮助您更好地利用 ChatGPT API。 设置用户角色…...
人工智能术语翻译(四)
文章目录 摘要MNOP 摘要 人工智能术语翻译第四部分,包括I、J、K、L开头的词汇! M 英文术语中文翻译常用缩写备注Machine Learning Model机器学习模型Machine Learning机器学习ML机器学习Machine Translation机器翻译MTMacro Average宏平均Macro-F1宏…...
kubernetes持久化存储卷
kubernetes持久化存储卷 kubernetes持久化存储卷一、存储卷介绍二、存储卷的分类三、存储卷的选择四、本地存储卷之emptyDir五、本地存储卷之 hostPath六、网络存储卷之nfs七、PV(持久存储卷)与PVC(持久存储卷声明)7.1 认识pv与pvc7.2 pv与pvc之间的关系7.3 实现nfs类型pv与pvc…...
【Rust笔记】意译解构 Object Safety for trait
意译解构Object Safety for trait 借助【虚表vtable】对被调用成员函数【运行时内存寻址】的作法允许系统编程语言Rust模仿出OOP高级计算机语言才具备的【专用多态Ad-hoc Polymorphism】特性。 计算机高级语言中的“多态”术语是一个泛指。它通常可被细化为 基于继承关系的“子…...
Spring Boot单元测试入门指南
Spring Boot单元测试入门指南 JUnit是一个成熟和广泛应用的Java单元测试框架,它提供了丰富的功能和灵活的扩展机制,可以帮助开发人员编写高质量的单元测试。通过JUnit,开发人员可以更加自信地进行重构、维护和改进代码,同时提高代…...
《面试1v1》如何能从Kafka得到准确的信息
🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结…...
2023秋招面试题持续更新中。。。
目录 1.八股文渐进式MVVM三次握手,四次挥手viteajax组件化和模块化虚拟dom原理流程浏览器内核浏览器渲染过程回流和重绘nextTick 2.项目相关1.声明式导航和编程式导航重写push和replace方法:性能优化图片懒加载路由懒加载 http请求方式 1.八股文 渐进式…...
Java | 数组排序算法
一、冒泡排序 冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移到数组前面,把较大的元素移到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部升到顶…...
android studio 连接SQLite数据库并实现增删改查功能
功能代码及调试代码 package com.example.bankappdemo;import android.annotation.SuppressLint; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; im…...
跑步适合戴什么样的耳机、最好的跑步耳机推荐
每个人对于运动的方式都不尽相同,但大多数热爱运动的朋友都离不开音乐的陪伴。运动和带有节奏感的音乐能够激发我们更多的热情和动力。特别是在夏日的时候,我非常喜欢跑步。在酷热的天气里,如果没有音乐的伴随,跑步会变得单调乏味…...
物联网的通信协议
物联网的通信协议 目录 物联网的通信协议一、UART串口通信1.1 串口通信1.2 异步收发1.3 波特率1.4 串口通信协议的数据帧1.5 优缺点1.5.1 优点1.5.2 缺点 二、I^2^C2.1 I^2^C2.2 I^2^C2.3 数据有效性2.4 起始条件S和停止条件P2.5 数据格式2.6 协议数据单元PDU2.7 优缺点2.7.1 优…...
【业务功能篇56】SpringBoot 日志SLF4J Logback
3.5.1 日志框架分类与选择 3.5.1.1 日志框架的分类 日志门面 (日志抽象)日志实现JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java)Jul(Java Util Logging) , Log4j , Log4j2 , Logback 记录型日志框架 Jul (Java Util Logging):JDK中的日志…...
leetcode 53. 最大子数组和
2023.7.28 要求找最大和的 连续子数组, 我的思路是用一个temp记录局部最优值,用ans记录全局最优值。 然后在每次for循环进行一个判断:当前遍历元素temp值 是否大于当前遍历元素的值,如果大于,说明temp值是帮了正忙的&a…...
js 下载url返回的excel数据,并解析为json
XLSX GitHub地址:https://github.com/SheetJS/sheetjs/blob/github/dist/xlsx.full.min.js 需要先引入:XLSX.full.min.js // 下载文件的请求 fetch(downloadFileUrl).then(response > {return rsp.blob() }).then(data > {let reader new FileR…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
