赞
踩
通过改变Transform组件里的position的值来改变角色的位置是一种简单的方法
- h = Input.GetAxis("Horizontal");
- transform.position += new Vector3(h, 0, 0);
大概的代码如上,通过Input获取到方向键的值直接加到transform.position上,这样做的好处是简单直观,然而有一些缺点
解决办法是添加一个移动速度变量来控制,于是代码就变成了:
- public float MoveSpeed;
- h = Input.GetAxis("Horizontal");
- transform.position += new Vector3(h*MoveSpeed, 0, 0);
通过在unity面板改变MoveSpeed的值来改变移动速度。
解决办法暂时没有想到,也许把移动速度控制在适合范围内可以解决这个问题。
突然的移动位置不真实,而且没有一个速度渐变的过程,解决办法同(2),或者可以添加一个渐变的过程来解决,不过这样就显得比较麻烦。
接下来我介绍第二种办法来解决上面的第(3)个问题。
通过控制角色的刚体速度来控制角色的方法,也是一种较为直观的方法,代码如下
- Rigidbody2D rig;
- rig = GetComponent<Rigidbody2D>();
-
- h = Input.GetAxis("Horizontal");
- rig.velocity = new Vector2(h, rig.velocity.y);
通过Input获取到方向键的值直接加到刚体速度上,这里要注意一个问题,为什么赋值还有一个rig.velocity.y呢?
这是因为我们2D游戏的移动,通常还要添加跳跃动作,如果跳跃动作也是通过赋值速度或者力的话,要注意保持原来y轴上的速度不变。
但是这种方法也是缺点的。
摩擦力会使你的速度比你预设的值稍微小点,是因为刚体存在摩擦力的设定,虽然可以通过取消摩擦力来控制,但是这样会让操作手感完全改变。不过这个也可以看做优点,因为更加的真实,接近现实世界,不同游戏有不同的设定。
这点很好理解,因为你给的是刚体的速度,如果你按键停止了,那就会做有初速度受到摩擦力的直线运动了(瞬间回到高中物理课堂)。不过这个可以通过代码来解决。
我以为通过直接改变velocity.x的值可以停下,结果发现不行,因为h还没有清0,于是又把h给赋值为0,发现还是不行。猜测可能是因为刚体的惯性问题,问题先放着。
这种方法比较普遍,也是我推荐使用的角色移动脚本的编写。第三种可以通过给刚体一个力来移动,不过实在过于硬核,就不实现出来了,如果以后有机会接触这种操作手感,再来完善本文。
通过给刚体施加力是一种简单的方法,也较为接近现实世界。
- Rigidbody2D rig;
- rig = GetComponent<Rigidbody2D>();
-
- public float jumpForce;
-
- if (Input.GetKeyDown(KeyCode.Space))
- {
- rig.AddForce(new Vector2(0, jumpForce));
- }
通过敲击空格直接给刚体一个力来实现跳跃的效果,jumpForce可以在unity面板调试,这种方法非常简单直观,不过跳跃有些细节,比如跳跃检测,目前的代码并没有实现,简单来说就是角色可以无限跳,而且力是可以叠加的,如果角色可以二连跳,三连跳等,在跳跃瞬间多次敲击空格就可以以几倍的加速度跳出去,又是一个物理问题,给角色施加一单位的力,两单位,三单位等等,所展现出来的物理效果是完全不同的,而且速度过快会有穿模问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。