美文网首页
Unity 官方教程 Survival Shooter (六)

Unity 官方教程 Survival Shooter (六)

作者: 迷途小路 | 来源:发表于2018-11-15 18:41 被阅读0次

    现在我们添加一个怪物死亡的动画,在hellephantController中添加一个State,如下

    添加一个参数Dead

    给Death这个State赋值

    给指向Death的连线进行设置,我们改动红框中的,类似的另一个AnimatorController也进行这样的修改。

    在代码enemyhealth.cs中修改

    即当生命小于0时,播放怪物的死亡动画。

    试了一下,有3个问题:1.有个报错、 2、死的怪物还在跟着主角跑  3、死的怪物挡住了子弹。我们现在解决

    一、

    我们在模型里点击这里

    原来这里有个StartSinking的方法需要补全,打开EnemyHealth.cs

    在里面添加一个publicStartSinking()方法,再运行就不报错了。

    这个方法在代码里没有调用的地方,我们肯定可以想到就是在模型里点击出的AnimationEvent里执行的,注意这个方法只执行一次。我们加入以下内容:

    Rigidbody.isKinematic参数为true时表示该物体不受其他的物理控制,只能通过直接设置位置、旋转、缩放来控制。这样设置后就不会被其他的怪物推着走了。

    设定一个标志位isSinking,表示正在下沉中,update()方法中加入下沉的移动。然后在2s后摧毁它。

    再次运行,死的怪物还是跟着主角走,且还是不下沉,原因是它还处于自动寻路的状态,我们再加上这样的内容:

    我们获取capsuleCollider,设置isTrigger,即可让子弹穿越;提出Death()方法,让代码更整洁;然后取消导航。

    结果有这个错误:

    有错误没关系,原来是我们把自动寻路取消后,EnemyMovement.cs里的 nav.SetDestination (player.transform.position);方法还在执行,因此我们要让它只有在怪物还没死的时候才执行就好了。

    注意这里调用了currenHealth这个变量,因此在EnemyHealth.cs中,这个变量要为public的。

    再试一次,没有错误了。

    我们的游戏越来越细致了,但是现在主角还是可以钻进障碍物或者干脆推到墙外面躲起来,这对小怪兽来说不公平。我们需要给障碍物加上collider,加上哪一种collder就要根据障碍物具体的形状来了,即准确的表现出阻挡的效果,又不会消耗太多性能。我们以Stool这个障碍物为例,由于真正起阻挡作用的是四个腿,我们可以建立4个capsuleCollider。

    场景中的障碍物都设置好后,我们还需要四堵看不见的墙,来阻挡玩家。每个gameObject里加上boxCollider。

    障碍物都可以挡住子弹了,但是怪物的行为还是有点奇怪,比如撞上障碍物会被弹走,我们给它加上无穷大的刚体阻力和角阻力。

    再试一下,嗯,效果不错!

    相关文章

      网友评论

          本文标题:Unity 官方教程 Survival Shooter (六)

          本文链接:https://www.haomeiwen.com/subject/zmmjfqtx.html