FString、FName、FText
UE4中的所有字符串都作为FStrings或TCHAR数组以UTF-16 格式存储在内存中
wchar_t 表示宽字符,占用两个字节,UFT16每一个字符都需要一个两个字节,用wchar_t表示。
TEXT("hahha") 将c字符串转换成的宽字符串
FString、FName、FText
UE4中的所有字符串都作为FStrings或TCHAR数组以UTF-16 格式存储在内存中
wchar_t 表示宽字符,占用两个字节,UFT16每一个字符都需要一个两个字节,用wchar_t表示。
TEXT("hahha") 将c字符串转换成的宽字符串
不知道该调用哪个函数,怎么办?
蓝图
源码???
传递类对象
循环引用问题
从Output从找错误,不要冲Error list中去找
从Output的第一个错误开始解决,可能其他的错误都是第一个错误引起的。
不要显示Error list
Tools --> options --> error list --> Always show error
成员函数指针
不知道该用什么函数?
先用蓝图试下函数,因为蓝图可以过滤掉不能用的函数。
定义:类成员函数指针(member function pointer),是 C++ 语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息。
基本上要注意的有两点:
UnrealHeaderTool
UBT 把代码生成可以解释的文件
UHT 是干嘛的?
UObjects 拥有的某些超能力,需要UPROPERTY,比如反射,因为C++不支持某些属性,需要自己魔改
UPROPERTY UCLASS 下一行的代码,特殊处理
UnrealBuildTool
有哪些常见的构建工具?
make linux开发
ant 安卓开发
UnrealBuildTool UE4构建工具
构建工具有什么用?
- 依赖问题
- 调用各种程序:配置文件调用
- 跨平台
各个平台不同的配置,统一管理
detail面板不显示,怎么办?
1. Camera Component 的作用?
让摄像头可以跟着玩家旋转移动,避免默认摄像头会穿模的问题。
2. EditAnyWhere 可以在蓝图中被赋值,没有详情
3. VisibleAnyWhere 可以在蓝图中更改详情信息,不能赋值
EditDefaultOnly 只能在类中修改
EditInstanceOnly 只能在实例中修改,只影响一个实例
EditAnyWhere 实例和类中都可以修改
05-创建组件
对于Class 的默认访问权限是Private
对于Struct 的默认访问权限是Public
UPROPERTY
只有变量声明了UPROPERTY才能使用UE4中UObject的特别操作,比如被蓝图访问
组件需要在构造函数中创建,才能在蓝图的编辑页面看到
寻找include头文件的路径
UEBuildModuleCPP.cs 默认路径的设置位置
加载模块,然后把模块下面的几个文件夹设置到寻址路径
没有模块,就把模块加入build.cs中
#include <studio.h> 只搜索系统路径
#iinclude "studio.h" 搜索当前路径,也搜索系统路径
UE4中变量名首字母大写
工程1秒build完成
1. UnrealHeaderTool.target 文件里面加个空格
2. SSD
3. 前向声明 (只需要一个指针类型的变量)
引入某个类,不在头文件中引入该类的头文件,只先申请
class AWeapon;
然后使用 AWeapon *Weapon;
4. Visual Assist Options设置 不要一开始解析全部文件
Performace --> Parse all files when opening a project
手工创建C++类
generated.h 是UE4自动生成的
类名和文件名不用相同
任务45:UI
1, 加入准星UI
User Interface --> Widget BluePrint
2. 把UI显示在界面上
GameMode的 BeginPlay方法中,创建UI界面,然后添加到视图上。
任务44:GameMode
1. GameMode 是什么?有什么用?
GameMode 用来记录游戏的规则,积分这些信息
比如跑酷,玩家的积分,角色可以有多个,积分只属于玩家,而不是和角色绑定。
2. 怎么设置GameMode生效?
World Setting 可以设置 GameMode Override选中自定义的GameMode
GameMode 中可以设置 Default Pawn Class 也就是 主角蓝图的类
任务43:动画事件
1. 机器人死亡了,就不在跟着移动
机器人死了,就让他不受控制器控制
DetachFromControllerPendingDestory
2. 隔一段时间让机器人消失
方案1:
SetTimerByFunctionName设置一个时间,调用DestoryActor让机器人消失
方案2:
因为上个方案,时间是写死的,如果动画时间变了就得改。更好的方案,动画播放完就给个通知,然后收到通知就让机器人消失。
在动画页面 AnimationSequence 动画片段中加入Add Notify 自定义一个通知
在动画蓝图中 接受这个通知 。然后调用销毁机器人的方法。
问题:
动画的通知,只能在动画蓝图里面才收的到吗?
是的
任务42:状态转换
机器人血量为0,函数范围死亡
死亡动画循环播放
死亡动画设置Loop Animation为否
任务41:纯函数
1. 什么是纯函数?
纯函数不需要执行线驱动
非纯函数需要执行性驱动
纯函数不修改任何数值
2. 什么是执行线?
执行线代表执行的顺序。因为纯函数不改变任何数值,只是展示数值,所以执行顺序不重要,可以不要执行线。只在被需要的时候调用。
3. 怎么创造纯函数?
函数设置里面Pure打上勾
4. 什么时候用纯函数?
没有执行点的时候,必须要用纯函数。
有限状态机里面没有执行点,只能用纯函数。
任务40:动画状态机
1. 动画蓝图增加有限动画状态机
Add New State Machine
任务39:有限状态机
1. 什么是有限状态机?
FSM:有限状态,状态切换,切换有条件
灯泡机制就是个有限状态机
任务38:类型判断
1. 怎么让机器人掉血?
射线检测击中会返回一个结果,将该结果中的Hit Actor字段转换成机器人。
CastToRobotShooter
调用机器人的 TakeDamage方法就可以实现机器人掉血的操作。
GetClass可以获得对象的类,类和类可以比较