Godot 3.3
在关于 Godot 的角色场景的开发中,如果角色的功能并不复杂时,我们可以不那么注意 Godot 场景的设计。而当项目越来越大,场景的节点越来越多,一个场景中的功能越来越多时,我们的场景、代码的量与代码逻辑会变得特别凌乱复杂。这个时候我们需要对 Godot 每个节点和脚本进行分类与设计。
比如我们要设计一个复杂的角色,首选要对他的功能进行一个分类,例如我对一个角色节点的分类,如下:
将每个功能分一个层级,这样不至于一个节点中的功能过多,代码过多,TypeLayer
节点负责做 每层节点的中转站,处理器。根节点(Player
节点)用于对外直接调用方法的一个节点。
比如 Controller
节点的一个控制器需要对节点进行移动,或其他动作的操作,那么就连接发出的信号到这个 TypeLayer
节点上,判断与处理,之后调用其中的 Canvas
层进行播放移动动画,进行动画处理,然后调用 父节点(KinematicBody2D
类型节点)的 move_and_slide
方法进行移动等操作。
又比如 Collision
碰撞处理层 节点,这一层主要判断碰撞相关, Area2D
的 body_entered
信号是连接到 Collision
节点上的,如果 Area2D
发现了敌人(这个区域的作用看你自己如何去定义了,我是做为发现敌而添加的),那么 Collision
会发出一个自定义的信号 found_enemy
(发现敌人)的信号,并且这信号连接到 TypeLayer
节点的一个方法上,然后由 TypeLayer
进行处理,调用 Controller
中的控制的方法。
这样做下来,整个场景的节点、逻辑清晰,且方便管理与扩展,每个分类节点下的子节点也可以继续向下一直分类。
也许你有能好的思路,那也欢迎提出你的想法,在评论区交流。
脚本都写在控制层吗?
不是的,我这种想法是“对不同的功能进行分类,一种类型的功能就添加一种类型的节点”,控制层就只是用来控制角色的行为的,而不是全部都在这里进行处理。比如技能层,那么在“控制层”中添加判断逻辑进行判断调用“技能层”中的技能的时机,然后在“控制层”中进行调用“技能层”的技能中的 cast_skill (施放技能) 方法