UE5 C++ 基础

基本数据类型

分类范围字节备注
uint80 ~ 2551无符号8位
uint160 ~ 655352无符号16位
uint320 ~ 42949672954无符号32位
uint640 ~ 184467440737095516158无符号64位
int8-128 ~ 1271有符号8位
int16-32768 ~ 327672有符号16位
int32-2147483648 ~ 21474836474有符号32位
int64-9223372036854775808 ~ 92233720368547758078有符号64位
float-3.4E+38 ~ 3.4E+381单精度浮点型
double-1.7E-308 ~ 1.7E+3081双精度型浮点型
booltrue ~ false1布尔
FNameFName不区分大小写,并且不可变,无法被操作12字符串类型
FString提供了对FString的修改、比较,也同时增加了性能消耗12字符串类型
FText一般用作显示和语言的翻译12字符串类型

数据类型转换

FString、FName、FText相互之间的转化

{
	/** FString 转化为 FName */
	FString Str = TEXT("MyString");
	FName Name = FName(*Str);
	/** FName 转化为 FString */
	FString NewString = Name.ToString();
}
{
	/** FText 转化为 FName */
	FName MyName = FName(*MyText.ToString());
	/** FName 转化为 FText */
	FText MyText1 = FText::FromName(MyName);
}
{
	/** FString 转化为 FText */
	FString Str = TEXT("MyString");
	FText MyText = FText::FromString(Str);
	/** FText 转化为 FString */
	FString NewString = MyText.ToString();
}

FString与Int32、float、bool的转化

{
	/** FString 转化为 Int32 */
	FString MyString = TEXT("MyString");
	int32 i1 = FCString::Atoi(*MyString);        // 使用FCString
	int32 i2 = atoi(TCHAR_TO_UTF8(*MyString));   // 使用C++原生方法
	/** FString 转化为 float */
	float f1 = FCString::Atof(*MyString);       // 使用FCString
	float f2 = atof(TCHAR_TO_UTF8(*MyString));  // 使用C++原生方法
	/** FString 转化为 bool */
	bool b = MyString.ToBool();

	/** int 转化为 FSting */
	FString FStr1 = FString::FromInt(123);
	/** float 转化为 FSting */
	FString FStr2 = FString::SanitizeFloat(36.1f);
	/** bool 转化为 FSting */
	bool myBool;
	FString FStr3 = myBool ? TEXT("true") : TEXT("false");
}

FString与C++原生的转化

{
	// std::string 转化为 FString
	std::string stdStr = "MyString";
	FString a = FString(stdStr.c_str());
	// FString 转化为 std::string  
	std::string newString(TCHAR_TO_UTF8(*a));
	// FString 转化为 char*
	char* newChar = TCHAR_TO_UTF8(*a);
	// char* 转化为 FString
	FString NewString = FString(UTF8_TO_TCHAR(newChar));
}
{
	// FString 转化为 TCHAR
	FString MyString = TEXT("UEString");
	const TCHAR* MyChar = *MyString;
}

UPROPERTY介绍

属性使用标准的C++变星语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。UPROPERTY的作用是将变量公开到编辑器或蓝图。

常见属性说明

  1. VisiableAnywhere:如果给一个变星声明了此关键词,那么它会出现在蓝图编辑器的右边和主编辑器上。(只是显示,不能编辑)
  2. VisibleDefaultsOnly:在主编辑器中不显示,但是在蓝图编辑器中显示(不可编辑),Default默认是蓝图编译器。
  3. EditDefaultsOnly :在蓝图中可以编辑,但是在主编辑器中不显示所以不可编辑,只在类默认设置中可见。
  4. EditAnywhere:在主编辑器和蓝图编辑器中都显示并且都可以编辑。
  5. EditInstanceOnly:在蓝图编辑器中不可修改但是可见,只有当蓝图实例化到场景中点击该组件才会出现相应的设置,实例化之后可以修改。但只能在原型上进行。

使用示例

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyCategory")
int MyInt;

UFUNCTION介绍

使用UFUNCTION宏可以方便地为我们的函数添加元数据和属性,使得它们可以在蓝图中方便地使用和调用。

常见属性说明

  1. BlueprintCallable:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。
  2. BlueprintPure:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。
  3. BlueprintlmplementableEvent:需要在蓝图里面重载。此函数旨在被蓝图覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了Implementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用lmplementation方法。
  4. BlueprintReadOnly:蓝图只读
  5. BlueprintReadwrite:蓝图可读可写
  6. BlueprintNativeEvent:可通过细节(Details)面板中的按钮在编辑器中的选定实例上调用此函数。callnEditor:可通过细节(Details)面板中的按钮在编辑器中的选定实例上调用此函数。
  7. BlueprintAssignable:蓝图中可绑定委托
  8. ServerClient:表示这个函数是由服务器或客户端调用的。

使用示例

UFUNCTION(BlueprintCallable, Category = "MyCategory")
void MyFunction(int MyInt, FString MyString);

枚举UEnum、结构体UStruct

//定义一个原生enum class
enum class EMyType 
{
	Type1,
	Type2,
	Type3,
};
 
namespace EState 
{
	enum Type {
		Stop,
		Close,
		Open
	};
}
 
// 带反射枚举
UENUM(BlueprintType)
enum class ECurrentState : uint8
{
	Idle UMETA(DisplayName="空闲"),
	Attack UMETA(DisplayName="攻击"),
	Roll UMETA(DisplayName="翻滚"),
	Dead UMETA(DisplayName="死亡"),
};
 
UPROPERTY(EditAnywhere,BlueprintReadWrite)
ECurrentState MyCurrentState UMETA(DisplayName = "当前状态");
//结构体
//BlueprintType可以将枚举暴露给蓝图,继承FTableRowBase之后可以用于DataTable
USTRUCT(BlueprintType)
struct FMyStruct: public FTableRowBase
{
	GENERATED_BODY()
 
	// 暴露给蓝图
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Test Variables")
	int32 MyIntegerMemberVariable;
 
	// 不暴露给蓝图
	int32 NativeOnlyMemberVariable;
 
	// 蓝图图表无法访问此UObject指针,但是指针对UE4的反射、智能指针和垃圾回收系统可见。
	UPROPERTY()
	UObject* SafeObjectPointer;
};
 
UPROPERTY(EditAnywhere,BlueprintReadWrite)
	FMyStruct MyStruct;
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值