Unreal Engine06:Actor的实现

写在前面

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文件中也已经默认实现了三个函数,如下:

cpp文件

三、实现功能

  • 在头文件中增加若干成员变量,如下:

头文件内容

  • 一些注意的点如下:

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

cpp内容
cpp内容

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

四、在Editor中使用

  • 直接拖动FloatActor类到地图中可以生成实例;
  • 当然也可以先用FloatActor生成对应的蓝图类,然后再将蓝图类拖到地图中以生成实例;

在地图中构建Actor实例

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

成员变量

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

猜你喜欢

转载自blog.csdn.net/weixin_43992162/article/details/128989925