上海袜网站建设百度游戏中心官网
写在前面
Actor是可以放进地图的最基本类,这里主要是介绍一下Actor的使用。
一、空间坐标系
1. Actor的变换操作
-  
Actor的变换变换操作主要包括四个部分:
- 位置;
 - 旋转;
 - 缩放; 
- 上面三者都是对应三个轴进行变换;
 - 红色代表前(X轴),绕X轴旋转是Roll;
 - 绿色代表右(Y轴),绕Y轴旋转是Pitch;
 - 蓝色代表上(Z轴),绕Z轴旋转是Yaw;
 
 - 移动性; 
- 有三个可选项;
 - 静态:游戏过程中Actor不可移动,属性也不可以更改;
 - 固定:游戏过程中Actor不可移动,但可以更改它的一些属性;
 - 可移动:游戏过程中Actor可以移动;
 - 可以参考博客:UE4 Actor移动性以及光源移动性类型;
 
 
 -  
地图中的每一个单位代表1厘米;
 
2. 世界坐标系和局部坐标系
- (1) 在Editor中点击地图上面的的小按钮可以切换世界坐标系和局部坐标系;
 

-  
两个坐标系对Actor变换影响如下:
- 对于位移变换和缩放变换,两个坐标系均无影响;
 - 对于旋转变换而言,旋转的发生均参照世界坐标系,对世界坐标系无影响,但对局部坐标系有影响,局部坐标系相当于是跟着物体在旋转,始终与物体保持最初的相对位置;
 
 -  
(2) 在代码中也可以使用两种坐标系;
 -  
使用局部坐标系也就是将变换的视角代入Actor本身,操作是相对于Actor而言的,是常用的写法,例如:
 
AddActorLocalOffset(FVector(1, 0, 0));
AddActorLocalRotation(FRotator(1, 0, 0));
 
- 使用世界坐标系也就是用上帝视角进行Actor的变换,X轴、Y轴和Z轴永远不变且唯一,这种用法比较少,一般是用来和地图上的其他东西对齐,例如:
 
AddActorWorldOffset(FVector(1, 0, 0));
AddActorWorldRotation(FRotator(1, 0, 0));
 
二、创建一个Actor的C++类
- 创建的C++类也是放在Source文件夹中的Public和Private文件夹中;
 - 选择Actor作为继承的父类;
 - 头文件中已经默认定义了三个函数: 
- 默认的构造函数;
 BeginPlay()函数:当Actor在游戏中创建完实例后就会执行的内容;Tick()函数:Actor在游戏中的每一帧都会执行的内容;
 

.cpp文件中也已经默认实现了三个函数,如下:

三、实现功能
- 在头文件中增加若干成员变量,如下:
 

-  
一些注意的点如下:
UStaticMeshComponent是挂载的组件,说明符虽然是VisibleAnywhere,但实际上在Editor细节面板上该变量下仍可以自由设置属性,以改变物体的形状;- 带Visible说明符的属性在Editor面板上是类似于只读类型,不希望用户通过Editor直接修改值的属性均设置为Visible说明符;
 ToolTip说明符是在Editor中给变量以鼠标悬停提示,默认是变量上方的注释内容,当然也可以显式设置,中文注释可能会出现乱码;- 在声明变量时不要设置初值,而是在构造函数中设置初值;
 
 -  
在
.cpp文件中实现具体内容,如下: 

 
- 一些注意的点如下: 
- 虽然变量在构造函数中进行了初始化,但设置了Edit说明符的变量的初始值仍然会改变,在Editor的细节面板上修改的值会直接覆盖C++中的初始值,优先级顺序大概是:C++类初始值 -> 蓝图类(若用C++类创建蓝图类)的蓝图面板中的设置值 [Default级] -> 主面板的实例细节面板中的设置值 [Instance级];
 - 所有变量都应该进行初始化;
 - 调试代码时可以尝试用输出到屏幕的方式;
 
 
四、在Editor中使用
- 直接拖动
FloatActor类到地图中可以生成实例; - 当然也可以先用
FloatActor生成对应的蓝图类,然后再将蓝图类拖到地图中以生成实例; 

- 为实例设置基本的形状和材质,否则当游戏开始时是看不到的;
 - 注意移动性应当设置为可移动,因为C++中设置了移动的功能;
 - 在细节面板中搜索
Float Variables分组,可以看到自定义的AFloatActor的成员变量,如下: 

- 最后点击播放即可,如果勾选了
Should Float,这个正方体就会沿水平面漂浮移动; - 播放时,按
Shift + F1可以将鼠标退出游戏界面; 
