当前位置: 首页 > news >正文

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可以将鼠标退出游戏界面
http://www.lryc.cn/news/10616.html

相关文章:

  • 2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化)
  • aws codebuild 自定义构建环境和本地构建
  • 3年功能3年自动化,从8k到23k的学习过程
  • leaflet: 数据聚合,显示当前bounds区域中的点的名称列表(078)
  • XXL-JOB分布式任务调度框架(一)-基础入门
  • 基于CentOS 7 搭建Redis 7集群
  • Lesson5.3---Python 之 NumPy 统计函数、数据类型和文件操作
  • Puppeteer 爬虫学习
  • 如何在Power Virtual Agents中实现身份验证
  • 金三银四必备软件测试必问面试题
  • Java反序列化漏洞——CommonsCollections6链分析
  • Selenium浏览器自动化测试框架
  • Hashmap链表长度大于8真的会变成红黑树吗?
  • 关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地
  • 排序
  • Android DataStore Proto存储接入流程详解与使用
  • HiEV洞察 | 卖一台亏半台,激光雷达第一股禾赛隐忧仍在
  • 面试题61. 扑克牌中的顺子
  • 有特别有创意的网站设计案例
  • Python基础-数据类型之列表
  • Linux系统基本设置:网络设置(三种界面网络地址配置)
  • MySQL(二):查询性能分析
  • Java基础-类加载器
  • Python 使用pandas处理Excel —— 快递订单处理 数据匹配 邮费计算
  • 【黑马SpringCloud(7)】分布式事务
  • 百度地图API添加自定义标记解决单html文件跨域
  • 如何停止/重启/启动Redis服务
  • python 的selenium自动操控浏览器教程(2)
  • 【Deformable Convolution】可变形卷积记录
  • Oracle-Mysql 函数转换