usuiforhe 4 سال پیش
والد
کامیت
fdd26e1232
2فایلهای تغییر یافته به همراه178 افزوده شده و 57 حذف شده
  1. BIN
      img/UE_Asset122.png
  2. 178 57
      虚幻.md

BIN
img/UE_Asset122.png


+ 178 - 57
虚幻.md

@@ -1,7 +1,7 @@
 <!--
 <!--
  * @Author: lc
  * @Author: lc
  * @Date: 2021-09-03 21:41:18
  * @Date: 2021-09-03 21:41:18
- * @LastEditTime: 2021-09-29 18:10:00
+ * @LastEditTime: 2021-12-15 22:13:10
  * @LastEditors: Please set LastEditors
  * @LastEditors: Please set LastEditors
  * @Description: 虚幻学习
  * @Description: 虚幻学习
  * @FilePath: D:\Projects\markdown\虚幻.md
  * @FilePath: D:\Projects\markdown\虚幻.md
@@ -33,13 +33,13 @@
 
 
 - 虚幻支持的文件内容
 - 虚幻支持的文件内容
 
 
-| 分类 | 类型 |
-| --- | --- |
-| 3D | fbx/obj |
+| 分类 | 类型                             |
+| ---- | -------------------------------- |
+| 3D   | fbx/obj                          |
 | 贴图 | png/jpge/bmp/tga/dds/exr/psd/hdr |
 | 贴图 | png/jpge/bmp/tga/dds/exr/psd/hdr |
-| 声音 | wav |
-| 字体 | ttf/otf |
-| 视频 | mov/mp4/wmv/avi |
+| 声音 | wav                              |
+| 字体 | ttf/otf                          |
+| 视频 | mov/mp4/wmv/avi                  |
 
 
 > 常规使用的文件格式一般都支持
 > 常规使用的文件格式一般都支持
 
 
@@ -698,22 +698,22 @@ With Tag 通过给定的标签将场景中与之匹配的对象进行查找,
 
 
 > 查看数组的API方法的小提示
 > 查看数组的API方法的小提示
 
 
-| 方法名 | 作用 |
-| --- | --- |
-| Add | 添加单个数据到数组末尾 |
-| Add Unique | 如果数组中没有与数据相同的值,则加入到数组中,否则不加入 |
-| Append Array | 将另一个数组添加到数组中(不考虑重复性) |
-| Clear | 清空数组并清除内存空间 |
-| Contains | 检查数组中是否存在给定值 |
-| Find | 查找数组中是否包含某一个元素,包含返回对应位置索引index,不包含返回-1 |
-| Insert | 插入值到数组中(指定位置) |
-| Last Index | 获得最后元素的值 |
-| Length | 获得数组长度,常用来判断获取index是否合法 |
-| Remove Index | 提供一个有效下标index,删除该index |
-| Remove Item | 提供一个数组中包含的数据,删除该值 |
-| Resize | 设定数组长度,超过填充默认值,小于删除多余值 |
-| Shuffle | 随机数组中的值(洗牌) |
-| Swap | 将数组中已有的两个位置的值进行交换 |
+| 方法名       | 作用                                                                  |
+| ------------ | --------------------------------------------------------------------- |
+| Add          | 添加单个数据到数组末尾                                                |
+| Add Unique   | 如果数组中没有与数据相同的值,则加入到数组中,否则不加入              |
+| Append Array | 将另一个数组添加到数组中(不考虑重复性)                              |
+| Clear        | 清空数组并清除内存空间                                                |
+| Contains     | 检查数组中是否存在给定值                                              |
+| Find         | 查找数组中是否包含某一个元素,包含返回对应位置索引index,不包含返回-1 |
+| Insert       | 插入值到数组中(指定位置)                                            |
+| Last Index   | 获得最后元素的值                                                      |
+| Length       | 获得数组长度,常用来判断获取index是否合法                             |
+| Remove Index | 提供一个有效下标index,删除该index                                    |
+| Remove Item  | 提供一个数组中包含的数据,删除该值                                    |
+| Resize       | 设定数组长度,超过填充默认值,小于删除多余值                          |
+| Shuffle      | 随机数组中的值(洗牌)                                                  |
+| Swap         | 将数组中已有的两个位置的值进行交换                                    |
 
 
 **使用`Make Array`可以在运行过程中动态创建数组**  
 **使用`Make Array`可以在运行过程中动态创建数组**  
 
 
@@ -1225,16 +1225,16 @@ K-DOP是包围体的一种,是K离散导向多面体(K discrete oriented polyt
 
 
 ![](img/UE_Asset118.png)
 ![](img/UE_Asset118.png)
 
 
-| 位置 | 功能 |
-| --- | --- |
-| Component | 功能、能力 |
-| Actor | 个体本身的逻辑 |
-| APawn-APlayerController-APlayerState | 主角肉体-灵魂-状态 |
-| APawn-AAIController-APlayerState | AI肉体-灵魂-状态 |
-| AAIController-BehaviorTree-Blackboard | AI灵魂-行为树-数据 |
-| AGameMode-AGametate | 游戏规则-游戏状态 |
-| UGameInstance-USaveSame | 全局游戏实例-游戏存档 |
-| USubsystem | 游戏逻辑组件 |
+| 位置                                  | 功能                  |
+| ------------------------------------- | --------------------- |
+| Component                             | 功能、能力            |
+| Actor                                 | 个体本身的逻辑        |
+| APawn-APlayerController-APlayerState  | 主角肉体-灵魂-状态    |
+| APawn-AAIController-APlayerState      | AI肉体-灵魂-状态      |
+| AAIController-BehaviorTree-Blackboard | AI灵魂-行为树-数据    |
+| AGameMode-AGametate                   | 游戏规则-游戏状态     |
+| UGameInstance-USaveSame               | 全局游戏实例-游戏存档 |
+| USubsystem                            | 游戏逻辑组件          |
 
 
 - 输入事件的处理
 - 输入事件的处理
 
 
@@ -1709,19 +1709,19 @@ HUD默认自身是不接受键盘输入事件的,本身HUD就不应直接响
 2. Games项目工程文件(主要编写逻辑文件),代码需要在此工程中编写。虚幻中采用了编译模块方式进行引擎构建,所以对于引擎来说,编写的内容只是一个模块,模块会被动态编译为库文件,加载到引擎中使用。Target.cs文件就是模块配置文件
 2. Games项目工程文件(主要编写逻辑文件),代码需要在此工程中编写。虚幻中采用了编译模块方式进行引擎构建,所以对于引擎来说,编写的内容只是一个模块,模块会被动态编译为库文件,加载到引擎中使用。Target.cs文件就是模块配置文件
 3. Visualizers虚幻4.21加入的文件,Vs配置器配置文件
 3. Visualizers虚幻4.21加入的文件,Vs配置器配置文件
 
 
-| 状态 | Engine | Game | 其他 |
-| --- | --- | --- | --- |
-| Debug(调试) | Debug | Debug | 必须在编译器上加-debug参数才能反射查看代码更改 |
-| DebugGame(调试游戏) | Release | Debug | 适合只调试游戏代码 |
-| Development(开发) | Release | Release | 运行编辑器发射查看代码更改 |
-| Shipping(发行) | Release | Release | 无控制台命令,统计数据和性能分析 |
-| Test(测试) | Release | Release | 启用了一些控制台命令,统计数据和性能分析 |
-
-| 目标 | |
-| --- | --- |
-| 空白 | 不带编辑器的一个独立可执行版本,需要提前打包烘焙内容资源 |
-| Editor(编辑器) | 直接在编辑器里打开游戏项目 |
-| Client(客户端) | 多人联机项目,生成客户端版本,需要提供<Game>Client.Target.cs文件 |
+| 状态                  | Engine  | Game    | 其他                                           |
+| --------------------- | ------- | ------- | ---------------------------------------------- |
+| Debug(调试)         | Debug   | Debug   | 必须在编译器上加-debug参数才能反射查看代码更改 |
+| DebugGame(调试游戏) | Release | Debug   | 适合只调试游戏代码                             |
+| Development(开发)   | Release | Release | 运行编辑器发射查看代码更改                     |
+| Shipping(发行)      | Release | Release | 无控制台命令,统计数据和性能分析               |
+| Test(测试)          | Release | Release | 启用了一些控制台命令,统计数据和性能分析       |
+
+| 目标              |                                                                  |
+| ----------------- | ---------------------------------------------------------------- |
+| 空白              | 不带编辑器的一个独立可执行版本,需要提前打包烘焙内容资源         |
+| Editor(编辑器)  | 直接在编辑器里打开游戏项目                                       |
+| Client(客户端)  | 多人联机项目,生成客户端版本,需要提供<Game>Client.Target.cs文件 |
 | Service(服务器) | 有人联机项目,生成服务器版本,需要提供<Game>Server.Target.cs文件 |
 | Service(服务器) | 有人联机项目,生成服务器版本,需要提供<Game>Server.Target.cs文件 |
 
 
 ### 命名规则
 ### 命名规则
@@ -1739,21 +1739,21 @@ HUD默认自身是不接受键盘输入事件的,本身HUD就不应直接响
 11. 再编辑器里和C#里,类型名是去掉前缀过的
 11. 再编辑器里和C#里,类型名是去掉前缀过的
 12. UHT再工作的时候需要提供正确的前缀,所以是约定也是规则
 12. UHT再工作的时候需要提供正确的前缀,所以是约定也是规则
 
 
-| 类型 | 前缀 | 说明 |
-| --- | --- | --- |
-| Level/Map | L_ | 关卡 |
-| Buleprint | BP_ | 常规蓝图 |
-| Material | M_ | 材质 |
-| StaticMesh | S_ | 静态网格 |
-| Skeletal Mesh | SK_ | 骨骼网络 |
-| Texture | T_ | 纹理 |
-| Particle System | PS_ | 粒子系统 |
+| 类型             | 前缀 | 说明     |
+| ---------------- | ---- | -------- |
+| Level/Map        | L_   | 关卡     |
+| Buleprint        | BP_  | 常规蓝图 |
+| Material         | M_   | 材质     |
+| StaticMesh       | S_   | 静态网格 |
+| Skeletal Mesh    | SK_  | 骨骼网络 |
+| Texture          | T_   | 纹理     |
+| Particle System  | PS_  | 粒子系统 |
 | Widget Blueprint | WBP_ | 组件蓝图 |
 | Widget Blueprint | WBP_ | 组件蓝图 |
-| ... | ... | ... |
+| ...              | ...  | ...      |
 
 
 [更多命名规则](https://github.com/uejoy/ue4-style-guide)
 [更多命名规则](https://github.com/uejoy/ue4-style-guide)
 
 
-### 创建Actor
+### Actor
 
 
 ```cpp
 ```cpp
 void ADemoGameModeBase::BeginPlay()
 void ADemoGameModeBase::BeginPlay()
@@ -1784,6 +1784,7 @@ Actor的创建分为三种方式,三种方式创建的Actor生命流程有细
 
 
 > 组件是在BeginPlay方法之前构建的
 > 组件是在BeginPlay方法之前构建的
 
 
+<<<<<<< Updated upstream
 <!--
 <!--
  * @Version: 
  * @Version: 
  * @Autor: LC
  * @Autor: LC
@@ -1911,3 +1912,123 @@ GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, n1.ToString());
 #### FText
 #### FText
 
 
 
 
+=======
+`Destroy()`,调用自身的`Destroy`进行强制消亡操作
+
+```cpp
+/**
+ * bNetForce 是否强制网络同步删除
+ * bShouldModifyLevel 主要是用来控制先删除actor再修改关卡,还是先修改关卡再删除actor,默认是true即先修改关卡(修改关卡指吧actor移除出场景)
+ */
+bool AActor::Destroy( bool bNetForce, bool bShouldModifyLevel )
+{
+	// It's already pending kill or in DestroyActor(), no need to beat the corpse
+	if (!IsPendingKillPending())
+	{
+		UWorld* World = GetWorld();
+		if (World)
+		{
+			World->DestroyActor( this, bNetForce, bShouldModifyLevel );
+		}
+		else
+		{
+			UE_LOG(LogSpawn, Warning, TEXT("Destroying %s, which doesn't have a valid world pointer"), *GetPathName());
+		}
+	}
+
+	return IsPendingKillPending();
+}
+```
+
+> bNetForce 是否强制网络同步删除  
+> bShouldModifyLevel 主要是用来控制先删除actor在修改关卡,还是先修改关卡在删除actor,默认是true即先修改关卡(修改关卡指吧actor移除出场景)  
+
+执行`Destroy()`只是标记该对象在场景中不存在,并不是从内存中删除。所有对象都是托管的,所以并不是说调用了之后对象就从内存删除
+
+```cpp
+// InLifespan 延迟删除时间 单位秒
+void AActor::SetLifeSpan( float InLifespan )
+{
+	// Store the new value
+	InitialLifeSpan = InLifespan;
+	// Initialize a timer for the actors lifespan if there is one. Otherwise clear any existing timer
+	if ((GetLocalRole() == ROLE_Authority || GetTearOff()) && !IsPendingKill())
+	{
+		if( InLifespan > 0.0f)
+		{
+			GetWorldTimerManager().SetTimer( TimerHandle_LifeSpanExpired, this, &AActor::LifeSpanExpired, InLifespan );
+		}
+		else
+		{
+			GetWorldTimerManager().ClearTimer( TimerHandle_LifeSpanExpired );		
+		}
+	}
+}
+```
+
+> 设置延迟删除
+
+```cpp
+// 虚函数
+virtual void Destroyed();
+```
+
+> 当对象被删除时(非内存删除)进行回调函数  
+> 子类重写overide该函数,来完成自定义事件  
+
+```cpp
+virtual void EndPlay(const EEndPlayReason::Type EndPlayReason);
+```
+
+> 对象被彻底清除时回调,回调会进行删除类型通知,子类重写之后定义自己需要做的事即可
+
+- 删除类型介绍
+  - Destroyed 当前actor或是component彻底被删除时(内存中)
+  - LevelTrasition 关卡切换时删除回调(非关卡流)
+  - EndPlayInEditor 编辑器关闭时,回调通知
+  - RemovedFromWorld 关卡流切换被释放时调用
+  - Quit 游戏推出时被删除回调 
+
+### 打印输出
+
+- **屏幕日志输出**
+
+借助全局变量GEngine子还真调用函数`AddOnScreenDebugMessage`即可完成输出
+
+```cpp
+void UEngine::AddOnScreenDebugMessage(
+    uint64 Key, 
+    float TimeToDisplay, 
+    FColor DisplayColor, 
+    const FString& DebugMessage, 
+    bool bNewerOnTop, 
+    const FVector2D& TextScale);
+
+// 该代码会直接在屏幕上输出一个红色的test文本
+GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("test"));
+```
+
+消息从上到下(一般而言)key值从0开始,依次增加。如果key值为-1则添加文本消息,如果不为-1就修改对应key值的文本消息
+
+> 如果key为-1,则添加新的信息,不会覆盖旧的信息  
+> 如果key部位-1,则更新现有信息,该方法效率更高  
+> bNewerOnTop当key为-1时有效,直接添加到队列最上层  
+
+```cpp
+// If we don't have a platform-specific define for the TEXT macro, define it now.
+#if !defined(TEXT) && !UE_BUILD_DOCS
+	#if PLATFORM_TCHAR_IS_CHAR16
+		#define TEXT_PASTE(x) u ## x
+	#else
+		#define TEXT_PASTE(x) L ## x
+	#endif
+		#define TEXT(x) TEXT_PASTE(x)
+#endif
+
+TEXT("test")
+```
+
+这里的`TEXT`是虚幻中用来构建非对象型字符串的关键宏,构建结果是与平台无关的宽字符串,借助对象`FString`带参构造函数`TCHAR`类型指针来构建`FString`对象字符串
+0330
+- **控制台日志输出**
+>>>>>>> Stashed changes