二、移动方式
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是物体的速度属性,直接改变则可以瞬间影响物体运动状态。