UE 笔记(持续更新)

欢迎来到我的笔记

你好!在国内,unity的网络资料已经很多,在遇到问题的时候找度娘基本都能解决,UE相关的网络经验还需要慢慢积累。。。 在此我做个笔记,方便自己也方便他人,前人栽树,后人乘凉,希望大家在笔记中能有所收获。

我种的树

下面展示一些 代码片

//添加组件
	BikeComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("BikeComponent"));
	BikeComponent->SetupAttachment(RootComponent);
//通过名称获取关卡中的actor
	template<typename ObjClass>
	FORCEINLINE ObjClass* GetActor(FString Actorname)
	{
    
    
		ObjClass* mActor = nullptr;
		for (TActorIterator<ObjClass> It(GetWorld()); It; ++It)
		{
    
    
			ObjClass* xActor = *It;
			FString name = xActor->GetFName().ToString();
			if (name.Equals(Actorname))
			{
    
    
				mActor = xActor;
				break;
			}
		}
		return  mActor;
	}
//通过名称获取关卡中的actors
	template<typename ObjClass>
	FORCEINLINE TArray<ObjClass*> GetActors(FString startName)
	{
    
    
		TArray<ObjClass*> mActors;
		for (TActorIterator<ObjClass> It(GetWorld()); It; ++It)
		{
    
    
			ObjClass* xActor = *It;
			if (xActor->GetFName().ToString().StartsWith(startName))
			{
    
    
				mActors.Add(xActor);
			}
		}
		mActors.Sort();
		return  mActors;
	}
//通过名称获取关卡中的actor
	AActor* GetActorByID(const UObject* Object, const FString& actorName)
	{
    
    
		for (ULevel* level : Object->GetWorld()->GetLevels())
		{
    
    
			AActor* actor = FindObject<AActor>(level, *actorName);
			if (actor != nullptr)
				return actor;
		}
		return nullptr;
	}
//通过名称获取UMG中的控件(这是个类似功能的参考)
	template<typename ObjClass>
	FORCEINLINE TArray<ObjClass*> GetKongJians(FString startName, UUserWidget* Widget, int32 count)
	{
    
    
		TArray<ObjClass*> KongJians;
		for (int32 i = 0; i < count; i++)
		{
    
    
			FString str = startName + FString::FromInt(i);

			ObjClass* KongJian = Cast<ObjClass>(Widget->GetWidgetFromName(*str));
			KongJians.Add(KongJian);
		}
		KongJians.Sort();
		return  KongJians;
	}

UEC++ 编码规范

前人栽的树: 传送门 这里面也有enum和struct的常用形式和一些代码经验

UEC++ Unreal 读写自定义配置文件

前人栽的树: 传送门
前人栽的树(【UE】读写配置文件 ue读写ini文件): 传送门

UEC++ 代理/委托

前人栽的树: 传送门
前人栽的树: 传送门

UE4_多线程、异步执行任务

1、创建、消耗Actor
2、Debug绘制函数
3、定时器 TimerManager
这几个操作不能在非游戏线程中进行
前人栽的树: 传送门1
前人栽的树: 传送门2
前人栽的树: TaskGraph

Unreal/UE4项目目录结构+如何删除C++文件

前人栽的树: 传送门

UE5中的定时器:SetTimer

前人栽的树: 传送门

//带参数的定时器
	FTimerDelegate RespawnDelegate = FTimerDelegate::CreateUObject(this, &AUMG_CPKModel::WaitCountDown, uTextBlock);
	GetWorldTimerManager().SetTimer(TimerOne, RespawnDelegate, 1.0f, true);

[UE4]C++实现动态加载的问题:LoadClass()和LoadObject()

前人栽的树: 传送门
官方文档: 传送门
我的总结 代码片

UStaticMesh* Obj = LoadObject<UStaticMesh>(NULL, TEXT("StaticMesh'/Engine/BasicShapes/Sphere.Sphere'"));

TSubclassOf<UUserWidget>  WidgetClass = LoadClass<UUserWidget>(NULL, TEXT("WidgetBlueprint'/Game/Res/UMG/UMG_CharactorInfo.UMG_CharactorInfo_C'"));

FString path = "AnimSequence'/Game/Res/Bicycle_With_Animations/Animations/Bike_Anim_Cycling_Idle.Bike_Anim_Cycling_Idle'";
UAnimationAsset* Peridle = Cast<UAnimationAsset>(StaticLoadObject(UAnimationAsset::StaticClass(), NULL, *path));

本地资源查找的两个函数
ConstructHelper::FclassFinder 此函数只能用在构造函数中,不可在普通函数中使用;
LoadClass<>()此函数可以在普通函数中使用;

【UE4 C++】碰撞检测与事件绑定

前人栽的树: 传送门

修改UE4缓存路径,免得太多占用c盘空间

前人栽的树: 传送门

UE4常用反射宏:UPROPERTY和UFUNCTION

前人栽的树: 传送门
前人栽的树: 传送门

摄像机切换

前人栽的树: 传送门
我的总结:网上很多都是不同actor之间的摄像机切换,要是同一actor中的不同摄像机组件之间切换怎么办呢,其实编辑器面板有个active的选择,保留你想显示的那个摄像机组件为激活状态就行
代码片

CameraFirstViewComponent->SetActive(false);
CameraThirdViewComponent->SetActive(true);

UE中修改资源的枢轴坐标原点位置

前人栽的树: 传送门

UE的退出功能:Editor模式和游戏模式

前人栽的树: 传送门

#if WITH_EDITOR
GEngine->Exec(nullptr, TEXT(“QUIT_EDITOR”), *GLog);
#endif
FGenericPlatformMisc::RequestExit(true);

#if WITH_EDITOR
GEngine->Exec(nullptr, TEXT(“QUIT_EDITOR”), *GLog);
#endif
UKismetSystemLibrary::QuitGame(this, nullptr, EQuitPreference::Quit,false);

[UE4] 常用类型数据转换FString、FName、FText

前人栽的树: 传送门

[UE4] UE4 C++:枚举UEnum、结构体UStruct

前人栽的树: 传送门 讲了ENUM和String之间的转化关系,等等详细操作

[UE4] Stat 命令汇总

前人栽的树: 传送门

猜你喜欢

转载自blog.csdn.net/qq_34708792/article/details/127847123
今日推荐