SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

如何通过UE引擎实现手机游戏中的移动机制?

96SEO 2026-02-20 02:58 0


负责组件的生命周期管理、激活/停用、与Actor的绑定等USceneCompoent

如何通过UE引擎实现手机游戏中的移动机制?

- 具有变换并支持附件(组件依附),但没有渲染或碰撞功能。

UPrimitiveCompoent

具有渲染和物理信息,可以实现OverlapUMovementComponent

具备基本移动功能和接口UProjectileMovementComponent

路径寻找和导航功能,可实现代理AI移动UPawnMovementComponent

提供输入累积,Owner和移动相关接口UCharacterMovementComponent

提供了丰富的角色移动功能UFloatingPawnMovement

运动组件,为Pawn提供简单运动

id="基础移动组件泛用型">基础移动组件(泛用型):

USceneComponent+FTransform

ComponentToWorld

//关键能力-----------------------------------MoveComponent()

//核心移动入口,负责位置/旋转更新

//虚函数分发UpdateComponentToWorldWithParent()

//更新

+ComponentToWorldUMovementComponent+USceneComponent

UpdatedComponent

//速度,表示角色当前的移动速度和方向。

----------------------------------------------SafeMoveUpdatedComponent()

//安全移动更新的组件,尝试移动组件并处理碰撞和阻挡,确保不会进入不可通过的区域。

MoveUpdatedComponent()

//移动更新的组件,直接移动组件到目标位置,不处理碰撞。

MoveUpdatedComponentImpl()

//虚函数分发GetPenetrationAdjustment()

//计算移动调整,尝试摆脱失败移动带来的渗透/基于FHitResult,返回能解决穿透的Delta增量ResolvePenetration()

//移動失敗后,多次退回尝试移出物体的穿透范围。

遵循平面约束HandleImpact()

//获取最大速度,返回角色在当前状态下的最大移动速度。

UpdateComponentVelocity()

//获取物理体积,返回角色当前所在的物理体积,如水、空气等。

UNavMovementComponent+FNavAgentProperties

NavAgentProps

//导航代理属性,包含角色在导航网格中的相关信息,如大小、能否通过特定区域等。

+FMovementProperties

MovementState

基于GamePlay视角下的底层核心移动函数(此函数为不同移动组件衍生中包裹的核心):

USceneComponent::MoveComponent()virtual

MoveComponentImpl()

//虚函数转发ConditionalUpdateComponentToWorld()UpdateComponentToWorld()UpdateComponentToWorldWithParent()更新变量:+ComponentToWorld

InternalSetWorldLocationAndRotationUpdateComponentToWorldWithParent()更新变量:+ComponentToWorld

移动组件处理移动的核心调用链(主要用于处理不同的物理运动状态下的移动)

UMovementComponent::SafeMoveUpdatedComponent()UMovementComponent::MoveUpdatedComponent()UMovementComponent::MoveUpdatedComponentImpl()+UpdatedComponent

->

USceneComponent::MoveComponent();

tips:移动组件必须控制一个能够存在于世界上的组件。

移动组件属于UActorCompoent的子类。

本身不具备坐标,其主要功能是用于控制成员变量USceneComponent

UMovementComponent::SafeMoveUpdatedComponent(const

FVector&

USceneComponent::MoveComponent(const

FVector&

ETeleportType::None);

id="衍生移动组件角色特化型">衍生移动组件(角色特化型)

//角色特化型移动组件一般用于包含“物理”特性的可操控主体。

例如Pawn,Character

id="pawn--pawnmovementcomponent">Pawn

&&

PawnMovementComponent的设计上用于为

Pawn

提供更新移动的能力(接口/辅助),主要目的还是为了子组件铺垫所提供一些Pawn其关联的移动的基本功能。

提供了一种通用的方式来累积和读取方向输入(并不实现具体的移动行为):

UPawnMovementComponent+TObjectPtr<class

APawn>

PawnOwner;-----------------------------------AddInputVector()

//接受输入方向

自身不做处理,内部转发回Owner处理ConsumeInputVector()

//消耗输入方向

//正在处理输入+bUseControllerRotationPitch

//使用控制器旋转+bUseControllerRotationRoll

//使用控制器旋转+bUseControllerRotationYaw

//使用控制器旋转----------------------------------------SetupPlayerInputComponent()

//设置玩家输入组件CreatePlayerInputComponent()//创建玩家输入组件AddMovementInput()//内部最终调用为

APawn::Internal_AddMovementInput();//内部包含拥有PawnMovementComponent的转发,但是实际最终调用相同(转发回溯)ConsumeMovementInputVector()//内部最终调用为APawn::Internal_ConsumeMovementInputVector();//内部包含拥有PawnMovementComponent的转发,但是实际最终调用相同(转发回溯)AddControllerPitchInput()//内部转发至AController::AddPitchInput();AddControllerYawInput()//内部转发至AController::AddYawInput();AddControllerRollInput()//内部转发至AController::AddRollInput();GetLastMovementInputVector()//返回LastControlInputVectorGetPendingMovementInputVector()//返回ControlInputVectorFaceRotation()//将Pawn的旋转更新为指定的旋转,假定为ControlRotation,遵循控制器旋转设置GetViewRotation()//

返回视图旋转

通常是控制器旋转UpdateNavAgent()//更新导航代理,确保导航代理属性与角色状态同步。

MoveIgnoreActorAdd()//添加忽略的移动演员,将指定的演员添加到移动忽略列表中,避免与之碰撞GetMovementComponent()//此函数为了通用性用了消耗量比较大的查找类去搜寻,可以进行重载变得更快捷

  • AddMovementInput()用于收集和存储移动输入。

    主要用于改变Pawn中的ControlInputVector以及LastControlInputVector

    本身不会直接导致Pawn移动,而是将输入量存储起来供移动组件在每帧更新时处理。

  • ControlInputVectorLastControlInputVector

    保存了玩家输入的移动方向和大小,这些输入量通常在对应的移动组件中进行处理,不会应用到Pawn的移动上。

  • 基础Pawn类中并没有直接附加UPawnMovementComponent组件。

    需要自行添加

  • UPawnMovementComponent组件并不实现具体的移动行为,其组件含义为提供输入累积,Owner

  • ControlInputVector->LastControlInputVector(目的是防止在帧之间控制输入的累积)
  • Pawn中不实现具体的移动逻辑,但是存在已经实现的旋转逻辑

    旋转流程:

    APlayerController::TickActorPlayerTickUpdateRotationAPawn::FaceRotation

    如果启用以下设置中任意一项+bUseControllerRotationPitch

    //使用控制器旋转+bUseControllerRotationRoll

    //使用控制器旋转+bUseControllerRotationYaw

    //使用控制器旋转在APawn::FaceRotation中Pawn的旋转会被启用的对应控制器旋转控制(直接SetActorRotation())

    如果不是自由相机,尽可能不要使用这个方式,尤其是在Character这种精细化的角色子类。

    id="defaultpawnpawn衍生模板">DefaultPawn(Pawn衍生/模板)

    Character

    以DefaultPawn举例,由输入导致的最终更新位于TickComponent中SafeMoveUpdatedComponent();

    DefaultPawn作为基本实现应用类的简易角色类,是其余角色类的基本模板

    UFloatingPawnMovement

    //运动组件,提供速度,加速度限制,没有实现重力ApplyControlInputToVelocity()//负责将存储的输入量转换为加速度或速度。

    这一步将输入量应用到Pawn的速度上,决定Pawn的移动方向和速度。

    ADefaultPawn+UFloatingPawnMovement

    MovementComponent

    id="输入-移动旋转流程-1">输入-移动旋转流程

    • 旋转由父类Pawn的FaceRotation提供,默认启用三项控制器旋转设置
    • UFloatingPawnMovement::TickComponent

      • ApplyControlInputToVelocity()消费输入转换为Velocity;
      • Velocity转换为移动差量Delta
      • Delta用于驱动SafeMoveUpdatedComponent()实现实际的移动
      • HandleImpact()和SlideAlongSurface()处理滑动以及物理阻挡
      • UpdateComponentVelocity()

        更新组件速度

      • id="character-包含基础运动学的网络同步角色">Character

        UCharacterMovementComponent

        +FVector

        //质量,用于计算加速度以及受力+bEnableScopedMovementUpdates

        //是否启动范围内更新优化性能+FNetworkPredictionData_Client_Character*

        ClientPredictionData

        //客户端角色移动预测数据+FNetworkPredictionData_Server_Character*

        ServerPredictionData

        //服务器角色移动预测数据--------------------------------------------------MoveAutonomous()

        //处理自主移动,即在不受其他外力干扰的情况下,角色根据输入指令进行移动的逻辑。

        MoveAlongFloor()

        //在地面上移动的逻辑,确保角色沿着地面正常行走,并处理地形变化。

        UpdateBasedRotation()

        //随着底座的旋转更新控制器的视图旋转StartNewPhysics()

        //启动新的物理处理周期,根据角色当前的移动模式和状态,调用相应的物理处理函数。

        PhysWalking()

        //处理角色在步行模式下的物理计算,包括地面摩擦力、重力等因素。

        PhysNavWalking()

        //处理角色在导航网格上步行的物理计算,通常用于AI角色的路径导航。

        PhysFalling()

        //处理角色在下落模式下的物理计算,包括重力加速度和落地检测。

        PhysFlying()

        //处理角色在飞行模式下的物理计算,包括飞行速度和方向控制。

        PhysSwimming()

        PhysCustom()

        //处理自定义模式下的物理计算,允许开发者实现自定义的移动逻辑。

        CallServerMove()

        //在客户端上调用,向服务器发送移动请求,确保客户端和服务器上的角色位置同步。

        ReplicateMoveToServer()

        //复制移动数据到服务器,确保服务器上的角色位置和客户端的一致。

        ClientUpdatePositionAfterServerUpdate()

        //在服务器更新后,客户端更新角色位置,处理可能的位移校正。

        SimulatedTick()

        //在模拟角色(非本地控制的角色)上调用,用于处理模拟的移动和物理更新。

        TickCharacterPose()

        //每帧更新角色的姿态,确保角色动画和物理状态的同步

        ACharacter+FBasedMovementInfo

        BasedMovement

        //保存角色当前所站立的“基础”对象的信息,用于处理角色在移动平台上或其他移动基础上的相对位置和旋转。

        +FBasedMovementInfo

        //复制的基于移动的信息,用于网络同步,确保客户端和服务器上的基于移动状态一致。

        +uint8

        //复制的移动模式,用于网络同步,确保客户端和服务器上的移动模式一致。

        +float

        ReplicatedServerLastTransformUpdateTimeStamp

        //复制的服务器最后变换更新时间戳,用于网络同步,记录服务器上最后一次变换更新的时间。

        +TObjectPtr<UCharacterMovementComponent>

        CharacterMovement+TObjectPtr<USkeletalMeshComponent>

        Mesh+TObjectPtr<UCapsuleComponent>

        CapsuleComponentFBasedMovementinfo

        //保存有关角色所站立的“基础”对象的信息的结构。

        +TObjectPtr<UPrimitiveComponent>

        MovementBase

        //指向角色所站立的基础对象的指针,通常是一个移动平台或其他物理对象+FName

        BoneName

        //基础对象上的骨骼名称,如果角色站立在一个骨骼网格的特定骨骼上,则记录该骨骼的名称。

        +FVector_NetQuantize100

        Location

        //角色相对于基础对象的位置,使用网络量化格式确保高效同步。

        +FRotator

        Rotation

        id="输入-移动旋转流程玩家">输入-移动旋转流程(玩家)

        //以下是接受控制器输入状态的角色,也就是玩家角色的流程

        角色移动逻辑:

        AddControllerPitch/Yaw/RollInput

        AddMovementInput

        移动输入向量被转换为加速度向量,后续在各类动力学模式中被处理为速度进行移动

        UCharacterMovementComponent::TickComponent()

        InputVector

        APawn::LastControlInputVector}

        UCharacterMovementComponent::ControlledCharacterMove(InputVector,

        DeltaTime)

        ScaleInputAcceleration(ConstrainInputAcceleration(InputVector));

        PerformMovement()

        ComputeOrientToMovementRotation()

        根据当前运动计算目标旋转,当使用bOrientRotationToMovement时,基于加速度计算旋转

        ![[6bbc850572a1f714064411937e50411e.png]]

        id="performmovement">PerformMovement

        处理绝大部分情况下的每帧运动,是CharacterMovementComponent的核心,其中包含范围更新移动代码块。

        此代码块为PerformMovement的核心

        处理流程如下

      • SCOPE_CYCLE_COUNTER(性能统计)
      • HasValidData()

        前置有效性检查

      • bTeleportedSinceLastUpdate);

      • CurrentRootMotion.LastPreAdditiveVelocity

      • 开始范围移动更新(性能/一致性保障)

        • FScopedCapsuleMovementUpdate

          ScopedMovementUpdate(UpdatedComponent,

          bEnableScopedMovementUpdates);减少重复性碰撞检测

        • MaybeUpdateBasedMovement(DeltaSeconds)

          • UpdateBasedMovement(DeltaSeconds)

            • UpdateBasedRotation(FinalRotation,

              PawnDeltaRotation.Rotator());

            • CurrentRootMotion.CleanUpInvalidRootMotion(DeltaSeconds,

              *CharacterOwner,

            • ApplyAccumulatedForces(DeltaSeconds):把外部施加到

              character

            • UpdateCharacterStateBeforeMovement(DeltaSeconds);移动前修正状态

            • TryToLeaveNavWalking();

            • HandlePendingLaunch()

              Character::LaunchCharacter()

              被延迟执行时在此生效

            • ClearAccumulatedForces

              清除累计力

            • TickCharacterPose(),并转换动画

            • CurrentRootMotion.PrepareRootMotion(...):准备合成/累积来自非动画来源的

              root

              ConvertLocalRootMotionToWorld()

            • AnimRootMotionVelocity

              CalcAnimRootMotionVelocity()

            • Velocity
            • ConstrainAnimRootMotionVelocity()

              HasOverrideVelocity,合成

              override

              ensureMsgf(!Velocity.ContainsNaN()

              确保速度合法,避免灾难性崩溃

            • CharacterOwner->ClearJumpInput(DeltaSeconds);
            • 0;

            • StartNewPhysics(DeltaSeconds,

              0)

            • UpdateCharacterStateAfterMovement(DeltaSeconds);移动后修正状态

            • PhysicsRotation(DeltaSeconds);
            • MoveUpdatedComponent(FVector::ZeroVector,

              true)}

            • CurrentRootMotion.HasActiveRootMotionSources()

              • MoveUpdatedComponent(FVector::ZeroVector,

                true);

              • `LastUpdateRequestedVelocity

                RequestedVelocity

              • bHasRequestedVelocity

                false;

              • OnMovementUpdated(DeltaSeconds,

                OldLocation,

                FScopedCapsuleMovementUpdate,让变换/碰撞状态最终生效。

              • CallMovementUpdateDelegate(DeltaSeconds,

                OldLocation,

                SaveBaseLocation()

                MaybeSaveBaseLocation()(修复/优化相关行为)。

              • UpdateComponentVelocity():把

                movement

                NetDriver->CancelAdaptiveReplication(CharacterOwner)

                UpdatedComponent->GetComponentLocation()NewRotation

                UpdatedComponent->GetComponentQuat()

                server

                ServerLastTransformUpdateTimeStamp(有条件使用客户端时间戳)。

              • LastUpdateLocation/Rotation/Velocity

                  在CharacterMovementComponent中处理旋转的是PhysicsRotation:其核心变量为DesiredRotation

                  由Orient

                  movement和bUseControllerDesiredRotation决定DesiredRotation计算方式

                  ComputeOrientToMovementRotation();//根据当前运动计算目标旋转,当使用bOrientRotationToMovement时,基于加速度计算旋转

                  UpdateBasedRotation

                  Base(比如旋转的平台/载具/重力基座)发生旋转

                  Controller

                  因基座旋转产生的增量旋转(delta)

                  后被调用,允许移动组件修正最终的角色朝向或对控制器视角做额外处理。

                  PerformMovement

                  //前置有移动基座的判断,只有进入移动基座才会在此进入这个

                  关于添加推动力



                  SEO优化服务概述

                  作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

                  百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

                  SEO优化核心服务

                  网站技术SEO

                  • 网站结构优化 - 提升网站爬虫可访问性
                  • 页面速度优化 - 缩短加载时间,提高用户体验
                  • 移动端适配 - 确保移动设备友好性
                  • HTTPS安全协议 - 提升网站安全性与信任度
                  • 结构化数据标记 - 增强搜索结果显示效果

                  内容优化服务

                  • 关键词研究与布局 - 精准定位目标关键词
                  • 高质量内容创作 - 原创、专业、有价值的内容
                  • Meta标签优化 - 提升点击率和相关性
                  • 内容更新策略 - 保持网站内容新鲜度
                  • 多媒体内容优化 - 图片、视频SEO优化

                  外链建设策略

                  • 高质量外链获取 - 权威网站链接建设
                  • 品牌提及监控 - 追踪品牌在线曝光
                  • 行业目录提交 - 提升网站基础权威
                  • 社交媒体整合 - 增强内容传播力
                  • 链接质量分析 - 避免低质量链接风险

                  SEO服务方案对比

                  服务项目 基础套餐 标准套餐 高级定制
                  关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
                  内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
                  技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
                  外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
                  数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
                  效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

                  SEO优化实施流程

                  我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

                  1

                  网站诊断分析

                  全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

                  2

                  关键词策略制定

                  基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

                  3

                  技术优化实施

                  解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

                  4

                  内容优化建设

                  创作高质量原创内容,优化现有页面,建立内容更新机制。

                  5

                  外链建设推广

                  获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

                  6

                  数据监控调整

                  持续监控排名、流量和转化数据,根据效果调整优化策略。

                  SEO优化常见问题

                  SEO优化一般需要多长时间才能看到效果?
                  SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
                  你们使用白帽SEO技术还是黑帽技术?
                  我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
                  SEO优化后效果能持续多久?
                  通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
                  你们提供SEO优化效果保障吗?
                  我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

                  SEO优化效果数据

                  基于我们服务的客户数据统计,平均优化效果如下:

                  +85%
                  自然搜索流量提升
                  +120%
                  关键词排名数量
                  +60%
                  网站转化率提升
                  3-6月
                  平均见效周期

                  行业案例 - 制造业

                  • 优化前:日均自然流量120,核心词无排名
                  • 优化6个月后:日均自然流量950,15个核心词首页排名
                  • 效果提升:流量增长692%,询盘量增加320%

                  行业案例 - 电商

                  • 优化前:月均自然订单50单,转化率1.2%
                  • 优化4个月后:月均自然订单210单,转化率2.8%
                  • 效果提升:订单增长320%,转化率提升133%

                  行业案例 - 教育

                  • 优化前:月均咨询量35个,主要依赖付费广告
                  • 优化5个月后:月均咨询量180个,自然流量占比65%
                  • 效果提升:咨询量增长414%,营销成本降低57%

                  为什么选择我们的SEO服务

                  专业团队

                  • 10年以上SEO经验专家带队
                  • 百度、Google认证工程师
                  • 内容创作、技术开发、数据分析多领域团队
                  • 持续培训保持技术领先

                  数据驱动

                  • 自主研发SEO分析工具
                  • 实时排名监控系统
                  • 竞争对手深度分析
                  • 效果可视化报告

                  透明合作

                  • 清晰的服务内容和价格
                  • 定期进展汇报和沟通
                  • 效果数据实时可查
                  • 灵活的合同条款

                  我们的SEO服务理念

                  我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

                  提交需求或反馈

                  Demand feedback