学习资料:《大象无形》罗丁力
学习计划:看当日计划行事
目录
读写配置GConfig文件(TODO:就是Unity中的.Asset)
第1章 开发之前——五个最常见基类
-
UObject
- Garbage collection垃圾收集
- C++释放资源的解决方案,①继承UObject ②非UObject可以采用智能指针
- Reference updating引用自动更新
- Reflectio反射(TODO:第二章即将学习)
- Serialization序列化:保存资源
- Automatic updating of default property changes自动检测默认变量的 更改
- Automatic property initialization自动变量初始化
- Automatic editor integration和虚幻引擎编辑器的自动交互
- Type information available at runtime运行时类型识别
- UE4有自己的类型转换方案,Cast<TargetType>(OriginType)
- Network replication网络复制
- 构造函数会调用两次,自动处理变量同步是什么意思?P26
- Garbage collection垃圾收集
-
Actor
- 它能够被挂载组件,但不是组件。组件都以U开头而不是A
-
Pawn
- 国际象棋中的“棋子”,必须要被Controller所操控,可以是玩家也可以是AI
-
Character(继承Pawn)
- 有特殊的Movement组件,提供了一个基于胶囊体的角色移动,包括了移动和跳跃功能
-
Controller
- 控制Pawn和Character
- AIController:使用UE4的行为树/EQS环境查询系统
- PlyaerController:绑定输入,转化为对Pawn/Character的函数调用
-
总结
-
M(Pawn)V(Pawn带的动态网格组件)C(Controller)
-
第2章 需求到实现
- 需求人持有武器,发射子弹
- 武器继承Actor,子弹继承Actor,人继承Character
第3章 创建自己的C++类
- 继承UObject的类,类名上方需要加入UCLASS宏
-
虚幻引擎类命名规则
- F:纯C++类
- U:继承UObject
- A:继承
- S:Slate空间相关类
- H:HitResult相关类
第4章 对象
-
常见类对象的产生方法
- 如果你的类是一个纯C++类型(F开头),你可以通过new来产生对象。
- 如果你的类继承自UObject但不继承自Actor,你需要通过NewObject函数来产生出对象:NewObject<T>()
- 如果你的类继承自AActor,你需要通过SpawnActor函数来产生出对象:GetWorld( )->SpawnActor<AYourActorClass>( )
- 如果你需要产生一个Slate类,要么你在做深入开发(源码开发),要么UE版本过老
-
类对象的获取
- for(TActorIterator <ClassType> Iterator(GetWorld());Iterator;++Iterator)
{
...//do something
} - *Iterator访问对象,或者Iterator→function()
- for(TActorIterator <ClassType> Iterator(GetWorld());Iterator;++Iterator)
-
类对象的销毁
- 纯C++类
- (TODO:验证)
- 不是用new分配,会自动释放
- 如果是new分配,尽量用智能指针TSharedPtr<YourClass> YourClassPtr=MakeShareable(new YourClass());
- UObject类
- 自带垃圾回收机制(智能指针)
- ACtor类
- MyActor->Destroy();
- 纯C++类
第5章 从C++到蓝图
-
UPROPERTY宏(变量)
- 变量注册到蓝图中:UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Object")
- 变量到处可见:UPROPERTY(EditAnywhere, Category = Collectable)
-
UFUNCTION宏(函数)
-
注册函数到蓝图:UFUNCTION(BlueprintCallable,Category="Test")
-
第6章 UE4游戏性框架概述
-
行为树
- 为什么选择行为树?UE3还是状态机,行为树“退行”特点,“逐个尝试,不行就换”,符合人类的思维方式。熟悉行为树的框架后,能更加快速地编写AI代码
- 曾经在Unity学习过Behaviour Designer,主要是涉及了一些节点和装饰器。这个应该会成为以后的研究重点,概念感觉不是特别难理解,期待以后的学习,很有趣
-
广义的客户端-服务端模型
- 客户端是对服务端的拙劣模仿,不再时刻去"同步",而是去"预测",“模仿”
第7章 引擎系统相关类
-
在虚幻引擎4中使用正则表达式
- 匹配CDEFGH,模式串和匹配串,想起了KMP算法,啧啧啧,整活
void AMyActor::hhhh() { FString TextStr("ABCDEFGHIJKLMN"); FRegexPattern TestPattern(TEXT("C.+H")); FRegexMatcher TestMatcher(TestPattern,TextStr); if (TestMatcher.FindNext()) { UE_LOG(LogTemp, Warning, TEXT("找到匹配内容 %d -%d"), TestMatcher.GetMatchBeginning(), TestMatcher.GetMatchEnding());//输出 找到匹配内容 2-8 } }
- 匹配CDEFGH,模式串和匹配串,想起了KMP算法,啧啧啧,整活
-
FPaths类的使用
- 具体路径类,如:FPaths::GameDir()可以获取到游戏根目录
- 工具类,如:FPaths::FileExists()用于判断一个文件是否存在
- 路径转换类,如:FPaths::ConvertRelativePathToFull()用于将相对路径 转换为绝对路径
-
XML与JSON(TODO:解析)
-
文件读写与访问(TODO:API熟悉)
-
读写配置GConfig文件(TODO:就是Unity中的.Asset)
-
UE_LOG
- 查看
- Game模式 在Game(打包)模式下,记录Log需要在启动参数后加-Log
- 编辑器模式 在编辑器下,需要打开Log窗口(Window->DeveloperTools->OutputLog)
- 使用Log
- UE_LOG(LogMy, Warning, TEXT("Hell World"));
- UE_LOG(LogMy, Warning, TEXT("Show a String %s"),*FString("Hello"));
- UE_LOG(LogMy, Warning, TEXT("Show a Int %d"),100);
- 总结:第一个参数自定义,第二个参数Log灰,Warning黄,Error红
- 查看
-
字符串处理
- FName:const 类型的 string,大小写不敏感
- FText:不支持修改
- FString:支持修改,但开销性能比上面两种要大
-
编译器相关技巧
- Images:图片的读取和类型转换
第8章 模块机制(后面的东西学起来有点虚,没把握,以后再来)
-
模块简介
- 在不同模式(debug,release)下的包不同,引入了模块j机制
- UBT(Unreal Build Tool)