目录

一.通过修改位置来实现移动

二.通过物理系统实现位移

三.通过输入控制物体移动


一.通过修改位置来实现移动

利用修改Transform组件的position的两种常用方法。

1.使用Translate()函数。

2.,直接指定新的位置

将上述两种方法在void Update()实现每一帧物体向x方向移动1.5个单位,具体代码如下:

  void Update(){   transform.Translate(1.5f,0,0);//或transform.position += new Vector3(1.5f,0,0);}

注意:此处1.5为啥要写1.5f,根据C#的语法规定,直接写1.5会被认为double类型的数,而这里需要flaot类型数,三个数据只要其中一个带有f就行。

由于电脑无法保证稳定的帧率,会出现帧率高,物体移动就快,帧率低,物体移动就慢。而在游戏开发大部分情况中,我们应该确保”每秒移动同样的距离”,因此,我们应该做如下修改。

void Update(){   transform.Translate(1.5f*Time.deltaTime,0,0);//或transform.position += new Vector3(1.5f*Time.deltaTime,0,0);}

此处*Time.deltatime是确保每秒移动同样的距离。

Time.deltatime 是两帧之间的间隔,如帧率为60帧/秒,则Time.deltatime =0.0167秒,或者帧率为10帧/秒,则Time.delatatime = 0.1秒。所以Time.delatatime是一个随帧率改变而改变的数值,确保物体每秒移动的数值是一样的。

ps:Time.deltatime是一个很小的数值,因此与他相乘的数值应该大些。

二.通过物理系统实现位移

适用于对已经挂载刚体组件的物体

以下是常用的两种方法

1。利用AddForce()对物体施加力改变位置

注意:一定要给物体挂载刚体,物体才会收到力的作用

此处AddForce()的参数为Vector3类型,该参数用一个向量表示力,且符合牛顿力学

这里表示每帧(时间)对物体轴方向施加100N的力,根据牛顿力学,力至少持续一点时间才会引起物体速度的变化。所以此处必有位移,具体的位移,由你施加的力跟每帧的时间有关。在游戏开发中,我们只需要一边测试一边修改,确保一个合适数值即可。

2.直接修改物体的速度

此处表示物体在X轴以10m/s的速度移动,y轴跟z轴方向速度保持不变。

此方法相比上一个方法能让物体直接跳过加速度引起速度变化的步骤,使物体能够匀速运动。

注意:物理系统对于时间是非常敏感的。

举个例子:我们需要子弹0.1秒后击中目标,当更新频率不一定,子弹0.3秒才击中目标,这不是我们想要的。

当设备运行不流畅的时候,帧率下降,Time.deltatime会变大,不在适用。所以我们应该做如下修改,利用FixedUpdate()函数,可以保证稳定的间隔。获取两段Update之间的时间间隔为Time.deltatime,而获得两次FixedUpdate之间的时间间隔为Time.fixedDeltaTime,一般Time.fixedDeltaTime是一个固定的值(默认为0.0.2秒,可通过Edit——Project Setting——Time来修改)。

修改代码如下:

public Rigidbody rb;void FixedUpdate(){   rb.AddForce(10*Time.fixedDeltaTime,0,0);//或rb.velocity = new Vector3(10*Time.fixedDeltaTime,rb.velocity .y,rb.velocity.z);}

三.通过输入控制物体移动

以键盘的W、A、S、D为例

参考unity的输入管理器的横轴输入与纵轴输入

常利用Input.GetAxis()与Input.GetAxisRaw()

两者区别,前者范围为-1~1,后者范围为1,0,1

输入以上代码,可以通过Console查看输入值。

由于

我们可以通过简单的相乘将物体移动联系起来,这里我们采用GetAxis()见下图

第一种方法

void Update(){   float horizontal = Input.GetAxis("Horizontal");float vetical = Input.GetAxis("Vetical");transform.Translate(horizontal*speed*Time.deltaTime,vetical*speed*Time.deltaTime,0);//或transform.position += new Vector3(horizontal*speed*Time.deltaTime,vetical*speed*Time.deltaTime,0);}

此处的speed为一个变量,我们可以通过修改speed来控制物体移动的距离。

假设我们定义 float speed =10;

即此处每帧最大的位移为1*10*0.0167=0.167米。

第二种方法  

 public Rigidbody rb;public float speed;void FixedUpdate(){   float horizontal = Input.GetAxis("Horizontal");float vetical = Input.GetAxis("Vetical");rb.AddForce(horizontal*speed*Time.fixedDeltaTime,vetical*speed*Time .fixedDeltaTime,0);//或rb.velocity = new Vector3(horizontal*speed*Time.fixedDeltaTime,vetical*speed*Time.fixedDeltaTime,rb.velocity.z);}

通过上述的两种方法,我们就可以实现,每当按下相应的键,物体就会往相应的方向移动一定的距离。

unity物体四种移动方法总结相关推荐

  1. 三点照明的三dmax四种基本方法

    三点照明的三dmax四种基本方法 三点照明3dmax的四种基本方法!3dsMax是一个三建模.动画和渲染软件.借助3dsMax,我们可以创造一个宏伟的游戏世界,安排精彩的场景,实现设计的可视化,创造身 ...

  2. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  3. python安装第三方库-python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  4. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  5. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

    Django默认开启防止csrf(跨站点请求伪造)攻击,在post请求时,没有上传 csrf字段,导致校验失败,报403错误 解决方法1: 注释掉此段代码,即可. 缺点:导致Django项目完全无法防 ...

  6. 51单片机有几个通用io口_51单片机IO口的四种使用方法

    原标题:51单片机IO口的四种使用方法 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路. 灌电流方式 LED正极接VCC,负极接IO口 ...

  7. vue移动端html5页面根据屏幕适配的四种解决方法

    最近做了两个关于h5页面对接公众号的项目,不得不提打开微信浏览器内置地图导航的功能确实有点恶心.下次想起来了的话,进行总结分享一下如何处理.在vue移动端h5页面当中,其中适配是经常会遇到的问题,这块 ...

  8. 计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

    现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了.比如有时候笔记本win7系统连接无线信号时出现"Windows无法连接到路由器名称"(如下图所示),该如 ...

  9. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)

    总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选 ...

  10. ios打包ipa的四种实用方法(.app转.ipa)

    [原]ios打包ipa的四种实用方法(.app转.ipa) 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏- ...

最新文章

  1. 假如我是陈一舟--我的大社交生态系统战略
  2. 华为敏捷 DevOps 实践:产品经理如何开好敏捷回顾会议
  3. phpMyAdmin登陆超时1440秒未活动请重新登录
  4. MyBatis操作指南-与Spring集成(基于注解)
  5. SGU traffic light
  6. Lugre摩擦模型的Stribeck曲线仿真
  7. linux 环境搭建Jenkins
  8. RoboWare 下载地址
  9. 【艾特淘】淘宝改sku名字有影响吗?淘宝sku怎么修改不降权
  10. 计算机中的信息计量单位字,计算机中信息的计量单位.pdf
  11. vi中 wq 、wq!、x、q、q!区别
  12. 设计模式之策略模式:模拟鸭子
  13. discuz 模板php代码,自定义HTML模板DIY支持PHP代码解析
  14. matlab练习程序(RGB2CMY、CMY2RGB)
  15. 登陆器生成登陆器不显示服务器列表,GeeM2单机登录器读取不到列表怎么办?
  16. No module named gi解决方案
  17. python研发岗简历_【干货】不谈具体面经,说说研发岗简历编写、面试技巧
  18. PBR——概述、基于物理的材质
  19. Ubuntu 16.04 安装pyk4a
  20. 无人便利店抢人饭碗?这些“黑科技”将创造百万就业

热门文章

  1. wso2 mysql_WSO2 DAS使用mysql集群APIM
  2. WPS Office 2021 Mac免费办公软件
  3. html中div中文字如何上下居中,div中文字各种垂直居中的方法
  4. Unity 正则表达式
  5. C++之虚函数和虚函数表
  6. 这五款简单又实用自媒体排版工具,你不来试试?
  7. android直播sdk 美颜,美颜SDK,实时美颜滤镜SDK,直播美颜SDK开发服务
  8. 什么是游戏盾,如何使用
  9. 安卓如何更换wps黑金会员图标_wps图标(手机wps会员图标黑色)
  10. MinDoc安装指南(v0.12)