UE4 GamePlay架构 建议看这里,这里比较详细 https://zhuanlan.zhihu.com/p/22833151
UPROPERTY参数
EditAnywhere 表示该属性可从编辑器内的属性窗口编辑。
Category 定义属性的分类。使用方法: Category=CategoryName. (分类=分类名称)
Const 编辑器中不能修改该值
BlueprintReadOnly 在蓝图中只读,不可修该。
BlueprintReadWrite 在蓝图中可读写。
BlueprintCallable 仅能用于Multicast代理。该代理可被蓝图调用。
与UPROPERTY
对应的还有一个用于修饰函数的宏UFUNCTION
,该宏常用于描述如何从蓝图中访问C++的函数。
UFUNCTION参数
BlueprintCallable 这种类型的函数,只能在C++中实现和重写。可以理解为蓝图“只读”函数。
BlueprintImplementableEvent 只能在蓝图中实现的函数。类似于C++的纯虚函数
BuleprintNativeEvent C++可以提供默认实现,蓝图可以重写。
编码规范
类名前缀
UE4的类名必须遵从命名规范,需要在类名前面加上正确的前缀,与之对应的C++文件名则不加前缀。否则会编译报错。
- 派生自 Actor 的类前缀为 A,如 AController。
- 派生自 UObject 的类前缀为 U,如 UComponent。
- 枚举 的前缀为 E,如 EFortificationType。
- 接口 类的前缀通常为 I,如 IAbilitySystemInterface。
- 模板 类的前缀为 T,如 TArray。
- 派生自 SWidget(Slate UI)的类前缀为 S,如 SButton。
- 其余类的前缀均为 字母 F ,如 FVector。
其他类型命名
bool类型变量需要加上b前缀,如 bCallable。
相关函数简介
事件:
Event Level Reset 关卡重启
Event Actor Begin OverLap 两个Acotor开始碰撞
Event Actor End OverLap 两个Actor停止碰撞
Event Hit 两个Actor碰撞
Event Any Damage Actor收到伤害
Event Point Damage 点伤害
Event Radial Damage 放射伤害
Event Actor Begin Cursor Over 鼠标光标在Actor上悬停
Event Actor End Cursor Over 鼠标光标在Actor上移开
Event BeginPlay 游戏开始将触发的事件
Event EndPlay Actor不存在世界场景里面执行此事件
Event Destroyed Actor被销毁执行此事件
Event Tick 游戏进入每一帧调用此事件
Event Receive Draw HUD 蓝图绘制到UI
CustomEvent 自定义事件
其中蓝图里面的Array就是c++ 里面的TArray,相当于std::vector,可变长度数组,
那么具有的方法也大致类同
SetArrayElem 设置数组里面对应下标的值
Get 获取数据的对应下标的 值,或者引用
Add 添加一个数据到数组的最后面
Add Unique 添加一个唯一的值,如果数组里面有,就不会添加
Remove Index 根据下标删除数组元素
Remove (reference) 删除数组对应的元素
MakeArray 创建一个数组
Clear 清除数组所有的元素
对Actor的操作函数
GetActorLocation 返回Actor位置
GetActorTransform 获取Actor Transform信息
SetVisibility 设置可见性
SetLightColor 设置灯的颜色
Add Actor Local Offset 给Actor设置一个偏移
Activate 启用动画
Set World Scale 3D 设置缩放大小
Get World Scale 3D 得到Actor的缩放
Get ActorRotation 获得Actor的旋转
AddActorLocalOffset 给Actor添加一个局部位置偏移
AddActorLocalRotation 给Actor添加一个局部旋转
AddActorLocaltransform 给Actor添加一个Transform偏移
AddActorWorldOffset 给Actor添加一个世界坐标偏移
AddActorWorldRotation 给Actor添加一个世界坐标下的旋转
AddActorWorldTransform 给Actor添加一个世界坐标下的Transoform
SetActorHiddenInGame 设置Actor隐藏
SetVisibility 设置Actor隐藏显示 ,一般用这个
其中PlayerControler的方法有,(通过GetPlayerControler获取)
Add Yaw Input
Add Pitch Input
Add Roll Input
整个游戏的函数
Get GameTime Sine Creation 获取Actor的运行的时间
Get GameTime in Seconds 游戏的时间
Get WorldDelta Seconds 获取游戏帧差时间
流程控制
Branch 就是if else
DoN 前面的N次通过,后面不通过
DoOnce 只通过一次
FlipFlop 第一次通过A,第二次通过B,第三次又是A 这样来回切换
ForLoop 就是for循环
ForLoopWithBreak 就是for循环 带break
Gate 可以设置通过和不通过,和if差不多
MultiGate 可以通过多个
Sequence 顺序执行N个
WhileLoop 就是while循环
select 从多个里面选一个
Delay 等待延迟执行
其他操作
SetMembers In Struct 节点修改可用成员
PrintString 打印消息
MakeTransform 可以合成位置,旋转
Add Reroute Node 增加一个控制点,改变线路
GetPlayerControler 获得控制者
GetPlayerPawn 获得pawn
Enable Input 使得Actor获得输入的能力
MakeArray 组成数组
Random Integer In Range 随机一个整形值
SpawnActor 创建一个Actor
Create Widget 创建一个HUD 节点
Add to Viewport 将HUD添加到视口
PlaySound At Location 播放声音
GetAllActorofClass 获得场景里面所有的是这个class的Actor
GetAllActorofClass WithTag 获得场景里面所有的有tag 的class Actor
Cast To 转换成那个Class 相当于c++ 的static_cast
ShowMouseCursor 显示鼠标
Is Input Key Down 按键是否按下 状态查询
GetMousePosition On ViewPort 获取屏幕空间鼠标位置
Left Mouse Down 鼠标左键按下
Get DisplayName 获取Actor的名字字符串
Get ViewPort Scale 获取ViewPort缩放
SetMaterial 设置材质
Get All ActorWith Tag 获取所有的带有tag的Actors
打断点调试 F9 或右键 Add BreakPoint
变量上右键Watch this Value 查看调试的运行值
注释是 右键 选择 Node Comment 填写注释内容, 或者按键C
add math Expression 添加数学小函数 如:a+b+c*d
时间轴的函数
GetPlayRate 获得播放速率
Get Playback Position 获取播放位置
Get TimeLine Length 获取时间轴长度
Is Looping 是否循环
Is Playing 是否在播放
is Reversing 是否在反向播放
Play 播放
Play from Start 从开始处播放
Reverse 反向播放
Reverse from End 从结尾处开始反向播放
Set Looping 设置循环
Set New Time 设置新时间
Set PlayRate 设置播放速率
Set Playback Position 设置播放位置
Set TimeLine Length 设置时间轴长度
Set TimeLine Length Mode 设置时间轴长度模式
Stop 停止
其中的蓝图里面的Event 就是c++的类函数
Event Dispatcher就是c++ 的回调函数数组,这样就可以bind unbind,call,clear,相当于QT的Slot