一、反射(Reflection)与垃圾回收(Garbage Collection)
C++本身没有像C#、Java那样的反射和垃圾回收,但虚幻本身提供了相似的功能,通过UHT进行连接。
在类上面添加"UCLASS()"宏,标明这个类参与反射和垃圾回收系统,“UPROPERTY()”标明变量,“UFUNCTION()”标明函数。
宏的括号里填写对应的参数,代表这个类、变量、函数在反射中承担什么样的反射角色。
比如:UCLASS(Blueprintable)----蓝图类,可被蓝图继承,编译代码后,可在Unreal中右键点击这个类生成蓝图类
创建蓝图类:
二、代码编译方式
1.在VisualStudio中编译
右键Games--生成
2.在Unreal中编译
Compile
在WIndow--Developer Tools --Message Log--Compiler Log查看log信息
三、加快Unreal编译速度
每次编译都会将反射再次编译,为节省时间,可以在
D:\Program Files\Epic Games\UE_4.23\Engine\Binaries\Win64路径下的UnrealHeaderTool.target文件,第一行加一个空格,再次删掉也可以
四、声明与定义
在.h文件中声明,在.cpp中进行函数的定义或实现
1.生成蓝图类及在蓝图中调用函数、变量
2.在虚幻引擎中,定义bool型变量,必须以“b”开头,如:bool bIsMoving;
五、Unreal中的宏及其参数
1.UCLASS()
UCALSS(Blueprintable) //可成为蓝图类
2.UPROPERTY()
UPROPERTY(BlueprintReadWrite) //该属性可在蓝图中读写
UPROPERTY(BlueprintReadOnly,Category = "My Variables") //只读,并添加标签
UPROPERTY(VisibleAnywhere) //在任何地方都可见,一般用于组件
UPROPERTY(EditInstanceOnly) //只在实例上可编辑,点击生成的实例,可以编辑其对应的属性
UPROPERTY(EditInstanceOnly,Category = "My Actor Properties | Vector")
// | Vector可以添加一个Vector的组
UPROPERTY(VisibleInstanceOnly) //只能在实例上进行只读操作
UPROPERTY(EditDefaultsOnly) //只能在默认模板上编辑
UPROPERTY(EditAnywhere) //在任何地方都可编辑。注意:指针类型不可以被EditAnywhere的宏定义,下图是错误示例!!!!
UPROPERTY(EditAnywhere,meta = (ClampMin = -5.0f,ClampMax = 5.0f,UIMin = -5.0f,UIMax = 5.0f)) //这个meta可以限定在属性面板可编辑数值的范围
3.UFUNCTION()
UFUNCTION(BlueprintCallable) //该函数可在蓝图中被调用
4.UE_LOG()
UE_LOG(LogTemp,Log,TEXT("Hello world!!")) //LogTemp,临时Log。Log,普通Log
UE_LOG(LogTemp,Warning,TEXT("Hello world!!")) //Warning,警告Log
UE_LOG(LogTemp,Error,TEXT("Hello world!!")) //Error,错误Log
5.TEXT()
TEXT("Hello word!!") ---文本宏,参数为一段字符串
六、蓝图
按住alt键点击连线位置,可断开连接
1.自定义蓝图类
可通过UCALSS(Blueprintable)将类生成蓝图类
2.关卡蓝图
每个关卡都有且只有一个关卡蓝图,可实例化自制的蓝图类
1)Event BeginPlay节点
游戏开始时,会被Unreal包调用
2)Construct NONE节点
用于实例化继承自Object类的蓝图类
可添加变量节点保存function
七、删除C++类
1.删除.h和.cpp
2.删除Binaries(二进制)文件夹
3.生成VisualStudio工程文件,然后Open
八、Actor类
1.Actor类自带的三个方法
1)AMyActor(); //默认构造函数,里面的值如果为false,那么可以停用Tick();
2)BeginPlay(); //游戏运行时,会调用该函数
3)Tick(); //每帧调用该函数
2.Actor类来源
Actor类继承自Object类,可直接生成蓝图类(鼠标点击某类,按F12,可以追踪到父类)
3.Actor蓝图类在场景中的显示
Actor类和Actor蓝图类都可以直接拖拽到场景中,Actor蓝图类会显示为一个小球,这是Actor类生成蓝图类后,自动添加了DefaultSceneRoot组件,方便在场景中观察位置等信息,但运行后不会再显示。
在Actor蓝图中,可以添加Static Mesh组件(静态网格),选择一个Cube网格,这样运行后就会显示一个正方体。
也可以把某个组件拖拽到DefaultSceneRoot组件身上,这样可以替换DefaultSceneRoot成为根组件。
九、组件
1.在蓝图中添加组件
Add Component
2.在代码中添加组件
1)在.h中声明组件(例如静态网格组件)
2)在.cpp中的构造函数中初始化
3)编译通过后,生成蓝图类。组件名就是声明时的变量名。
十、基础操作
1.更换运行视角
选择一个视角,右键Player Start--Snap Object To View
十一、命名规范
十二、Unreal中的函数
1、SetActorLocation|(); //设定位置,参数为FVector类型的参数,FVector为内置结构体
例:SetActorLocation(FVector(0.0f));SetActorLocation(FVector(0.0f,1.0f,2.0f));
2、GetActorLocation(); //获取actor位置
FVector placeLocation = FVector(0.0f);
placeLocation = GetActorLocation();