转自:https://dawnarc.com/2016/06/ue4%E7%A7%BB%E5%8A%A8%E7%89%A9%E4%BD%93%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E6%B3%95/

1,Actor->SetActorLocation

Actor->SetActorLocation()

2,AActor::AddActorWorldOffset(), AActor::AddActorLocalOffset()

AddActorWorldOffset与AddActorLocalOffset区别:如果期望Actor沿着某个世界坐标系方向移动,那么使用AddActorWorldOffset并且参数为世界坐标系的DeltaLocation;如果期望Actor沿着当前Actor局部坐标系方向移动,那么使用AddActorLocalOffset并且参数为相对当前Actor的DeltaLocation Offset(比如想做螺旋轨迹但又不想计算其世界空间坐标,那么就用LocalOffset)。

如果使用AddActorWorldOffset或者AddActorLocalOffset移动Character,那么MovementMode必须设置为fly,否则当DeltaLocation较小时,角色会始终往下掉(即使禁用物理模拟),UCharacterMovementComponent::SetMovementMode(EMovementMode::MOVE_Flying);。或者Unpossess Controller。

3,Velocity

ACharacter->GetCharacterMovement()->Velocity += FVector(.f, .f, .f);

4,将一个Controller(PlayerController或者AIController)possess到一个Actor上,然后调用:

Controller->MoveTo();

5,将一个Controller(PlayerController或者AIController)possess到一个Actor上,然后调用

GetWorld()->GetNavigationSystem()->SimpleMoveToLocation(Controller, DestLocation);

注意:如果使用Controller->MoveTo或者使用NavigationSystem的Move函数,前提条件是你使用了Navigation组件并build了地形,否则无效。

6,APawn->AddMovementInput

APawn->AddMovementInput(FVector WorldDirection, float ScaleValue = 1.0f, bool bForce = false);

其中WorldDirection是方向,ScaleValue是速率倍速,bForce表示是否忽略Controller中的IgnoreMoveInput属性值,强制移动。

7,UCharacterMovementComponent::AddImpulse

void UCharacterMovementComponent::AddImpulse( FVector Impulse, bool bVelocityChange )

AddImpulse 一般用来做投掷、爆炸、击飞等物理效果。添加的是一个瞬间的力,之后就不需要每帧做处理了。

注意:AddImpulse 作用对象一般都是 StaticMeshComponent ,而不能是 CollisionComponent,否则无效。且 StaticMeshComponent 要开启物理:SetSimulatePhysics(true) ,否则也无效。

8,UCharacterMovementComponent::AddForce

void UCharacterMovementComponent::AddForce( FVector Force )

如果想让物体保持移动,需要每帧都执行AddForce()函数,也就说如果加速度是实时变化的,那么就可以用AddForce。 两者的区别:
AddForce accounts for delta time and should be used for applying force over more than one frame, AddImpulse does not account for delta time and should be used for single 'pushes', like from an explosion or being thrown by a player. The reason is that if you use AddForce for throwing or an explosion, how far the object moves depends on the framerate at the exact frame the force was applied, rather than being independent of framerate like AddImpulse is.

参考:
https://forums.unrealengine.com/showthread.php?29496-Addforce-and-addimpulse

9,UKismetSystemLibrary::MoveComponentTo

FLatentActionInfo ActionInfo;
ActionInfo.CallbackTarget = this;
UKismetSystemLibrary::MoveComponentTo(TopDownCameraComponent, Location, Rotation, false, false, .f, true, EMoveComponentAction::Move, ActionInfo);

一般用来移动Actor身上的Component,例如CameraComponent等。支持平滑移动,可以设置移动到目标Location、Rotation过程的时长。

UE4 移动物体的几种方法的更多相关文章

  1. 提高HTML5 canvas性能的几种方法

    简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为了web中受到广泛支持的2D快速模式绘图(2Dimmediate mode graphic)的标准.许多开发者现在利 ...

  2. cocos2d-html5 碰撞检測的几种方法

    游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论 ...

  3. cocos2d-html5 碰撞检测的几种方法

    游戏中的碰撞还是比较多的,比如角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都需要进行碰撞的检测,来触发一定的事件 最近在尝试制作一个小游戏的时候需要用到碰撞检测,然后就查了下资料,并在论坛 ...

  4. unity3d为对象添加脚本的两种方法

    首先添加一个物体,然后新建一个C#脚本.接下去有两种方法把C#脚本与物体绑定. 1.在类声明上方添加如下代码: [AddComponentMenu("a/b")] 这句话表示在该物 ...

  5. ZBrush中设置背面遮罩的两种方法

    背面遮罩是ZBrush软件实时遮罩的一种,它的出现能够解决我们在模型雕刻时的一些问题.我们在 ZBrush®中雕刻一个比较薄的物体时,经常会不经意的雕刻到背面的物体.那么遇到此类状况该如何设置ZBru ...

  6. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  7. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  8. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  9. 两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...

随机推荐

  1. python tkinter txt窗口,开线程两个卡死

    一个线程可以,两个卡死 #!/usr/bin/python # coding: utf-8 from Tkinter import * import threading class MyThread2 ...

  2. js沉思录一:js的核心概念

    js的核心概念: 原型.对象(Object).函数(Function); 原型:路由路径上非叶子结点的对象: 对象:无序属性(包括函数)的集合: 函数:函数上下文的集合: 原型: 原型的创建.指定.修 ...

  3. 代码的结合性:继承 扩展 组合 变换--swift暗含的四根主线

    类型继承: 类型扩展: 类型组合: 类型变换:

  4. Xamarin.Forms应用程序基础知识

    生命周期 在 Android 上,若主活动的 [Activity()] 属性缺少 ConfigurationChanges = ConfigChanges.ScreenSize | ConfigCha ...

  5. Spring Could Feign 设计原理

    什么是Feign? Feign 的英文表意为"假装,伪装,变形", 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HT ...

  6. 了解Vuex状态管理模式的理解强化指南

    1 Vuex是什么呢?它是Vue的状态管理模式,在使用vue的时候,需要在vue中各个组件之间传递值是很痛苦的,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被改变,所有引用该值的地 ...

  7. Redis内存数据库

    remote dictionary server 远程字典服务器 Redis默认支持16个数据库,不同的应用应该使用不同的Redis实例存储数据.   支持数据类型:字符串,哈希散列,列表,集合,有序 ...

  8. [Beta]Scrum Meeting#1

    github 本次会议项目由PM召开,时间为5月6日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 beta初步计划 撰写博客整理文档 swoip 前端改进计划 模块松耦合 ...

  9. mlocate比find快很多的查找命令

    mlocate比find快很多的查找命令 使用linux操作系统的人,一般都用过文件查找命令find,在文件数量非常庞大的时候,比如在高通的android工程项目中,目录大小有十几个G,文件数量非常多 ...

  10. SVN提示is already locked 解决办法

    当svn提示is already locked ,反复clean up也无用, 可以在cmd下进入到目标文件夹的目录 执行svn cleanup 等待执行成功,就可以update了