Unity中人物移动的几种方式

这篇具有很好参考价值的文章主要介绍了Unity中人物移动的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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,当这个坐标系不写时,默认的为局部坐标系,这里可以看坐标系Unity中人物移动的几种方式

这是局部坐标系:Unity中人物移动的几种方式

这是世界坐标:Unity中人物移动的几种方式 

 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向量 文章来源地址https://www.toymoban.com/news/detail-414516.html

到了这里,关于Unity中人物移动的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Allegro在移动器件时,附着导线跟随器件移动的几种方式

    Allegro在移动器件时,附着导线跟随器件移动的几种方式

    Allegro在移动器件时,导线跟随器件移动的几种方式,具体介绍如下: 1、Options选项卡 Ripup etch:移动器件时,附着的导线移掉。 Slide etch:移动器件时,附着的导线随器件一起移动并优化导线。 Stretch etch:移动器件时,附着的导线随器件以任意角度移动。 未移动时器件的位置

    2024年02月03日
    浏览(9)
  • vue子组件调用父组件方法的几种方式

    一、直接在子组件中通过  this.$parent.event来调用父组件方法 父组件 子组件 二、在子组件里用 $emit 向父组件触发一个事件,父组件监听这个事件 父组件 子组件 三、父组件将方法传入子组件,子组件直接调用 父组件 子组件

    2024年02月12日
    浏览(10)
  • 【Unity天空盒的制作及使用】使用HDR图或六面图制作天空盒及天空盒的几种使用方式

    【Unity天空盒的制作及使用】使用HDR图或六面图制作天空盒及天空盒的几种使用方式

    前言 Unity工程中每次打开工程映入眼帘的蓝灰过渡的画面就是Unity默认的 天空盒

    2024年02月16日
    浏览(70)
  • Unity——数据存储的几种方式

    Unity——数据存储的几种方式

    PlayerPrefs适合用于 存储简单的键值对数据 存储的数据会在游戏关闭后依然保持,并且可以在不同场景之间共享,适合用于需要在游戏不同场景之间传递和保持的数据。 它利用key-value的方式将数据保存到本地,跟字典类似。然后通过代码进行保存、读取、更新操作。值得注意

    2024年02月03日
    浏览(13)
  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(12)
  • UNITY--读取Excel的几种方式

    UNITY--读取Excel的几种方式

    目录 一.DLL插件读取 1.1.Excel存放位置 1.2.使用示例 1.3.Excel格式  1.4.输出显示  1.5.所需插件 二.Excel转成Asset文件,再进行读取 2.1Excel文件存放位置 2.2 编辑模式生成Asset文件,并保存到指定位置  2.3创建ExcelRead脚本,读取Excel内容 2.4 创建数据存储脚本 2.5  编辑器生成Asset 与属

    2024年01月20日
    浏览(16)
  • 【笔记】Unity2D角色和物体移动的几种方法

    在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记 变量声明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移动速度var speed=2; ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。 #键盘输入,这里举一个只x轴上移动的例子,y轴同

    2023年04月08日
    浏览(13)
  • Unity按钮事件的几种绑定方式

    Unity按钮事件的几种绑定方式

    许久没有写C#代码了,对于一些东西自己给整忘了,在此记录下,方便以后自己查阅 获取到按钮组件,我是将代码挂载在其父节点上。 在代码中获取此按钮,并对他就进行绑定。一般都是使用的这类情况。 在脚本中写一个public函数,作为按钮的监听函数,在按钮的Inspector面

    2024年02月11日
    浏览(8)
  • vue父子组件之间的传参的几种方式

    这是最常用的一种方式。通过props选项,在父组件中传递数据给子组件。在子组件中使用props声明该属性,就可以访问到父组件传递过来的数据了。 子组件向父组件传递数据的方式。在子组件中使用emit方法触发一个自定义事件,并通过参数传递数据。在父组件中监听这个事件

    2023年04月24日
    浏览(34)
  • Unity中获取游戏对象的几种方式

    Unity中获取游戏对象的几种方式

    在学习如何获取物体和组件时先明白说明什么是物体,组件和对象。 物体:unity中在层级显示的东西都可以叫做物体 组件:unity中提供了大量已经写好的组件,比如刚体,碰撞体等,自己 编写的脚本也是一种组件类 对象:挂载到物体上的脚本是一个实例化的组件,也就是一

    2024年01月17日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包