Unreal Engine06:Actor的实现

news2024/10/1 3:25:01

写在前面

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.coloradmin.cn/o/352980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP SAN组网配置

目录一、确认网络连接畅通二、服务器端ISCSI启动器配置1.以root身份登录2.验证是否已安装iSCSI启动器3.安装iSCSI启动器4.启动iSCSI服务5.给iSCSI启动器命名6.扫描目标器7.登录目标器8.将登录目标器行为设置为自启动三、主机多路径配置四、存储配置五、主机挂载背景&#xff1a…

ubuntu20.04配置UR机械臂的仿真环境

ubuntu20.04配置UR机械臂的仿真环境 参考链接 1. 首先安装好ROS ubuntu20.04安装Noetic版本的ros,具体安装可见之前写的博客 2. 配置UR机械臂仿真工具包 找一个你喜欢的地方创建ros工作空间(也就是找个文件夹放ros的包,然后编译运行&…

03 路由匹配

封装了框架的 Context, 将请求结构 request 和返回结构 responseWriter 都封装在 Context 中。利用这个 Context, 我们将控制器简化为带有一个参数的函数 FooControllerHandler,这个控制器函数的输入和输出都是固定的。在框架层面&#xff0c…

MySQL(二)表的操作

一、创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明: field 表示列名 datatype 表示列的类型 character set 字符集,如…

如何创建你的公司的FAQ页面?

很多企业考虑为公司搭建一个“常见问题”页面,作为帮助客户回答关于产品和服务的常见问题的一种方式。 FAQ页面和登录/销售页面不同,没有展现出直接的投资回报,但是为团队节省了其他成本,据了解,高达67%的客户相比于跟…

STM32 - 看门狗

独立看门狗 IWDG专业时钟LSI 低功耗仍可以运行对定时的控制比较松喂狗这些时间是按照40kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间…

浅谈IDE 和代码编辑器之间有什么区别?

您希望如何完成日常编码?快速地?明显地。以既不重复也不单调的方式?自然。拥有您可能随时需要的所有工具。 是否会得到这一切取决于选择在哪里编写代码。您在这里的两个主要选择是代码编辑器或 IDE。两者都旨在使您的编码更容易 - 但是&…

使用 PyNeuraLogic 超越 Transformers

展示神经符号编程的力量neuro-symbolic1. 简介 在过去的几年里,我们看到了基于 Transformer 的模型的兴起,并在自然语言处理或计算机视觉等许多领域取得了成功的应用。在本文[1]中,我们将探索一种简洁、可解释和可扩展的方式来表达深度学习模…

捕获最小化窗口的缩略图画面

关键字: capture minimized window window thumbnail IsIconic 问题背景 最小化的窗口,API GetClientRect 返回的窗口尺寸是0x0,故无法通过GetDCBitBlt捕获到窗口画面。 但是 Agora/zoom/tencentMeeting 都可以拿到最小化窗口的缩略图…

Python自动化必不可少的测试框架 — pytest

Python在测试圈的应用非常广泛,特别是在自动化测试以及测试开发的领域,其中在自动化测试中我们常用的测试框架是uniitest和pytest,本文将带领大家搭建以及熟悉pytest的使用。 既然有unittest那么为什么还要用pytest呢? 这是因为…

会议论文分享-Security22-状态感知符号执行

Ferry: State-Aware Symbolic Execution for Exploring State-Dependent Program Paths1.引言2.问题陈述与分析2.1.实现状态感知符号执行的挑战2.2.真实程序的特征2.3.Ferry的模型2.3.1.程序状态的定义2.3.2.状态描述变量的特征3.Design3.1.Overview of Ferry3.2.状态描述变量识…

CISCN(Web Ezpentest)GC、序列化、case when

目录 REGEXP的一个点(正则) like(默认不区分大小写) 当禁用了空格 regexp,like的区分大小写的使用方法 [CISCN 2022 初赛]ezpentest 卡点 2022 HFCTF babysql 最近又学到了一道新知识,case when的错…

Python|每日一练|排序|递归|链表|字符串|数组|动态规划|哈希表|单选记录:K 个一组翻转链表|括号生成|无重复字符的最长子串

1、K 个一组翻转链表(递归,链表) 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩…

kafka安装及使用

目录 1.单机部署 1.下载安装包 2.启动zookeeper服务 3.启动kafka broker服务 2.集群部署 1.下载安装包 2.修改zookeeper配置 3.修改kafka配置 4.在3台机器上启动zookepper 5.在3台机器上启动kafka 6.检查是否启动OK 3.使用 1.创建topic 2.查看kafka topic分区数 …

OpenFaaS介绍

FaaS 云计算时代出现了大量XaaS形式的概念,从IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)到容器云引领的CaaS(Containers as a Service),再到火热的微服务架构,它们都在试着将各种软、硬…

通过Prowork每日自动提醒待处理工作任务

对于中小团队来说,由于不需要繁琐的流程和高频的异地沟通,需要一款更适合中小团队的日程和项目管理工具。而Prowork就是这样一款敏捷高效的协同平台。Prowork与以往各种项目管理⼯具最⼤的不同在于,其弱化流程和弱化权限的特性,不…

ES6基础规范

1.变量声明const和let 我们都是知道在ES6以前,var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升例如: 下图左侧其实相当于右侧: 所以不用关心bool是否为true or false。实际上…

小知识点:Mac M1/M2 VMware Fusion 安装 Centos 7.9(ARM 64 版本)

最近换了 Mac M2 芯片的笔记本,用原来的 Centos 镜像安装虚拟机直接报错 “无法打开此虚拟机的电源,因为它需要使用 X86 计算机架构,而该架构与此 Arm 计算机架构主机不兼容。” 安装流程前置一、下载镜像二、安装虚拟机三、配置静态 IP四、安…

UVa 225 Golygons 黄金图形 暴力搜索 剪枝 状态判断

题目链接:Golygons 题目描述: 给定nnn和kkk个障碍物的坐标,你需要走nnn次,第一次走一个单位距离,第二次走二个单位距离,…,第nnn次走nnn个单位距离。走得过程中不能穿过或者到达障碍物所在的点&…

数据分析与SAS学习笔记6

数据集整理: 目的:对数据集中的数据进行预处理,使数据更适合统计分析过程对数据格式的要求; 常见整理要求: 1)建立新的变量,衍生变量,删除某些原变量; 2)…