unity 基于体型格子寻路 unity找子物体_Big


Untiy之简单的生命值系统

今天给大家讲解的是通过简单的计数原理来实现一个简洁的生命值系统的一个功能。

1.首先第一步打开untiy,新建一个3D的空项目,新建一个地形,地形的新建可以观看我们之前的小教程Untiy之碰撞检测和 触发检测中的地形创建来完成。

地形做完之后我们先点击Hierarchy面板中的Create新建一个3D Object之中的Sphere小球作为我们的主物体,副物体就再次新建一个cube来充当。


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_02


unity 基于体型格子寻路 unity找子物体_unity 通过tag查找物体的子物体_03


这样我们的基础准备就完成了,接下来就是本节课的重点了,如何通过计数原理来实现一个简单的生命值系统。

2.首先我们给小球添加一个Riglbdady(刚体组件)这个咋们在前几次的小课堂中也说过,附加刚体组件后我们才可以自由操控小球运动,我们这节课运用一下之前碰撞检测的相关原理,之前碰撞检测是在碰撞一次之后物体就会消失,我们这次给它规定一下碰撞几次之后才会消失,以此来实现简单的生命值系统。


unity 基于体型格子寻路 unity找子物体_unity 通过tag查找物体的子物体_04


3.我们还是点击Project面板中的Create内的C# Script,新建一个C#代码文件,然后我

们给它改个命名为ONE。


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_05


4.双击代码打开vs2015界面,我们首先要给它声明一个公有变量的速度这样我们就能够让小球获得一个可以更改的速度,通过获取物体水平方向和垂直方向的轴以及实时更新物体位置,获取物体的Riglbdady(刚体组件)对其速度进行操控。代码如下图所示:


unity 基于体型格子寻路 unity找子物体_Big_06


5.返回到Unity界面,选中Hierarchy面板中的Sphere,会发现在原本挂的代码那出现了一个Speed,我们给它编辑一个值,保存之后,点击运行。


unity 基于体型格子寻路 unity找子物体_Big_07


unity 基于体型格子寻路 unity找子物体_Big_08


6.运行之后可以看到,小球在我们操控下进行一个自由运动。


unity 基于体型格子寻路 unity找子物体_unity 通过tag查找物体的子物体_09


7.返回编程界面,上次碰撞检测与触发检测给大家讲过一段编程,这次就是在上次的基础上进行新内容的增加。


unity 基于体型格子寻路 unity找子物体_碰撞检测_10


8.首先我们先定义一个生命值Health,然后我们要运用的是碰撞检测,先判断我们进行碰撞的这个物体是否是我们想要让它改变的物体(通过命名法和标签法进行判断),这次我们用标签法,如果被我们被碰撞的物体,它的标签Tag为pickup,然后给生命值(Health)一个初始值3,当物体被撞到的时候,生命值(Health)减一,如果生命值小于等于0,并且碰撞到的物体是我们想要让它消失的物体,那就执行销毁命令。


unity 基于体型格子寻路 unity找子物体_Big_11


unity 基于体型格子寻路 unity找子物体_Big_12


unity 基于体型格子寻路 unity找子物体_碰撞检测_13


unity 基于体型格子寻路 unity找子物体_Image_14


9.保存代码,返回到Unity界面中,选中Hierarchy面板中的Sphere,会发现在原本挂的代码那出现了一个Health,值为3


unity 基于体型格子寻路 unity找子物体_Big_15


unity 基于体型格子寻路 unity找子物体_Big_16


10.选中Cube,在右边的Inspector面板中,点击Tag,会出现一个列表,选中其中的pickup


unity 基于体型格子寻路 unity找子物体_Image_17


unity 基于体型格子寻路 unity找子物体_碰撞检测_18


11.点击运行,操纵小球撞向物体,被碰撞物体的生命值减一,再进行碰撞,生命值为零时,被碰撞物体消失。


unity 基于体型格子寻路 unity找子物体_unity 通过tag查找物体的子物体_19


unity 基于体型格子寻路 unity找子物体_Big_20


12.为了更直观的展现生命系统的变化,在Create面板中右键选择UI中的Image,为了更容易找到Image,我们点击界面上方的2D模式,使用移动工具(快捷键W)将Image移动到一个合适的位置。


unity 基于体型格子寻路 unity找子物体_Image_21


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_22


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_23


13.选择Assets面板中素材的位置,如果是新上传的图片,需要点击该图片,在右边Inspector面板中点击Texture Type,将图片类型选为Sprite(2D and UI),然后点击apply,如果图片已经是这个模式就不用点击apply。


unity 基于体型格子寻路 unity找子物体_Big_24


unity 基于体型格子寻路 unity找子物体_unity 通过tag查找物体的子物体_25


14.选中刚才创建的Image,在右边的Inspector面板中Image中有一个Source Image,将我们准备好的图片拖进去(当框变成蓝色时松手),场景中就会出现这个图片。如果图片大小比例不满意可以用缩放工具(快捷键R)进行调节。将血条移动到Cube正上方。将血条命名为Big。


unity 基于体型格子寻路 unity找子物体_Big_26


unity 基于体型格子寻路 unity找子物体_碰撞检测_27


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_28


unity 基于体型格子寻路 unity找子物体_Image_29


unity 基于体型格子寻路 unity找子物体_Image_30


15. 同样的方法,将血条中的血那张图片也放到该场景中,将血条经过移动和缩放工具放到图中位置,因为我们的Health是3,所以我们把血条复制另外两份(Ctrl+D),并将其拖到合适的位置,为了更好地识别,我们将这三个Iamge分别命名为one, two ,three。


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_31


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_32


unity 基于体型格子寻路 unity找子物体_Big_33


16. 血条做好之后我们需要返回vs2015当中对代码进行修改,使每触碰发生一次就消失一个小血条,使血条的呈现更加真实。这里我们可以通过if函数来实现这个功能,通过判断生命值Health的数值来使三个小血条分别消失。,其代码如下图。


unity 基于体型格子寻路 unity找子物体_Image_34


17.我们在修改完代码后回到untiy界面,单击Hierarchy面板中的Sphere,在其Inspector面板中的代码ONE中会发现多出了one,two,there三个空项目,我们就把Hierarchy面板中的one,two,there,分别挂载上去。


unity 基于体型格子寻路 unity找子物体_碰撞检测_35


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_36


unity 基于体型格子寻路 unity找子物体_碰撞检测_37


18.我们再次运行就可以看到小球Sphere在碰撞过cube之后就会使血条消失一小节。我们之后可以使血条和cube在生命值为零后延迟一段时间后消失。我们再次回到VS2015界面,在代码开始的地方声明一下血条Big,以及cube。然后定义一个消失函数SetDestroy,然后通过Invoke延迟一秒以后调用这个函数使cube和血条Big在生命值归零之后一秒消失。


unity 基于体型格子寻路 unity找子物体_Image_38


unity 基于体型格子寻路 unity找子物体_碰撞检测_39


19.我们回到untiy界面,单击Hierarchy面板中的Sphere,在其Inspector面板中的代码ONE中多出了Cube和Big两项,咋们和以前一样把Cube和Big挂载上去即可。


unity 基于体型格子寻路 unity找子物体_碰撞检测_40


20.最后点击运行,控制小球碰撞Cube,可以看到血条随着碰撞次数的增加而减少最后消失,血条完全消失后一秒之后Cube和血条一起消失。


unity 基于体型格子寻路 unity找子物体_Big_41


unity 基于体型格子寻路 unity找子物体_unity 基于体型格子寻路_42


unity 基于体型格子寻路 unity找子物体_Image_43


unity 基于体型格子寻路 unity找子物体_Big_44