UE4 C++学习笔记

快速检索目录

  • 算法技巧
    • 计算三角形
    • 点积和叉积
  • 语法
    • 随机颜色
    • 项目路径
      • Config路径
    • 类型转换
      • int转string
      • FString转JsonObject
      • JsonObject转FString
      • Enum转String
      • Transform转Location、Rotation
    • 运行态创建组件
    • 编辑器创建组件
    • 构造函数的初始化列表
    • 引用与指针的区别
    • UE4资源加载
    • 绘制各类Debug线条
  • 变量
    • 浮点数取值范围变量
    • 组件
  • 其他
    • 提高VS运行速度

算法技巧

计算三角形

  • 使其按照01 12 23递进的方式将三角形的三个边顺序添加进数组
 TArray<FVector2i> Edges;
    Edges.SetNum(Triangles.Num());
    for (int i = 0; i < Triangles.Num(); i += 3)
    {
        for (int j = 0; j < 3; j++)
        {
            for (int k = 0; k < 2; k++)
            {
                int Index = (j + k) % 3;
                if (k == 0)
                    Edges[i + j].X = Triangles[i + Index];
                else if (k == 1)
                    Edges[i + j].Y = Triangles[i + Index];
            }
        }

点积和叉积

这篇文章很形象的比喻了二者的目的和一些实用的用途: B乎链接

语法

随机颜色

  • FColor::MakeRandomColor()
    在绘制debugline中的使用
DrawDebugLine(GFalconVGameMode->GetWorld(), StartPoint, EndPoint, FColor::MakeRandomColor(), true);

项目路径

Config路径

  • FPaths::ProjectConfigDir()
FPaths::ProjectConfigDir()

类型转换

int转string

  • FString::FromInt(AutoNum)
FString::FromInt(AutoNum)

FString转JsonObject

FString JsonString;
TSharedPtr<FJsonObject> TargetJsonObj = MakeShareable(new FJsonObject());
TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(JsonString);
if (FJsonSerializer::Deserialize(JsonReader , TargetJsonObj ))//为了防止构造失败,加一个if判断一下再继续
{
return TargetJsonObj;//jsonobject就构造出来了
}

JsonObject转FString

FString ReturnJson;
TSharedPtr<FJsonObject> JsonObj = MakeShared<FJsonObject>();
TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&ReturnJson);
if(FJsonSerializer::Serialize(JsonObj.ToSharedRef(), Writer))
{
return ReturnJson;
};

Enum转String

参照官方这个文档VS使用技巧中的-枚举转换为字符串

Transform转Location、Rotation

获取Location

FTransform OriginTransform;
OriginTransform.GetTranslation();

获取Rotation(欧拉角)

FTransform OriginTransform;
OriginTransform.GetRotation().Rotator();

获取Rotation(四元数)

FTransform OriginTransform;
OriginTransform.GetRotation();

运行态创建组件

  • 在运行时创建组件语法,与在构造函数中创建组件不同
UHierarchicalInstancedStaticMeshComponent* HISM = NewObject<UHierarchicalInstancedStaticMeshComponent>(this);
HISM->AttachToComponent(SceneComponent, FAttachmentTransformRules::KeepRelativeTransform);
HISM->SetStaticMesh(CurrentPlantMesh);
HISM->RegisterComponent();

编辑器创建组件

 UHierarchicalInstancedStaticMeshComponent* HISM = CreateDefaultSubobject<UHierarchicalInstancedStaticMeshComponent>(TEXT("youname"));
 HISM ->SetupAttachment(RootComponent);

构造函数的初始化列表

  • 在构造函数中如下两种形式的结果相同,第一种的写法就是“构造函数的初始化列表”该写法可以更省资源
FRemoveNativeInstanceDataCommand::FRemoveNativeInstanceDataCommand(const TArray<FString>& InDataIDArray)
    : InstanceDataIDArray(InDataIDArray)//构造函数的初始化列表
{
}
FRemoveNativeInstanceDataCommand::FRemoveNativeInstanceDataCommand(const TArray<FString>& InDataIDArray)
{
    InstanceDataIDArray=InDataIDArray;
}

引用与指针的区别

参照这个文档——C++中指针和引用的区别

UE4资源加载

参照这个博客——加载资源方式

绘制各类Debug线条

参照官方这个文档VS使用技巧

枚举转换为字符串

变量

浮点数取值范围变量

  • FFloatInterval——定义两个float值,一般作为一个取值范围变量使用,min和max。
    下面代码是其结构体定义(这是引擎带的变量结构体)
USTRUCT(noexport)
struct FFloatInterval
{
	/** Values must be >= Min */
	UPROPERTY(EditAnywhere, Category=Interval)
	float Min;

	/** Values must be <= Max */
	UPROPERTY(EditAnywhere, Category=Interval)
	float Max;
};

组件

  • 各种Component
    首先要在头文件中添加相应组件的头文件,单个和数组的定义方式如下(用HISMC举例):
class UHierarchicalInstancedStaticMeshComponent* YourComponentName;
class TArray<UHierarchicalInstancedStaticMeshComponent*> YourComponentsName;

其他

提高VS运行速度

取消勾选下图两个选项,可加快从VS启动虚幻引擎的速度(建议来自官方文档加速Visual Studio 2019)
UE4 C++学习笔记_第1张图片
UE4 C++学习笔记_第2张图片

你可能感兴趣的:(UE4,ue4,学习,c++)