Class Hierarchy (类的层次结构)
- Object 所有虚幻实例(UObject)的基类
- √ Actor 可以被放置或生成在世界中的Object
- √ √ Pawn 可以被玩家或AI控制的Actor
- √ √ √ Character 包含步行移动组件的Pawn
- √ √ √ √ *Character 我们继承重写的C++类
Class Prefixes (类的前缀)
虚幻引擎需要类始终保持前缀
- U - 派生自UObject的类
- A - 派生自Actor的类
- F - 结构体
- E - 枚举
- I - 接口
BeginPlay
在Character刚被加载的时候首先调用
如果它被执行,那么它已经被完全加载,完全初始化,这是我们可以信赖的第一件事。
Tick
每一帧都会被调用,也传递了一个delta时间访问
相机组件
UCameraComponent
弹簧臂组件
USpringArmComponent
创建实例
CreateDefaultSubobject<CLASSNAME>(“TABNAME”)
其中CLASSNAME是实例的类型,TABNAME是它在编辑器中显示的名字
数据视图与完整蓝图编辑器
数据视图很难读懂正在发生的事情
蓝图读起来比较快
C++层暴露组件,适当的显示出细节面板
设置弹簧臂正确的附着
弹簧臂 SetupAttachment(RootComponent)
RootComponent是层次结构中的第一个组件
设置相机正确的附着
相机 SetupAttachment(弹簧臂)
相机安装在弹簧臂上
因为我们想要角色和相机之间有一定的距离
Unreal Property System (虚幻资产系统)
UPROPERTY,UFUNCTION,UCLASS,USTRUCT,UENUM(Unreal Macros 虚幻宏)
标记C++类,用于像编辑这样的事情,蓝图访问,甚至对于网络行为。
定义你的代码应该在哪里运行,服务器还是在本地客户机上。
而且也是为了内存管理,将会用于追踪指针和一个对象的内存,
比如
UProperty(VisibleAnywhere) //它将在任何地方可见
玩家输入组件
void AMainCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 加两个输入事件控制相机
// 轴运算
PlayerInputComponent -> BindAxis("LookRight", this,&AMainCharacter::AddControllerYawInput);
PlayerInputComponent -> BindAxis("LookForward", this,<