蒙太奇用于打断状态机,播放指定动画
蒙太奇用于打断状态机,播放指定动画
规划与边想边做需要结合,这样才能提高开发速度
根据需求使用复用方案:
1、创建一个新父类
2、直接使用原父类
3、修改父类兼容子类需求
对组件进行追踪,将指针的类型修改为其父类,使用C++多态特性,在子类中要删除修改过的父类创建的组件,重新创建时需要修改文本宏TEXT()
涉及转弯影响speed的值
在Blendspace可以修改分栏或插入相同动画序列来改善动画抖动问题
switch与C++语法相同,可写在Tick中
switch可用于制作有限状态机
根据情况,对switch的结构和分支进行优化
使用switch来对枚举情况进行判断,放在Tick中用于判断状态
思考结构如何形成闭环
FORCEINLINE宏让函数使用内联
状态使用枚举类型来保存
创建枚举类型:
虚幻C++枚举类型开头要加E,使用C++申请语法后接存储类型(uint8)
枚举要参加反射系统,需要在前加上宏:UENUM(BlueprintType)
值命名规范:使用类名缩写作为前缀
值要参与反射系统,须在后加上宏:UMETA(DisplayName="")
实现一个功能前的流程
1、说清楚需求(画图描述或文字)
2、实现它的一个基本原理
3、开始实现
与设计师协作时,蓝图可以为BlueprintReadOnly
自行制作时,蓝图可为BlueprintReadWrite
要写注释
做好规划,再进行下一步行动
使用BlueprintImplementableEvent关键字搭配UE蓝图系统使用
父类函数若要在子类函数中重写时,则需要添加virtual
构造函数放在变量处的public中
另一个public中放置函数
带有反射系统的成员不能放在private中
多进行安全性的判断
组件不要分类
在开始开发前,先进行底层设计,进行规划,后期增删改查会方便许多
子UI完成自己的逻辑
UI获得蓝图引用一般获取C++版本的父类
复杂的逻辑使用C++
使用原生C++类操控UI
临时存放的变量理应不应该被修改
对于引用,需要判断其有效性,保证代码的健壮性
临时变量可以提高代码可读性
推荐将绑定写在beginplay中,设置(蓝图面板中的参数)写在构造中
放在AddDynamic(等紫色的宏(参与反射系统))的函数都要有UFUNCTION
FRotator Rotation = Controller->GetControlRotation();
FRotator YawRotation(0.0f, Rotation.Yaw, 0.0f);
FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
AddMovementInput(Direction, Value);、
在第三人称全视角下,视角看向的方向为正方向移动方法。
void AMainPlayer::MoveForward(float Value)
{
const FRotator Rotation = Controller->GetcontrolRotation();
const FRotator YawRotation(0.0f,Rotation.Yaw, 0.0f);
const FVector Direction=FRotationMatrix(YawRotation).GetUnitAxis(EAxis: :X),
AddMovementInput(Direction,Value);
}
void AMainPlayer::MoveRight(float Value)
{
const FRotator Rotation = Controller->GetcontrolRotation():const FRotator YawRotation(0.0f,Rotation.Yaw,0.0f);const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y),
AddMovementInput(Direction,Value);
}