Godot简易状态机
Godot做角色移动的时候,为了不让代码在一个脚本里扎堆强奸我们的眼睛和大脑,就需要做一些小优化,比如,用状态机。
本文将介绍如何在godot里控制角色移动动画根据移动方向而切换,并进行移动。
项目构成:
- 以kinematicBody2d为根节点的玩家节点
2.角色运动图集(玩家节点中的Sprite)
3. 控制角色运动动画的animationPlayer(玩家节点中的AnimationPlayer)
我根据图集创建了3个动画,分别是“待机(idle)”、“向左跑(runLeft)”和“向右跑(runright)”
4. 绑定在角色节点kinematicBody2d上的脚本dog_mov.gd(详情在下面)
5. 简易的状态机脚本Bh_dog_test.gd(详情在下面)
脚本介绍
1.god_mov.gd:
这个脚本并不控制动画切换,只是提供了动画切换的函数,方便调用:
其中aniPlayer是玩家节点中的AnimationPlayer
在脚本里我定义了角色移动方向和速度
定义了移动函数:
并在_physics_process(delta):里控制移动:
这个函数里的bhv就是状态机实例,下面会继续介绍,而上面这个脚本就介绍结束了,并没有什么太复杂的内容。
2. Bh_dog_test.gd
首先是定义变量和设置构造函数_init()
如果对funcref(obj,funcName)不熟悉的可以看这里:
[GODAPI][FuncRef]
[GODAPI][@GDScript.funcref]
当然你也可以用 signal 来做,目的是只调用一个函数,而函数内容根据条件变化。
obj就是dog_mov.gd实例,现在在dog_move.gd中就可以新建一个Bh_dog_test.dg实例了:
回到Bh_dog_test.gd,编码状态机:
状态机的状态转换示意图:
待机状态(idle):
奔跑状态(running)
再细分左右奔跑(runleft,runright)
以上就是角色动画切换的状态机,其实角色移动控制也可以写在这里面的,看个人喜好吧。
至于为什么只截图,不发代码,由于过于简单,大家还是自己动手打打吧(手动笑哭)。
最终效果
谢谢分享,刚学习游戏开发,有幸遇到godot,正好解决了我的程序复杂问题!