reflection反射机制
就是UE4的各种宏,将程序内容反射到UE4蓝图中 .generated.h里面有反射机制的相关实现, Uneal Header Tool(UHT)会建立一些反射以及代码与蓝图之间的联系。
Garage Collection垃圾回收机制
UE4的机制是被引用的指针不能释放,没有引用的指针可以释放
Object和actor的区别
Object不能挂载组件,而actor可以 创建Pulic和Private文件夹时,头文件出现红线,可以采用如下形式: #include “..\Public\MyObject.h” 包含相对路径,就可以识别
在蓝图中使用UObject
UCLASS(Blueprintable) C++类可继承为蓝图
Actor
construct object from class 为某个类创建一个实例 window–>Developer Tools–>Output Log 开启输出日志 内容管理器里向下的小箭头Import可以导入资源
场景空间
Shift + End 将底部中心对齐到地面 transform里的单位都是厘米 前是红色X轴 上是蓝色Z轴 右是绿色Y轴 FVector设置一个浮点数,就三个轴都是这个 UPROPERTY() edit: EditAnywhere 在任何地方都可以看到和编辑 EditInstanceOnly 只在实例窗口可以看到和编辑 蓝图里看不到不能编辑 EditDefaultsOnly 只能在蓝图窗口里编辑 实例窗口看不到不能编辑 Visible: VisibleAnywhere 任何地方可见 VisibleInstanceOnly 实例中 VisibleDefaultsOnly 蓝图中可见
条件编译指令 #if #else #endif
#if #else #endif 可以用来写分支,没选中的代码会变灰
碰撞相关
UE_LOG
测试输出
UE_LOG(LogTemp, Warning, TEXT("Warning!"));
AddActorLocalOffset
AddActorLocalOffset 向Actor的局部坐标添加位置增量
void AddActorLocalOffset
(
FVector DeltaLocation,
bool bSweep,
FHitResult * OutSweepHitResult,
ETeleportType Teleport
)
DeltaLocation: FVector变量,Actor局部坐标的增加量 bSweep: 检测Actor运动过程是否发生碰撞重叠 OutSweepHitResult: 碰撞结果,有一系列参数,如碰撞位置 bTeleport: 是否传送物理状态
类似的,还有AddActorWorldOffset 向Actor的世界坐标添加位置增量
AddActorLocalRotation
AddActorLocalRotation 向Actor的局部坐标添加旋转量量
void AddActorLocalRotation
(
const FQuat & DeltaRotation,
bool bSweep,
FHitResult * OutSweepHitResult,
ETeleportType Teleport
)
DeltaLocation: FVector变量,Actor局部坐标的增加量 bSweep: 检测Actor运动过程是否发生碰撞或重叠 OutSweepHitResult: 碰撞结果,有一系列参数,如碰撞位置 bTeleport: 是否传送物理状态
类似的,还有AddActorWorldRotation 向Actor的世界坐标添加旋转量
信息输出改进
输出碰撞信息:
//直接使用浮点数输出,小数点位数较多
UE_LOG(LogTemp, Warning,
TEXT("%%f Hit@: x=%f,y=%f,z=%f"),
HitResult.Location.X, HitResult.Location.Y, HitResult.Location.Z);
//采用字符串输出,小数点后两位
UE_LOG(LogTemp, Warning,
TEXT("%%s Hit@: x=%s,y=%s,z=%s"),
*FString::SanitizeFloat(HitResult.Location.X),
*FString::SanitizeFloat(HitResult.Location.Y),
*FString::SanitizeFloat(HitResult.Location.Z);
1左边的符号 可以调出cmd进行调控
世界坐标和局部坐标
FVector与FRotator
FVector 位置三维坐标 FRotator 旋转三维坐标
FRotator旋转属性对应
沿着那个轴,哪个轴就不动,
世界坐标系中红色的是Roll,沿着X轴即前后方向旋转,一般来说FPS游戏不用动这个角度
绿色的是pitch,沿着Y轴即左右方向旋转,FPS游戏中可以向上向下瞄准
蓝色的是yaw值,沿着Z轴即上下方向旋转,FPS游戏中可以左右扫射
FORCEINLINE FRotator::FRotator( float InPitch, float InYaw, float InRoll )
FRotator中第一个是沿着Y轴旋转的角度Pitch,第二参数是沿着z轴旋转的角度Roll(FPS很少用),第三个参数是沿着x轴旋转的角度Yaw。
力和扭矩
Force和Torque Force是按一个方向移动的力 Torque是按一个方向旋转的力
如果使用了->来访问类的成员,就需要添加相应的头文件 Physics–>Constrains(约束)–>lock Position/lock Rotation 锁定指定位置X、Y、Z坐标/ 锁定旋转的X、Y、Z值
Sequence 顺序 其实是协程
数学函数
游戏弹道算法–>数学函数插件? 正弦函数
//正弦函数配置
float InitialX = FMath::FRand() * 500;
float InitialY = FMath::FRandRange(100,500);
float InitialZ = 0;
SetActorLocation(FVector(InitialX, InitialY, InitialZ));
初识Pawn(棋子)类
USceneComponent 场景根组件,一般物体都有(很有必要添加,不然后续附着别的组件可能有问题) GamemodeBase–>继承蓝图–>details–>Classes–>Default Pawn Class可以选取我们想默认生成的Pawn 然后再世界场景中选取我们自定义的游戏模式