1.Creating the Combat Module
主要介绍:
战斗框架和具体实现
具体实现:
该教程的战斗框架。
Attack仅定义包含一个int名为Damage和一个bool名为IsCritical的类。
AttackDefinition定义攻击所需数值比如范围暴击几率等,并返回Attack类型方法计算确定最终damage和iscritical,类似ItemDefinition_SO,player和enemy通用。
IAttackable为接口,内含一个方法,表示所有使用该接口的类在被攻击时做些什么,比如生命值减少,播放被攻击动画和音效等等。此教程里是发送Log显示攻击对象名称和攻击值。player和enemy通用。
Scripts文件夹下新建文件夹Monobehaviours和ScriptableObjects,新建脚本Attack,作用是定义Attack类的type,这个type包含一个int Damage,一个bool IsCritical。这两个值只能在类内定义,类外只读。
然后打开在Beginner Programming: Unity Game Dev Course(5)- Creating a Character Stat System教程里提到的CharacterStat脚本修改,获得character当前的基础damage和抗性。注意Character在教程里player和enemy共用。
接下来在ScriptableObjects文件夹下新建脚本AttackDefinition,它继承自ScriptableObject。该脚本定义Attack行为需要的基本数值,包含了一个通过基本数值计算最终damage,并传出上面定义的Attack类型的damage和isCritical。
然后在项目里新建AttackDefinition,并命名为DemoAttack作为Player的Attack类型,在此处先不挂载,我们继续写脚本。
新建脚本IAttackable脚本,它是一个接口,用于之后测试并显示Attack的对象名称及具体数值。
Monobehaviours文件夹下新建脚本AttackedDebug,此例用来被攻击后显示Log。比如生命值减少,播放被攻击叫声,动画之类都可以写在此处。同样player和enemy都可共用。
场景里新建一个Cube作为被攻击测试对象,挂上Rigidbody,Layer选择Clickable,挂上刚写的脚本AttackedDebug
然后打开之前教程Beginner Programming: Unity Game Dev Course(4)- Swords and Shovels Character Controller and AI写的MouseManager脚本修改,为了改变攻击时的光标样式,以及把点击对象传递到攻击者。
先新建Unity事件
然后定义事件
修改点击方法
然后修改同教程里的HeroController脚本,用来计算攻击值并触发被攻击者身上的OnAttack方法,这个方法是一系列被攻击后的逻辑,此例只显示log。
回到Unity,在MouseManager上触发HeroController上新写的方法
然后把之前建的AttackDefinition拖入Hero