1.使用Transform组件

(1)transform.position(最基础,最常用):

这是通过上下左右键控制人物运动的方法

//获取水平按键,左键或A 则值为-1f,右键或D 则值为1f
        horizontal = Input.GetAxis("Horizontal");

//获取垂直按键,上键或W 则值为-1f,下键或S 则值为1f
        vertical = Input.GetAxis("Vertical");

Vector2 position = transform.position;
         position.x = position.x + speed * horizontal*Time.deltaTime;//Time.deltaTime在小技巧中有讲,speed在最开始赋值,或者外部赋值
        position.y = position.y + speed * vertical * Time.deltaTime;
        transform.position = position;

注意: transform.position = position; // 通过transform获取位置会在人物与碰撞体碰撞时发生抖动,所以一般使用刚体的rigidbody2d.position

(2) transform.Translate(v3向量,坐标系):这个坐标系有两种,一种世界坐标系Space.World;一种局部坐标系Space.Self,当这个坐标系不写时,默认的为局部坐标系,这里可以看坐标系

这是局部坐标系:

这是世界坐标:

public float speed;
private void update( )

{

//沿z轴移动,如果想要自己控制,参照(1)的写法
        transform. Translate(new Vector3(0, 0, speed*Time. deltaTime ) , Space .World);

}

2.使用 Vector3插值 (1是速度越来越慢,3是匀速,4是先匀速再速度越来越慢)

        (1)Vector3.Lerp(当前位置(V3),目标位置(V3),速度(float)):线性移动由速度参数控制
速度越小,物体越慢,这里速度其实就是插值的比例(0~1),例如总路程为1,速度为0.5,第一次插值后两者距离为1*0.5,第二次插值为(1-(1*0.5)*0.5),缓动效果(越靠近目标越慢)(这里的缓动效果会无限接近目标,但是接近不了),一般用来控制相机的移动

public float speed;
public Transform target;//目标对象
private void Update()

{
        Vector3 V = Vector3.Lerp( transform.position,target. position, speed * Time .deltaTime);
        transform.position = V;
}

(2) Vector3.Slerp(当前位置(V3),目标位置(V3),速度(float)):这就是通过抛物线的形式到达目标点(不常用)

(3)Vector3.MoveTowards(当前位置(V3),目标位置(V3),最大速度(float)):速度取正靠近目标,速度取负远离目标,注意这是做匀速直线运动靠近目标

(4)Vector3.SmoothDamp(当前位置(V3),目标位置(V3),当前速度(ref:V3),缓动时间(float),最大速度(float)):官方翻译为“平滑阻尼”,也就是移动过程中,逐渐变慢的抵达终点(这里缓动可以到达目标),这里的最大速度可以不用写,当前速度参数:应为全局变量,这个值由你每次调用这个函数时被修改所以是ref(这里的当前速度不用赋值),缓动间参数:该值越小,越快抵达目标

public float time;
public Vector3 cspeed = Vector3 . zero;
public transform t;
private void Update()

{
        Vector3 V = Vector3. SmoothDamp(transform.position, t.position,ref cspeed,
        time*Time.deltaTime) ;

}
transform. position = V;

3.使用刚体组件 :

  (1)AddForce(有方向的力(V3),力的模式):这里就可以理解为给刚体了一个带有方向的力,

注意:1.建议放置在FixedUpdate函数下 2.移动物体需要添加刚体 3.适合模拟外力作用下的刚体运动(因此经常用来做发射子弹)4.此力为累加,不适合重复施加力来模拟物体
力的模式(ForceMode)总共有四种:

1.Force(叫持续的力,受质量影响) (默认),不写力的模式的时候就是这个(持续力,用质量)2.Impulse(一个瞬间冲击力,受质量影响)(瞬间力,用质量)
3.Acceleration(可持续的加速度,不受质量影响)(持续加速度,不用质量)
4.VelocityChange(一个瞬间速度变化,不受质量影响)(瞬间加速度,不用质量)

(2)MovePosition(新的位置(V3)):这里新的位置(V3)是transform.position+dir(移动的v3向量方向)*speed*Time.deltaTime

(3)Velocity:直接设置物体的速度(不用考虑质量)(注意这是一个属性,速度有方向和大小,所以是直接用v3矢量直接赋值表示速度的方向和大小),经常用来做人物的跳跃和移动

void Run()//这是奔跑移动函数
    {
        float moveDir = Input.GetAxis("Horizontal");
        lookDirection = moveDir;乘上

//这里如果Run放在update中最好是在speed后乘上Time.deltaTime
        Vector2 playerVel = new Vector2(moveDir*speed,M_Rigidbody2D.velocity.y);
        M_Rigidbody2D.velocity = playerVel;
    }

void Jump()//这是跳跃函数
    {      
        if (Input.GetKeyDown(KeyCode.K))
        {
            Vector2 jumpVel = new Vector2(M_Rigidbody2D.velocity.x, jumpspeed);
            M_Rigidbody2D.velocity = jumpVel;
        }   
    }

注意这里的所有V3向量在2D平面游戏中都可以变成V2向量

Unity中人物移动的几种方式相关推荐

  1. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  2. mysql 执行cmd,mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  3. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  4. es重建字段类型_关于elasticsearch中更新数据的几种方式

    作为一个成熟的框架,Elasticsearch里面提供了丰富的操作数据的api,本篇我们就来学习一下在es中更新数据的几种方式. (一)更新文档 (1)部分更新: java api: ` HashMa ...

  5. Django中Model继承的三种方式

    Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...

  6. java直接调用复制文件,java中文件复制的4种方式,java文件的复制

    java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...

  7. android获取自定义属性,android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...

  8. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  9. UE4学习-在虚幻编辑器中打开VS的三种方式

    文章目录 方式一 方式二 方式三 在虚幻编辑器中打开VS的三种方式 方式一 在文件浏览器这里,选择C++类,然后在文件夹内,找到一个和截图中类似的图标,双击,即打开vs,并在vs中打开这个类的代码. ...

最新文章

  1. 深度学习框架大战,我该选哪个?
  2. 卡尔曼滤波器中的Q,R
  3. python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...
  4. MySQL的IFNULL函数
  5. 四边形可以分为几类_四边形有几种类型
  6. android json转字符串数组,转换字符串到json数组出错
  7. 二阶振荡衰减 matlab,基于Matlab/Simulink的二阶控制系统仿真研究
  8. 织梦dedecms转WordPress方法(脚本一键转换)
  9. 新入职了一个卷王,一来就把性能提升4倍,这谁受的了~
  10. 重构(Refactoring)概要描述
  11. 数据结构上机实践第三周项目3- 求集合并集
  12. 九度OJ 1133:学分绩点 (加权平均数)
  13. NMEA0183格式GPS数据详解
  14. Java开发工程师如何做好职业规划和成长路线
  15. 工业相机IO口控制STM32输出PWM波
  16. 从底层谈webgis原理设计与实现(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理...
  17. 地铁刷手机 android版,北京地铁全线支持刷安卓手机乘车 附攻略!
  18. WordPress网站屏蔽后台搜索词广告-奇它博客
  19. 什么是文件管理软件?你为什么需要它?
  20. 笔记本拆c面_继续拆解 C面下方还藏有玄机_神舟 战神GX8 PRO_笔记本评测-中关村在线...

热门文章

  1. ADC的过采样与欠采样
  2. 修改app实现,设为手机桌面(安卓)
  3. 157、在系统中查找重复文件
  4. XPS格式轻松处理!Aspose.Page即将支持C++语言平台!
  5. adroid再谈如何将android studio项目转换成eclipse
  6. iphone6s gpu Android,iPhone 7 GPU性能首曝:安卓全家被虐哭!
  7. 吃鸡登录界面一直服务器维护,绝地求生正式服停机维护到几点?吃鸡进不去怎么办?...
  8. ECharts 饼图实现自定义标签包含图标icon(圆形图标,矩形图标)
  9. TensorRT(10):python版本安装
  10. mysql中字符串和时间相互转换的方法