下面是演示环节 我们在《慕课英雄》第三人称简易版中
为敌人对象绑定生命值管理脚本与攻击脚本 我们在
Unity 编辑器中打开了《慕课英雄》第三人称简易版项目
首先,我们给敌人对象绑定生命值管理脚本 我们在
Hierarchy 层级视图中选中敌人游戏对象 点击
Inspector 视图中的 Add Component 按钮 选择
Scripts 下的 Enemy Health 脚本 进行脚本绑定。
下面我们需要设置 Enemy Health 组件的
Enemy Hurt Audio 属性 我们将其设置为
Zombiehurt 表示敌人受伤时播放的音效
其次,我们给敌人对象绑定敌人攻击脚本 点击
Add Component 按钮 选择 Scripts
下的 Enemy Attack 脚本 完成脚本的绑定。
我们设置 Enemy Attack 脚本中的 Enemy Attack Audio
属性将其设置为 Zombieattack 表示敌人攻击时播放的音效
敌人的攻击需要使用触发器来检测是否满足攻击条件 我们为
Zombie 对象添加一个 Capsule Collider
组件 并勾选其 Is Trigger 选项,使其变为触发器
同时修改 Center 属性为
0 0.8,0.5
Radius 半径设置为
1 Height 高度设置为
2 当玩家进入敌人的触发器范围后
敌人会对玩家进行攻击。
下面我们进行游戏的预览
当敌人靠近玩家后,敌人将对玩家发起攻击
播放攻击动画与攻击音效,此时因为缺少 GameManage
脚本 敌人的攻击将不会减少玩家的生命值
此时我们可以使用键盘 J
实现玩家对敌人的攻击 敌人受到攻击后会后退,发出受伤的声音
敌人死亡后会播放倒地动画,然后消失
下面我们停止游戏的预览
接下来,我们讲解敌人生命值管理的脚本
Enemy Health,我们在 Project 视图中 选、 双击 Enemy Health 脚本
[空白_录音] 首先,我们在
Enemy Health 脚本中 声明了三个公有变量。
其中 health 表示敌人的生命值;value
表示玩家击杀敌人后获得的分数 enemyHurtAudio
表示敌人受伤时播放的受伤音效 我们在
start 函数中获取敌人的组件
使用 getComponent 函数获取敌人的
Animator,Collider 以及 Rigidbody
组件 然后,我们
在 Enemy Health 脚本中定义了一个 TakeDamage 函数
当敌人受到伤害时,将调用 TakeDamage 函数
实现敌人的受伤逻辑 首先,敌人的生命值
Health 将减少 其次
我们将在敌人的位置处,播放敌人的受伤音效 我们使用 AudioSource 类的
PlayClipAtPoint 函数 在敌人的位置播放敌人受伤的音效
最后,当敌人的生命值小于等于 0
时 表明敌人已经死亡,此时我们使用 GameManage
类的 Addscore 函数增加玩家的得分
我们设置 animator 对象的 applyRootMotion
属性为 true 表示敌人的移动与位移将受动画的影响
同时我们使用 animator 对象的 GetTrigger
函数 设置 IsDead 触发点 IsDead
触发后将播放敌人死亡的动画 接下来我们禁用敌人的
collider 组件 使其不会与其他物体发生碰撞
同时我们需要禁用 敌人受到的重力,这里我们通过
访问 rigidbody 对象的 useGravity 属性 将其设置为 false,来禁用敌人受到的重力
这样敌人就不会因重力而穿过地心系统 最后,我们使用
Destroy 函数 在三秒后删除敌人对象
接下来,我们讲解敌人攻击的脚本 我们双击
Project 视图的 Enemy Attack
脚本 在 Enemy Attack
脚本中 我们首先声明了三个公有变量,其中
damage 表示敌人攻击对玩家造成的伤害
timebetweenattack 表示敌人攻击之间的最小间隔
enemyAttackAudio 表示敌人的攻击音效
我们在 start
函数中 首先重置 timer 等于
0,表示 敌人与上次攻击的时间间隔为
0 然后
我们使用 getComponent 函数,获取敌人的 Animator
组件 与敌人的 Enemy Health 脚本组件
然后是 update
函数 我们在这里更新 timer
的值 使其叠加上一桢所花费的时间,time.deltatime
下面我们讲解 OnTriggerStay
函数 我们在 OnTriggerStay 函数中实现玩家攻击的逻辑
当有物体进入敌人的攻击范围时 OnTriggerStay
函数会被调用,若敌人的生命值小于等于 0 时
表示敌人已经死亡,此时其不具备攻击能力 我们使用
return 结束函数的运行 当敌人与上次的攻击间隔
大于敌人之间的最小间隔时,并且
进入敌人攻击范围的对象是玩家时,敌人将执行攻击逻辑
首先我们将 与敌人上次攻击的时间间隔
timer 重设为 0 其次,我们将
敌人的动画参数 Isattack 设置为
true 这样敌人就会在攻击时播放攻击动画
敌人攻击时会播放敌人攻击的音效 我们使用
AudioSource 类的 PlayClipAtPoint
函数 在敌人的位置播放攻击音效 若游戏管理类
GameManage 不为空,我们将使用 GameManage
类的 Player TakeDamage 函数实现玩家的扣血效果
下面,我们讲解 OnTriggerExist
函数 当有物体离开敌人的攻击范围时
将调用 OnTriggerExist
函数 若离开敌人攻击范围的物体时玩家时
我们使用 animator 对象的 Bool
函数 将 Isattack 动画参数设置为 false
此时,将停止播放敌人的攻击动画 现在我们回到
Unity 编辑器 选中 Hierarchy 视图中的 Zombie
对象 点击 Inspector 视图中的 apply 按钮
将修改应用到敌人的预置键 最后,我们点击
File 菜单下的 Save scene 按钮 保存我们的场景。
以上就是本节演示的全部内容