【笔记】Unity2D角色和物体移动的几种方法

在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记

变量声明:

位移向量var dir=new Vector3(deltax.deltay,deltaz);
移动速度var speed=2;

ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。

获取位移

#键盘输入,这里举一个只x轴上移动的例子,y轴同理
var xmove=Input.GetAxis(“Horizontal”);
dir=new Vector3(xmove,0,0)

var是隐式声明,也可以根据实际的改为Vector3、int什么的。

1、 直接改变物体位置。

1.1 在update方法中transform.position+=dir;
1.2 在update中transform.Translate(dir);

以上两种方式本质是一样的,translate实现的就是transform.position+=dir;

以上两种办法要考虑帧数不定的问题,所以位移向量dir要乘以速度speed再乘以Time.deltaTime();即

transform.Translate(dir*speed*Time.deltaTime());

2、 移动到某个位置

2.1以某个速度到达某个位置

#需要一个目标位置
Vector3 targetPos;

transform.position=Vector3.MoveTowards(transform.position,targetPos,speed*Time.deltaTime);

更平滑一点

#需要一个目标位置
Vector3 targetPos;
#一个平滑时间
var smoothTime;
#一个速度向量
Vector3 velocity=Vector3.zero;

然后

transform.position=Vector3.SmoothDamp(transform.position,targetPos,speed);

这里不需要乘以一个增量时间,因为这个方法的底层实现已经考虑到了。

2.2在时间t内到达某个位置

Transform.position=Vector3.Lerp(transform.position,targetPos,smooth);
#smooth是持续时间和运行时间的比值,一般小于1(传参的时候传个大于1的数也不会报错),持续时间是指从开始像位置移动到当前的时间,运行时间是你期望的到达所需时间。

以上方法缺点,在Unity中可能会出现抖动,或者会穿过刚体(Lerp会);

所以接下来还有刚体的移动方法。

3.加力。(即有加速度,速度会变化)

#获取刚体
Rigidbody2D rb=GetComponent();
#定义一个力
var force;
#定义力的方向
Vector3 dir;(dir可以根据输入赋值更改)
rb.AddForce(dir*force);

这个方法,速度会加快。碰到刚体不会抖动。

4.恒定速度

#将速度向量赋给物体速度,速度向量可以根据键盘输入获取
rb.velocity= new Vector3(deltax,deltay,deltaz);

以上是2d的移动(也适用相机)。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值