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

Unreal Engine UFloatingPawnMovement

Unreal

  • ⚡ Unreal Engine - UFloatingPawnMovement
    • 🏷 定义
    • 🧩 类继承关系
    • ⚙️ 关键特性
    • 🛠️ 常见配置(Details 面板/代码)
    • 📝 使用方法
      • 1) 在 Pawn 中添加组件(C++)
      • 2) 绑定输入与驱动移动
      • 3) 启用平面约束(可选)
      • 4) 蓝图用法(等价思路)
    • 📚 典型应用场景
    • 🧯 常见坑与对策
    • 🔁 与其他移动组件对比
    • 📦 小结

⚡ Unreal Engine - UFloatingPawnMovement


🏷 定义

  • UFloatingPawnMovementPawn 的轻量级移动组件,用于实现“悬浮/漂移式”移动逻辑。
  • 典型特征:不受重力、基于输入 加速/减速,碰撞时沿表面滑移
  • 适合 飞行器/自由镜头/无重力物体 等简单移动需求;不包含角色步行那样的复杂地面/跳跃/梯子等逻辑。

🧩 类继承关系

UObject└── UActorComponent└── UMovementComponent└── UNavMovementComponent└── UPawnMovementComponent└── UFloatingPawnMovement└── USpectatorPawnMovement  (常见派生:观战/自由摄像)
  • UPawnMovementComponent:Pawn 移动组件基类(收集输入、处理速度/位移)。
  • UNavMovementComponent:提供导航相关接口(便于与 AI/PathFollowing 协作)。
  • USpectatorPawnMovement:基于 UFloatingPawnMovement 的自由相机移动。

⚙️ 关键特性

  • 简单输入驱动:通过 AddInputVector(通常由 AddMovementInput 调用)累计输入,每 Tick 转化为速度与位移。
  • 加速/减速模型
    • 有输入 → 以 Acceleration 朝输入方向加速,最大不超过 MaxSpeed
    • 无输入 → 按 Deceleration 逐步减速至停下。
  • 转向助推(Turning Boost):在低速/急转弯时加一点“顺手感”,更快贴合新方向。
  • 平面约束(可选):支持将移动约束到某平面(如 XY 平面用于俯视游戏)。
  • 碰撞与滑移:移动通过 SafeMoveUpdatedComponent / SlideAlongSurface 实现,遇到障碍会沿表面滑动。
  • 导航/AI 兼容:因继承自 UNavMovementComponent,可配合简单的 AI 移动调用(直线/简化路径)。
  • 网络复制:作为 Pawn 的移动组件,配合 Pawn 的 bReplicates / SetReplicateMovement(true) 可进行基础同步。

🛠️ 常见配置(Details 面板/代码)

  • MaxSpeed:最大速度。
  • Acceleration:有输入时的加速度。
  • Deceleration:无输入时的减速度(制动)。
  • TurningBoost:转向助推(数值越大拐向越“利落”)。
  • 平面约束相关(在 MovementComponent 上):
    • bConstrainToPlane / SetPlaneConstraintEnabled(true)
    • SetPlaneConstraintNormal(FVector::UpVector)(约束到水平面)
    • bSnapToPlaneAtStart(开局吸附到平面)

提示:这些参数可在蓝图/Details 面板直接调,快速打磨“手感”。


📝 使用方法

1) 在 Pawn 中添加组件(C++)

// MyFloatingPawn.h
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
UFloatingPawnMovement* Movement;// MyFloatingPawn.cpp (构造函数)
Movement = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("Movement"));
Movement->UpdatedComponent = RootComponent; // 通常设为你的碰撞体/根组件

2) 绑定输入与驱动移动

// Pawn::SetupPlayerInputComponent
InputComponent->BindAxis("MoveForward", this, &AMyFloatingPawn::MoveForward);
InputComponent->BindAxis("MoveRight",   this, &AMyFloatingPawn::MoveRight);
InputComponent->BindAxis("Turn",        this, &AMyFloatingPawn::Turn);// 实现:把输入转成移动/旋转
void AMyFloatingPawn::MoveForward(float Value) {if (Value != 0.f) AddMovementInput(GetActorForwardVector(), Value);
}
void AMyFloatingPawn::MoveRight(float Value) {if (Value != 0.f) AddMovementInput(GetActorRightVector(), Value);
}
void AMyFloatingPawn::Turn(float Value) {AddControllerYawInput(Value); // 让控制器驱动朝向
}

3) 启用平面约束(可选)

Movement->SetPlaneConstraintEnabled(true);
Movement->SetPlaneConstraintNormal(FVector::UpVector); // 约束到 XY 平面
Movement->bSnapToPlaneAtStart = true;

4) 蓝图用法(等价思路)

  • 在 Pawn 蓝图里添加 FloatingPawnMovement 组件。
  • Add Movement Input 节点驱动移动;在 Project Settings → Input 配好 Axis。
  • 可在 Details 面板直接修改 Max Speed / Acceleration / Deceleration / Turning Boost
  • 若只想在平面移动,开启 Constrain to Plane 并设置法线为 Z+

📚 典型应用场景

  • 🎥 自由相机 / 观战模式(Spectator)。
  • 🚀 俯视/双摇杆射击(Top-Down/ Twin-stick)。
  • 🛰 飞行/无人机/太空漂移(无重力直觉式推进)。
  • 🧭 简单 AI 追逐/巡逻(直线或简化路径,无复杂地形逻辑)。

🧯 常见坑与对策

  • 物理模拟冲突:如果 UpdatedComponent(通常是碰撞体)开启了 Simulate Physics,移动组件将无法直接驱动;

    → 关闭物理模拟,或改用物理力/UProjectileMovementComponent 等方案。

  • 没动起来

    • 确认 Movement->UpdatedComponent 指向可移动的根/碰撞组件;
    • 轴映射是否正确(Project Settings → Input);
    • Pawn 是否被玩家/AI Possess(或 Auto Possess Player)。
  • 卡墙角/抖动:适当调碰撞形状、步长、DecelerationTurningBoost,避免高频改变方向导致贴壁震荡。

  • 需要重力/复杂步行UFloatingPawnMovement 不提供地面检测/坡度/跳跃;

    → 使用 UCharacterMovementComponent(带完整角色移动模型)。


🔁 与其他移动组件对比

组件特点适用
UFloatingPawnMovement无重力、加减速、滑移,轻量好调手感飞行/自由镜头/Top-Down
UCharacterMovementComponent完整步行/跳跃/地面逻辑,最复杂玩家角色/NPC
UProjectileMovementComponent给物体初速度/重力/反弹子弹/抛射体
URotatingMovementComponent让组件/Actor 按固定角速度旋转环境机关/旋转装饰

📦 小结

  • UFloatingPawnMovement = 轻量级悬浮移动
  • ✅ 输入驱动 + 加减速 + 碰撞滑移
  • ✅ 可选平面约束,快速做俯视/飞行感
  • ✅ 适合自由相机/飞行器/Top-Down,不适合带重力的地面角色
  • ✅ 与 Pawn/AI/网络基础复制配合良好,易于上手与调参

http://www.dtcms.com/a/343897.html

相关文章:

  • SpringBoot集成ELK
  • 【Dubbo】高性能的 RPC
  • 零基础从头教学Linux(Day 18)
  • Slither 审计自己写的智能合约
  • 《R for Data Science (2e)》免费中文翻译 (第5章) --- Data tidying
  • 园区 “一表多属” 电仪表能碳数据归集与编码实施文档
  • 《LINUX系统编程》笔记p3
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记与代码示例:XILINX UART控制器详解:特性与功能
  • 新手向:计算机视觉入门OpenCV实战项目
  • elasticsearch 7.x elasticsearch 使用scroll滚动查询一页,删除一页,影响后面滚动的查询吗
  • 【LeetCode热题100道笔记+动画】最大子数组和
  • 任务同步和锁
  • 基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城
  • sqli-labs通关笔记-第61关 GET字符型报错注入(单引号双括号闭合 限制5次探测机会)
  • 基于Django的学校实验室预约管理系统/基于python的实验室管理系统的设计与实现#python#django#FLASK
  • JAVA基础-java虚拟机
  • uniapp googlepay支付 内购项目
  • 豆包AI PPT与秒出PPT对比评测:谁更适合你?
  • 计算机毕设选题推荐 基于Spark的家庭能源消耗智能分析与可视化系统 基于机器学习的家庭能源消耗预测与可视化系统源码
  • Python办公之Excel(openpyxl)、PPT(python-pptx)、Word(python-docx)
  • 2026年计算机毕设推荐:基于大数据的慢性肾病数据可视化分析系统技术选型指南【Hadoop、spark、python】
  • 使用PPT进行科研绘图过程中常用的快捷键
  • 日志logging学习(1)
  • Gemini 2.5 Flash-Lite与 DeepSeek-V3 深度对比:谁在性价比上更胜一筹?
  • 【typenum】 21 类型级别计算最大公约数(Gcd)
  • map和set的使⽤
  • 52 C++ 现代C++编程艺术1-禁止隐式转换关键字explicit
  • Qt中用于图像缩放的核⼼⽅法QPixmap::scaled
  • 编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
  • --- 使用OpenFeign来优雅的对服务进行调用 ---