|
|
@@ -1782,4 +1782,83 @@ Actor的创建分为三种方式,三种方式创建的Actor生命流程有细
|
|
|
5. BeginPlay(标志Actor被创建到事件中)
|
|
|
6. Tick
|
|
|
|
|
|
-> 组件是在BeginPlay方法之前构建的
|
|
|
+> 组件是在BeginPlay方法之前构建的
|
|
|
+
|
|
|
+<!--
|
|
|
+ * @Version:
|
|
|
+ * @Autor: LC
|
|
|
+ * @Date: 2021-12-09 10:25:59
|
|
|
+ * @LastEditors: LC
|
|
|
+ * @LastEditTime: 2021-12-09 18:43:02
|
|
|
+ * @Description: file content
|
|
|
+-->
|
|
|
+### 虚幻字符串
|
|
|
+
|
|
|
+文本在进行存储时会选择文本的格式。文本常用表示格式分为二进制(无格式)、文本(ASCII)、UTF-8和UTF-16
|
|
|
+
|
|
|
+虚幻4中的所有字符串都作为`FString`或者`TChar数组`以`UTF-16`格式存储在内存中。大多数代码假设2个字节等于一个代码点,因此只支持基本多文种平面(BMP),这样虚幻内部编码可以准确地描述为UCS-2。字符串以适合于当前平台的字节次序存储
|
|
|
+
|
|
|
+当向从磁盘序列化到程序包,或者联网区间序列化时,TCHAR字符串小于0xff的字符串均存储为一串8位字节,否则存储为双字节UTF-16字符串。序列化代码可以根据需要处理任何字节次序转换
|
|
|
+
|
|
|
+UE4提供多种字符类型进行数据处理,在不同的情境下,需要选择不同的类型进行操作
|
|
|
+
|
|
|
+> 区别:大小不同、编码方式不同,所有的文本在进行存储的时候,编译器编译阶段会根据编码类型进行转码
|
|
|
+
|
|
|
+```cpp
|
|
|
+//~ Character types.
|
|
|
+/// An ANSI character. Normally a signed type.
|
|
|
+typedef FPlatformTypes::ANSICHAR ANSICHAR;
|
|
|
+/// A wide character. Normally a signed type.
|
|
|
+typedef FPlatformTypes::WIDECHAR WIDECHAR;
|
|
|
+/// Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requirements of the licensee.
|
|
|
+typedef FPlatformTypes::TCHAR TCHAR;
|
|
|
+/// An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
|
|
|
+typedef FPlatformTypes::CHAR8 UTF8CHAR;
|
|
|
+/// A 16-bit character containing a UCS2 (Unicode, 16-bit, fixed-width) code unit, used for compatibility with 'Windows TCHAR' across multiple platforms.
|
|
|
+typedef FPlatformTypes::CHAR16 UCS2CHAR;
|
|
|
+/// A 16-bit character containing a UTF16 (Unicode, 16-bit, variable-width) code unit.
|
|
|
+typedef FPlatformTypes::CHAR16 UTF16CHAR;
|
|
|
+/// A 32-bit character containing a UTF32 (Unicode, 32-bit, fixed-width) code unit.
|
|
|
+typedef FPlatformTypes::CHAR32 UTF32CHAR;
|
|
|
+```
|
|
|
+
|
|
|
+> 文本类型
|
|
|
+
|
|
|
+```cpp
|
|
|
+// Usage of these should be replaced with StringCasts.
|
|
|
+#define TCHAR_TO_ANSI(str) (ANSICHAR*)StringCast<ANSICHAR>(static_cast<const TCHAR*>(str)).Get()
|
|
|
+#define ANSI_TO_TCHAR(str) (TCHAR*)StringCast<TCHAR>(static_cast<const ANSICHAR*>(str)).Get()
|
|
|
+#define TCHAR_TO_UTF8(str) (ANSICHAR*)FTCHARToUTF8((const TCHAR*)str).Get()
|
|
|
+#define UTF8_TO_TCHAR(str) (TCHAR*)FUTF8ToTCHAR((const ANSICHAR*)str).Get()
|
|
|
+```
|
|
|
+
|
|
|
+> 转码函数
|
|
|
+
|
|
|
+### 对象字符串
|
|
|
+
|
|
|
+1. FName:资源命名字符串,FName通过一个轻型系统使用字符串。在此系统中,特定字符串即使会被重复使用,在数据表中也只存储一次。FName不区分大小写。**他们为不可变,无法被操作**。FNames的存储系统和静态特性决定了通过键进行FNames的查找和访问速度快。FName子系统的另一个功能是使用散列表为FName转换提供快速字符串
|
|
|
+2. FText:表示一个显示字符串,用户的显示文本都需要由FText进行处理。支持格式化文本,**不提供修改函数,无法进行内容修改**(可以用来制作国际化)
|
|
|
+3. FString:可以被操作的字符串。**开销大于其他字符串类型**
|
|
|
+
|
|
|
+```cpp
|
|
|
+ FString str = FString(TEXT("OK")); // FString构建方式1
|
|
|
+ FString str1(TEXT("OK")); // FString构建方式2
|
|
|
+ FString str2; // FString无初始值构建
|
|
|
+
|
|
|
+ GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, str);
|
|
|
+ GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, str1);
|
|
|
+
|
|
|
+ // 普通数据类型转换为FString
|
|
|
+ FString::SanitizeFloat(1.0f);
|
|
|
+ FString::FormatAsNumber(23);
|
|
|
+ FString::FromInt(10);
|
|
|
+
|
|
|
+ bool b = true;
|
|
|
+ b ? TEXT("true") : TEXT("false");
|
|
|
+
|
|
|
+ // FString转为其他类型
|
|
|
+ FCString::Atoi
|
|
|
+ FCString::Atof
|
|
|
+ FCString::Atod
|
|
|
+```
|
|
|
+
|