UE5物体旋转(蓝图版)

创建项目

新建关卡

新建一个基础关卡。

新建BP_ObjectRotator

新建一个蓝图类,继承于Actor,命名为BP_ObjectRotator。

新建几个变量

首先启用输入,AutoReceiveInputAtStart变量默认设置为True。

然后就是最重要的部分,通过滑动旋转物体。

滑动分为两种情况,第一种就是按下然后滑动最后松开,第二种就是按下然后滑动最后还可以按着不放继续滑动(这也就是为什么后面给Touch Start Location赋值的原因)。

新建BP_GameMode

新建一个继承于GameModeBase的蓝图类,命名为BP_GameMode。

然后设置如下

最后赋值

关卡蓝图

在场景里面添加一个Cube,设置为可移动。

在添加一个摄像机,设置好它们的位置(坐标轴对好哦)。

打开关卡蓝图

把外面的摄像机拖进来

BP_ObjectRotator设置

把创建的BP_ObjectRotator拖入场景,把前面创建的cube赋值过去。

到这里就差不多搞完了,运行以后发现好像没有效果?

那是因为还差一步。。。

ProjectSettings

打开ProjectSettings,启用Use Mouse for Touch。

### 在 Unreal Engine 5 中获取物体旋转事件 在 Unreal Engine 5 中,可以通过多种方式监听并处理物体旋转事件。以下是几种常用方法: #### 方法一:使用图脚本 对于大多数开发者来说,最直观的方式是在图中捕捉旋转变化。这通常涉及到创建一个自定义事件或使用现有的组件函数。 1. **添加 Event Tick 或者其他触发条件** - 可以为Actor添加`Event Tick`节点,在每一帧检查其旋转状态。 2. **比较当前与前一帧的姿态** - 利用变量存储上一次更新时的对象旋转角度(`FRotator`),并在每次Tick内对比新旧值。 - 如果检测到差异,则说明发生了旋转操作[^1]。 ```blueprint // 假设有一个名为 LastRotation 的 FRotator 类型成员变量用于保存上次的位置 if (GetActorRotation() != LastRotation) { // 执行响应逻辑... } LastRotation = GetActorRotation(); ``` #### 方法二:基于 C++ 实现更精细控制 如果需要更加灵活的功能定制化能力,可以选择编写C++代码来捕获这些事件。 - 继承 `AActor` 并覆写虚函数 `Tick()` 来定期查询对象姿态; - 或者订阅特定于某些物理交互类型的委托(Delegates),比如碰撞发生后的回调通知等; 下面是一个简单的例子展示如何利用C++监测旋转改变: ```cpp void AMyCustomActor::BeginPlay() { Super::BeginPlay(); PreviousRotation = GetActorRotation(); } void AMyCustomActor::Tick(float DeltaTime) { if (!FMath::IsNearlyEqual(GetActorRotation().Pitch, PreviousRotation.Pitch) || !FMath::IsNearlyEqual(GetActorRotation().Yaw, PreviousRotation.Yaw) || !FMath::IsNearlyEqual(GetActorRotation().Roll, PreviousRotation.Roll)) { OnRotated.Broadcast(this); UE_LOG(LogTemp, Log, TEXT("Object has been rotated.")); PreviousRotation = GetActorRotation(); } } ``` 此段程序会在每帧调用`Tick()`期间判断是否有任何轴向上的转动,并据此发出广播信号给所有已注册监听器[^2]。 另外值得注意的是,Unreal Engine 提供了丰富的调试工具帮助理解复杂行为模式下的数据流走向,例如通过启用 Debug Draw 功能可以在运行时可视化地观察目标实体的状态变换过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿克不黑

你的鼓励是我的最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值