Unity制作RPG游戏——按键输入与处理

对于一个RPG游戏,一个无法逃避的问题就是怎样获取输入并相应转化为适当的角色行为,我们都知道通过Input方法获取按键输入信息,并且可以通过rigidbody给角色速度,但是我们需要对按键的数据平滑,同时需要根据按键改变角色的方向等,只有这样才可以让我们的角色看起来更加灵活。下面部分我将介绍这个过程。

一、获取按键输入

先设计按键,在Inspector留下字段方便更改

Unity制作RPG游戏——按键输入与处理_第1张图片

tip1:获取输入的方式

 

通过这样的检测判断,可以得到向前(y方向)和向右(x方向)的速度,这样设计的好处是可以很快速的完成四个方向速度的计算以及速度的抵消(比如同时按下up和down,角色不会有y方向的速度),这样的可控性比较高,但是这样的获取的速度大小只有0和1两种值,因而还需要做插值。

tip2:对输入的速度做平滑插值

Unity制作RPG游戏——按键输入与处理_第2张图片

这里重新定义了两个速度,v_y和v_x目的是用他们来承载平滑之后的结果,这里使用的是Mathf中的smoothdamp函数来完成平滑插值的效果,使速度向目标速度以0.2f没帧的速度线性移动,注意这里的引用参数的目的是在每次计算后调用上次计算的值,所以不能定义成局部变量(否则会运动的越来越慢,详情可以看这个文章https://www.jianshu.com/p/8a5341c6d5a6)当然使用Mathf中的lerp函数也可以实现这个效果,但是对第三个参数t每帧要有改变。

tip3:方形转圆

速度的插值得到了,但是注意我们y和x方向速度取值范围都是0-1,那么45°的方向速度是根号二大于1,这样就不科学了(斜着走更快的问题在以前的很多老游戏中会出现),所以要对x和y进行变换,也就是进行椭圆映射,对xy坐标进行如下变化

x = x * \sqrt{1-y{2}/2}

 Unity制作RPG游戏——按键输入与处理_第3张图片

Unity制作RPG游戏——按键输入与处理_第4张图片

Unity制作RPG游戏——按键输入与处理_第5张图片

这样就得到了正确的值

tip4:计算速度的标量大小和速度的方向

Unity制作RPG游戏——按键输入与处理_第6张图片

Unity制作RPG游戏——按键输入与处理_第7张图片

计算这两值有什么意义呢?速度的标量大小用于给物体的角色施加朝前的速度,而速度的矢量用于调整角色的朝向,这是两个十分重要的参数,之前的计算的目的就是为了得到这两个值。

至此,PlayerInput脚本的基本参数已经设计完了,下面就是结合动画控制器,来实现运动。

你可能感兴趣的:(游戏开发技术)