Joker的ARPG开发笔记

最近一方面在学javaScript,一方面在运营萤光网站,一方面忙于学业,一方面在学Unity,每当晚上我就会去看Joker的ARPG游戏开发教程,其中有一些好的思路,我觉得可以记录一下。

之前我把鬼哥(up鬼鬼鬼ii)的ARPG课程看完了,再来看Joker的,对比一下有一些值得提的地方。


一、有限状态机控制玩家和敌人AI

之前看鬼哥的课,全程是用Animator窗口来控制角色状态,要进行复杂的连线。后来我看了Joker的教程,还有一个印度人复刻原神的教程,感觉他们在这点的做法要更好——完全利用有限状态机去控制角色状态,不管是玩家、还是敌人。

其实用不用Animator,都能实现相应的功能,没有哪个更好。Animator连线好处是便于理解、更直观,缺点是状态多起来就难以维护了;有限状态机优点是逻辑清晰,只需要考虑转换什么状态就可以了,本质上和Aniamtor窗口其实一模一样,缺点是难以理解。对初学者,我建议还是要用Animator窗口连线,便于理解;学一段时间后再试着去理解有限状态机的概念。

Joker的有限状态机,最开始我是根本看不懂,现在觉得他的有限状态机写的很好。我见过比较好的有两种有限状态机框架,第一种是up主打工人小祺的继承MonoBehaviour的有限状态机,配置了一个黑板,供我们配置参数;还有就是Joker的有限状态机了,不继承MonoBehaviou也很方便。

二、伤害检测

鬼哥的课针对的是拳打脚踢,在动画里加一个判断类事件,每次攻击时调用这个判断类函数,函数里进行检测:如果敌人与我的距离夹角合适,触发我们事先写好的Action,从而让敌人执行受伤逻辑。

Joker的课程是,专门做一个武器层,加两个动画事件,开始攻击和结束攻击,当开始攻击时启用武器碰撞体、写一个OnTriggerStay的函数,声明一个List,如果武器与带有“Enemy”标签的物体接触、并且List为空时造成伤害,同时往List里添加东西,这就保证只能触发一次伤害逻辑。等到了结束攻击的动画事件时,把List清空就好了。