现在我们进行怪物对玩家的伤害事件
先制作怪物伤害脚本EnemyAttack.cs如下:
通过一个标志位playerInRange来标志是否碰撞了,在碰撞的方法里去改变,在Update()方法里写入伤害的方法。接下来我们要给怪物加上碰撞体。
把3个怪物预制物放在场景中,
添加Sphere Collider作为伤害范围,即进入这个范围就会造成伤害,这个需要触发碰撞事件,所以 Is Trigger 勾上,
添加Capsule Collider作为碰撞体积,比Sphere Collider的范围小一些,怪物和怪物之间就不会叠到一起了,它的Is Trigger 不勾上。以最大的怪物hellephant为例:
另两种怪物的大小也调整到合适的,把EnemyAttack.cs脚本都挂上去,再点击Apply应用,最后删去场景中的怪物预制物。
试一下,OK。
接下来制作主角的血条,这里我们跟官方的教程不一样,提升一点点难度,我们做一个定在主角头上的血条
我们在生成一个Slider删去不用的部分,设置Canvas 如下:
通过改变Scale调整Slider到合适的大小,如下
再调整Slider到主角的头上,调整背景颜色为黑,滑动条颜色为红。
新建一个控制角色生命值的脚本PlayerHealth.cs 挂载在Player下,
这个TakeDamage方法就是在EnemyAttack.cs里怪物和玩家碰撞后触发的。我们再回到EnemyAttack.cs里
添加如下内容,获取到PlayerHealth脚本里的TakeDamage方法,在Attack()里触发。
运行一下,可以碰到怪物后会减少
我们现要让相机跟随主角。在Camera上挂载一个CameraFollow.cs
再将Player拖入脚本中
这样就可以让相机跟随主角了,但运行试了一下,总是感觉很生硬,官方加入了一个方法Vector3.Lerp,这个方法是让取差值,即让相机的位置取主角位置和相机当前位置的差值,Updae()方法改成这样
我们发现血条没有跟着主角,这里很简单,让在Canvas上挂载一个HealthFollow.cs的脚本,内容如下
将Palyer拖入其中,运行一下,不论主角面向哪里,血条一直跟随且面向屏幕,效果不错!