欢迎来到我的笔记
你好!在国内,unity的网络资料已经很多,在遇到问题的时候找度娘基本都能解决,UE相关的网络经验还需要慢慢积累。。。 在此我做个笔记,方便自己也方便他人,前人栽树,后人乘凉,希望大家在笔记中能有所收获。
这里写目录标题
- 欢迎来到我的笔记
- 我种的树
- UEC++ 编码规范
- UEC++ Unreal 读写自定义配置文件
- UEC++ 代理/委托
- UE4_多线程、异步执行任务
- Unreal/UE4项目目录结构+如何删除C++文件
- UE5中的定时器:SetTimer
- [UE4]C++实现动态加载的问题:LoadClass<t>()和LoadObject<t>()
- 【UE4 C++】碰撞检测与事件绑定
- 修改UE4缓存路径,免得太多占用c盘空间
- UE4常用反射宏:UPROPERTY和UFUNCTION
- 摄像机切换
- UE中修改资源的枢轴坐标原点位置
- UE的退出功能:Editor模式和游戏模式
- [UE4] 常用类型数据转换FString、FName、FText
- [UE4] UE4 C++:枚举UEnum、结构体UStruct
- [UE4] Stat 命令汇总
我种的树
下面展示一些 代码片
。
//添加组件
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 命令汇总
前人栽的树: 传送门