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

### 回答1: 您好,我可以回答这个问题。Unity2D角色移动可以通过编写脚本来实现。您可以使用Input.GetAxis函数获取水平和垂直输入,然后使用Transform.Translate函数将角色移动到新的位置。您还可以使用Rigidbody2D组件来实现更流畅的移动。希望这可以帮助您。 ### 回答2: Unity2D角色移动可以通过以下几种方式实现: 1. 使用刚体组件(Rigidbody2D):将刚体组件添加到角色对象中,然后通过代码控制刚体的速度(rigidbody2D.velocity)或者力(rigidbody2D.AddForce)进行角色移动。可以通过键盘输入或者触摸输入来控制角色移动方向。 2. 使用Transform组件:直接通过修改角色对象的Transform组件中的position属性,来改变角色的位置。可以使用键盘输入或者触摸输入来控制角色移动方向。 3. 使用Translate方法:在更新角色移动的函数中,使用Translate方法来改变角色的位置,可以通过键盘输入或者触摸输入来控制角色移动方向。 4. 使用CharacterController组件:将CharacterController组件添加到角色对象中,然后通过代码控制CharacterController的Move函数来改变角色的位置。可以通过键盘输入或者触摸输入来控制角色移动方向。 需要注意的是,以上方法都需要在Update函数中进行角色移动的操作,并且要根据游戏需求进行相应的优化,例如添加碰撞检测、地图边界限制等。另外,角色移动过程中还可以结合动画、音效等来提高游戏的表现力和用户体验。 ### 回答3: 在Unity 2D中,角色移动可以通过几种不同的方法来实现。其中最常用的方法是使用Rigidbody2D组件来控制角色移动。 首先,需要在角色对象上添加Rigidbody2D组件。然后,可以通过编写脚本来控制角色移动。以下是一个简单的示例脚本: ``` using UnityEngine; public class PlayerMovement : MonoBehaviour { public float moveSpeed = 5f; // 角色移动速度 private Rigidbody2D rb; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); // 获取水平方向的输入 float moveVertical = Input.GetAxis("Vertical"); // 获取垂直方向的输入 Vector2 movement = new Vector2(moveHorizontal, moveVertical); // 构建角色移动的向量 rb.velocity = movement * moveSpeed; // 设置角色的速度 } } ``` 在这个示例中,我们首先获取用户的水平和垂直输入,并将其构建为一个向量。然后,通过将该向量与移动速度相乘,我们得到了角色的速度。最后,我们使用Rigidbody2D组件的velocity属性来设置角色的速度。 通过调整moveSpeed变量的值,可以改变角色移动速度。你也可以根据自己的需求来修改脚本,以满足不同的移动需求,如斜向移动、限制移动范围等。 以上就是使用Rigidbody2D组件来实现Unity 2D角色移动的简单示例。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值