首页 理论教育完善功能及细节-虚拟现实理论基础与应用开发实践的实际成果

完善功能及细节-虚拟现实理论基础与应用开发实践的实际成果

【摘要】:在先前的PlayerShoot中我们改变一句代码。图8-236设置完成后Apply的效果图8-237EnemyHealth脚本图8-238EnemyHealth脚本图8-239PlayerShoot代码修改图8-240SetTrigger设置图8-241Trigger设置完成图8-242给怪物的Prefab添加EnemyHealth及刚体+碰撞体图8-243怪物被扣血2)动画事件假如你在试验的时候发现报了类似这个错误。图8-247添加变量图8-248StartSinking方法的添加这时候单击运行可以看见怪物死亡,并且下沉了。

1)完善射击效果

新建一个空物体,作为被攻击到的效果点,添加ParticleSystem组件,参数如图8-234和图8-235所示。

图8-234 新建空物体

图8-235 添加空物体的组件及参数设置

从Prefabs文件夹中选择一只怪物,拉到场景中,将刚刚做好的空物体拖到怪物身上,调整位置好位置,完成后单击Apply按钮(见图8-236)。

其他的怪物做法相同,打开EnemyHealth,代码与之前的PlayerHealth相似(见图8-237和图8-238)。

在先前的PlayerShoot中我们改变一句代码(见图8-239)。

其中SetTrigger类似之前的SetBool,我们在Animator面板中添加变量,因为任何状态都有可能转换到死亡状态,所以我们如下设置(见图8-240):

设置好Trigger,以及Death状态的动画,做法和先前的都一样(见图8-241)。

给每个怪物的Prefab加上EnemyHealth和刚体+碰撞体(见图8-242)。

做好之后运行,可以在生成的怪物看,打中怪物会有特效,怪物也可以被正常扣血了(见图8-243)。

图8-236 设置完成后Apply的效果

图8-237 EnemyHealth脚本(1)

图8-238 EnemyHealth脚本(2)

图8-239 PlayerShoot代码修改

图8-240 SetTrigger设置

图8-241 Trigger设置完成

图8-242 给怪物的Prefab添加EnemyHealth及刚体+碰撞体

图8-243 怪物被扣血

2)动画事件

假如你在试验的时候发现报了类似这个错误(见图8-244)。(www.chuimin.cn)

图8-244 错误报告

这里就要提到“动画事件”这个概念了,选中怪物的fbx,找到这个界面(见图8-245)。

图8-245 选中怪物的fbx

因为这是Unity的官方教程样本,里面的资源已经制作好,所以有动画事件,选择Death动画,再选下面的event(见图8-246)。

图8-246 选择Death及其下的event

可以看到这里有StartSinking这个事件,因为我们还没有写任何代码响应这个事件,所以报错。那么我们补全这个事件。

打开EnemyHealth,添加代码。

先添加几个变量(见图8-247)。

添加方法StartSinking(注意名字不要写错),如图8-248所示。

图8-247 添加变量

图8-248 StartSinking方法的添加

这时候单击运行可以看见怪物死亡,并且下沉了(见图8-249)。

发现了一个小bug,有的时候怪物死亡还会滑动一段时间,这是在还没有被destroy时候,寻路组件还会起作用,加上一点代码,修补一下这个bug,并且怪物死亡突然消失看起来也很奇怪,加上一个下沉的时间显得自然一些(代码见图8-250)。

Tips:创建边界。有的时候一不小心就跑出了地图,这个明显是不行的,我们加入边界。创建一个cube,并放到地图边界处,去除掉多余的component(见图8-251)。

四边都用这个方法做好(见图8-252)。

运行,可以看到主角不会再掉下去啦。

图8-249 怪物死亡并下沉

图8-250 添加下沉时间脚本

图8-251 去除多余的component

图8-252 主角不会掉