1. c++ 与蓝图
- C++实现Gameplay的构建模块,蓝图用这些模块实现有意思的Gameplay
- 创建流程
- 通过UE4内的类向导生成,避免自己直接去VS里创建
- 指定适合的父类
- UProperty(): 暴露变量给编辑器
- EditAnywhere & VisibleAnywhere
- EditAnywhere: 编辑器属性窗口可见,不可编辑
- VisibleAnywhere: 编辑器属性窗口可见,可编辑
- BlueprintReadOnly & BlueprintReadWrite
- BlueprintReadOnly: 蓝图可读,不可修改
- BlueprintReadWrite:蓝图可读,可修改
- 其他的一些宏,定义在ObjectMacro.h的namespace UP中
- UFUNCTION(): 公开方法给蓝图
- BlueprintCallable:蓝图可调用
- BlueprintImplementableEvent: 蓝图实现,c++调用(thunk)
- BlueprintNativeEvent:类似上,不给c++可提供默认方法,用[func_name]_implementation实现
- Reload机制,可不关闭虚幻编辑器,编译VS代码
- 根据C++类,构建蓝图类,实现Gameplay
- Gameplay的常用类
- UObject, AActor, UActorComponent, UStruct
- UObject:提供虚幻基础功能,一般不直接继承。如:
- 反射属性和方法
- 序列化,垃圾回收,按名称查找UObject
- 联网,等等
- AActor:派生自UObject
- 基本对象,可添加UActorComponent
- BeginPlay()
- Tick()
- EndPlay():对象销毁时调用
- UStruct
- 添加USTRUCT()标记
- 传统数据类型,自己需要管理生命周期
- 反射机制
- Reflection is the ability of a program to examine itself at runtime
- 可选,需要自己设置对应标签
- UCLASS: 类必须派生自UObject,为该类生成反射数据
- USTRUCT:为结构体生成反射数据
- GNERATED_BODY: 替换为该类的样板代码
- UPROPERTY, UFUNCTION:上面已经介绍过了
- Actor迭代器
for (TObjectIterator<UObject> It; It; ++It)
{
UObject* CurrentObject = *It;
UE_LOG(LogTemp, Log, TEXT("Found UObject named:%s"), *CurrentObject->GetName());
}
APlayerController* MyPC = GetMyPlayerControllerFromSomewhere();
UWorld* World = MyPC->GetWorld();