1. 简介
在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。

2. 通过Transform组件移动物体
Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。

2.1 Transform.Translate
该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤

if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) //上移
{
transform.Translate(Vector3.up * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) //下移
{
transform.Translate(Vector3.down * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) //左移
{
transform.Translate(Vector3.left * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) //右移
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.E)) //前移
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.R)) //后移
{
transform.Translate(Vector3.back * speed * Time.deltaTime);
}

2.2 Vector3.Lerp, Vector3.Slerp, Vector3.MoveTowards
Vector3 既可以表示三维空间中的一个点,也可以表示一个向量。这三个方法均为插值方法, Lerp为线性插值,Slerp为球形插值, MoveTowards在Lerp的基础上增加了限制最大速度功能。 当需要从指定A点移动到B点时,可以考虑时候这些方法。

//A点到B点移动的两种方法:MoveTowards和Lerp
if (Input.GetKey(KeyCode.W)){
{
transform.position = Vector3.MoveTowards(transform.position, target.position, stmp);
}

if (Input.GetKeyDown(KeyCode.D))
{
transform.position = Vector3.Lerp(transform.position, target.position, stmp);
}
}

2.3 Vector3.SmoothDamp
该方法是可以平滑的从A逐渐移动到B点,并且可以控制速度,最常见的用法是相机跟随目标

2.4 Transform.position
有时重新赋值position能更快实现我们的目标。

3. 通过Rigidbody组件移动物体
Rigidbody组件用于模拟物体的物理状态,比如物体受重力影响,物体被碰撞后的击飞等等。

**注意:关于Rigidbody的调用均应放在FixedUpdate方法中,该方法会在每一次执行物理模拟前被调用。**

3.1 Rigidbody.velocity
设置刚体速度可以让物体运动并且忽略静摩擦力,这会让物体快速从静止状态进入运动状态。

3.2 Rigidbody.AddForce
给刚体添加一个方向的力,这种方式适合模拟物体在外力的作用下的运动状态。

3.3 Rigidbody.MovePosition
刚体受到物理约束的情况下,移动到指定点。

4. 通过CharacterController组件移动物体
CharacterController用于控制第一人称或第三人称角色的运动,使用这种方式可以模拟人的一些行为,比如限制角色爬坡的最大斜度,步伐的高度等。

4.1 CharacterController.SimpleMove
用于模拟简单运动,并且自动应用重力,返回值表示角色当前是否着地。

4.2 CharacterController.Move
模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。

u3d引擎移动都有哪些方法?又都适用于什么场景?相关推荐

  1. 蓝牙人员定位有哪些定位方法?可适用于哪些场景?

    蓝牙人员定位是利用先进的物联网技术,围绕用户的不同工作/生活场景,面向B端(企业)或G端(政府)等构建基于无线传感网络的智能化识别.定位.跟踪.监控和管理的综合一体化信息平台,为用户提供实时.便捷.经 ...

  2. Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具

    Unity3D 学习笔记3--了解U3D引擎的操作面板和各种工具 在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件 ...

  3. servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  4. U3d引擎与资源管理

    U3d引擎界面介绍 五个视图区: Scene视图:场景视图 用来摆放Hierarchy中的游戏对象. Hieraracy:层次视图用 来放置游戏中具体的项目对象,例如摄像机,灯光. Game:游戏视图 ...

  5. 【翻译搬运】起源引擎 C/S延迟补偿方法在游戏协议中的设计与优化【一】

    写在前面 继翻译搬运起源引擎(Source)的客户端服务器同步之后,搬运了这篇 Latency Compensating Methods in Client/Server In-game Protoc ...

  6. Effective Java:对于全部对象都通用的方法

    前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书.可以把我们的Java功底提升一个档次,我还是比較推荐的.这里我主要就关于覆盖equals.hashCode和toString方法来做一个笔记 ...

  7. 如何做好网络推广中有关网站优化中内链搭建都有什么方法?

    在网站优化的过程中,如何做好网络推广中不同的优化人员对于优化技巧的使用和优化重点也会有所不同,但其中,内链的优化也是不容忽视的一点,它就相当于网站的内部循环系统,做好它才能让网站更好地运行,那么对于网 ...

  8. Effective Java:对于所有对象都通用的方法

    前言: 读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的.这里我主要就关于覆盖equals.hashCode和toString方法来做一个笔记总 ...

  9. [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到?

    [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到? flow 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣 ...

  10. [html]html实现页面跳转都有哪些方法?

    [html]html实现页面跳转都有哪些方法? 创建A标签跳转location.hrefform submit<meta http-equiv="refresh" conte ...

最新文章

  1. opencv实现二值图像细化的算法
  2. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法
  3. oracle 数据库开发应用实例,招生录取系统,oracle与plsql教程打包下载
  4. 数据结构与算法(Python)– 回溯法(Backtracking algorithm)
  5. java切面不需要接口了吗_使用java语言,如何对一个类中的静态方法做切面编程?...
  6. OpenGL ES之GLSL实现仿抖音“灰度滤镜”和“颠倒滤镜”效果
  7. 四级计算机网络选择题,2015全国计算机等级考试四级计算机网络模拟选择题
  8. Knozen:新型职场社交评论匿名应用,已获多家风投投资
  9. Qt: 找不到Qt5Widgets.lib
  10. c语言一个数组后添加元素append,jQuery 追加元素、拼接元素的方法总结(append、html、insertBefore、before等)...
  11. 【Spring】Spring xml 名称和别名
  12. 传智播客 Web静态服务器-6-epoll
  13. Casper与V神的博弈论(过节了,文末送大礼)
  14. 基于ENVI的Landsat 7地表温度(LST)大气校正方法反演与地物温度分析
  15. 计算机网络的三大功能,计算机网络主要功能
  16. ROS小车PS2遥控器的使用注意事项
  17. R语言画图时常见问题
  18. 运行uniapp跳转微信开发工具后一直卡在微信开发工具首页的解决方法
  19. 车载应用--AUXIN 利用 surfaceView 预览 Camera 数据
  20. [Erlang] XML处理方案

热门文章

  1. 谷粒商城二十订单服务
  2. word2013怎么去掉所有文字下面的波浪线
  3. 不用露脸,现在做自媒体还晚不晚?推荐这3个新手适合做的领域
  4. SmartGit功能介绍
  5. Android视频编辑器(二)预览、录制视频加上水印和美白磨皮效果
  6. 天玑9200和骁龙8+哪个好 天玑9200和骁龙8+gen1对比
  7. 关闭win7的程序兼容性助手
  8. mysql 批量替换 某个字段的值 replace 方法
  9. 用c#二次开发的焊锡检测视觉系统
  10. android 轨迹生成图,Android自定义View实现公交成轨迹图