Unity 2d - 脚本 - 基础脚本详解(二) - 移动方式

二、移动方式


1、改变目标位置

//获取用户水平按键,包括(←、→、A、D)
public float MoveSpeed;
h = Input.GetAxis("Horizontal");
transform.position += new Vector3(h*MoveSpeed, 0, 0);


Input.GetAxis("Horizontal") 此行代码获取的值会从0慢慢递增到目标值,所以人物的速度是缓动的

这样的后果是人物看起来很滑,即使松开按键之后,依然会滑行一段时间,调整线性阻尼也无法完全消除这个效果。

缺点:

(1)人物有滑行状态

(2)如果移动速度过快,人物会出现闪现,影响整体流畅感

2、给物体施加刚体力

Rigidbody2D player = GetComponent<Rigidbody2D>();
 
//获取用户水平按键,包括(←、→、A、D)
public float MoveSpeed;
h = Input.GetAxis("Horizontal");
player.AddForce(new Vector2(h*MoveSpeed,0));


这种方法用了刚体力学原理,整个移动逻辑变得复杂了起来,物体移动会收到质量与摩擦力的影响,同时也会受到其他外力的影响,比如向上走的过程中,被右边来的子弹击中,人物会直接向左上飘去。

3、设定物体速度

Rigidbody2D player = = GetComponent<Rigidbody2D>();
 
h = Input.GetAxisRaw("Horizontal");
player.velocity = new Vector2(h, 0);


这里使用了新的方法 Input.GetAxisRaw("Horizontal"),照比上边的代码多了一个Raw,他们的区别是,GetAxis是从0缓慢增加到1,期间他的值可能为0.4 -> 0.5 -> 0.6 ...这样增加的,所以物体的速度也会有递增的过程,停止之后会有滑行状态。

而GetAxisRaw则没有增加的过程,按下就是0->1,松开就是1->0,人物会瞬间启动,瞬间停止,velocity是物体的速度属性,直接改变则可以瞬间影响物体运动状态。

猜你喜欢

转载自blog.csdn.net/wswdxs/article/details/106351480
今日推荐