Unity开发备忘录000029:Bolt无代码做游戏——控制角色跳跃

一. 角色跳跃

1. 选择角色unityChan2D,并为其添加变量jump。

2. 在Graph窗口中创建如下流程图,以实现当玩家按空格键时,使角色跳跃。

其中,On Button Inout节点接收玩家按下空格键事件,一点按下空格键将事件消息传递给Add Force节点,该节点会给角色一个向上的力,而力的大小来自于Get Variable节点,该节点读取jump变量的值并赋给Vector2 Create节点的Y坐标(X坐标始终为0,保持不变),这样便实现了玩家按空格键,角色向上(Y的正方向)跳跃的功能。

二. 调用跳跃动画

以上的跳跃,角色仍然显得死板,没有任何动作,要想让角色跳跃时带有动作,就得调用角色的动画控制器。

从动画控制器的动画状态机可以看出,无论是角色站立,还是左右移动时都可以过渡到跳跃状态,其过渡的条件是Trigger变量Jump为真。

但Jump状态是一个复合状态,双击该状态节点,进入到复合状态的内部状态机(如下图),该状态机实现了角色初始跳跃、跳跃过程中、落到时三个动画的转换。

由于动画状态转换关系已设置好,在进行跳跃操作时,只考虑对上一层的动画状态机控制就可以。

为此,只要将Jump变量变为真(表示跳跃的事件被触发),即可实现跳跃动画的调用,于是流程图中加了一个Set Trigger节点,如下图。

三. 射线检测

虽然跳跃操作已经实现,但到目前为止还存在一个问题,就是当连续按空格键时,角色会连续向上跳,一直可以跳到艽霄云外,这显然是不合理的,为此我们需要一个射线检测功能,用其检测角色是否在地面上(或者砖块上),如果在地面上玩家按空格键,角色才能往上跳跃,否则(角色在空中)玩家按空格键角色不予理会。

1. 为地面加一个层名

为了让射线能够只对地面起作用,需要对地面的层起一个名字,就叫它ground吧。当然若想让射线对砖块也起作用,也可以将砖块的层名改为ground。

2. 在角色身上添加射线流程图模块

在此流程图中,用CircleCast检测半径为0.5的圆形范围内是否有碰撞器,将参数为ground的LayerMask节点连给CircleCast的LayerMask端,是为了让CircleCast只检测到的碰撞器是否在层名为ground的对象身上。CircleCast的Origin端与GetPosition相连,即取角色当前的位置为CircleCast的检测原点。

用节点RaycastHit 2D存储射线射到的对象的信息,所以CircleCast的出口与RaycastHit 2D节点的入口相连,用NotEqual节点判断其信息不为Null时,将信息传给跳跃流程块。

3. 修改跳跃流程块

此时,要对跳跃流程块进行修改,即添加一个Branch节点(连接见下图),它的作用是将射线检测的功能引入跳跃模块,只有射线检测为真是,玩家按空格键角色才会跳跃,否则角色不跳跃,从而解决了角色在空中跳跃的问题。

 

老孙头课堂:https://edu.csdn.net/lecturer/3617

上一篇:Unity开发备忘录000028:Bolt无编程做游戏——控制角色行走 

猜你喜欢

转载自blog.csdn.net/sunbowen63/article/details/100880321