【笔记】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的移动(也适用相机)。

猜你喜欢

转载自blog.csdn.net/lelevon/article/details/127371338