首页 理论教育虚拟现实开发实践:Tanks生命条

虚拟现实开发实践:Tanks生命条

【摘要】:本小节的目的是制作Tank的生命条,也就是如图8-106所示的形式,有一圈绿色生命条包围在坦克的周围。图8-115TankExplosion预件设置完成以上改动后,接下来要思考一个问题,坦克的生命条UI界面有了,但还需要让它动态地减少,即在坦克受到伤害的时候会扣除生命值,那么该怎么实现呢?

本小节的目的是制作Tank的生命条,也就是如图8-106所示的形式,有一圈绿色生命条包围在坦克的周围。首先,我们确保Scene View是在Pivot状态下的,而不是Center状态(见图8-107)。接着,我们在Hierarchy根目录下创建一个Slider(Create→UI→Slider),接着会看到生成如图8-108所示的两样东西:

当创建一个UI元素时,Unity会自动为我们生成一个Canvas和EventSystem,而Slider则成为Canvas的一个子对象。接着,选中EventSystem,把里面的Horizontal Axis改为HorizontalUI,把Vertical Axis改为VerticalUI(见图8-109),这样做的意义是不与用户操作坦克移动的输入产生冲突。

图8-106 Tank的生命条

图8-107 Pivot状态下的Scene View

图8-108 创建Slider后的视图

接着,我们考虑由于生命条是围绕在坦克周围的,也就是该Slider是跟随坦克移动的,所以我们需要让该Slider成为Tank的一个子对象,这样他们的position就能同步了,操作很简单,把Canvas(而不是Slider)拖拽到Tank下,成为它的子对象。

然后,我们对Canvas的一些属性做出修改,如图8-110所示。

图8-109 Horizontal Axis设置

图8-110 Canvas属性修改

(1)修改Canvas的position值为(0,0.1,0);修改Width和Height为(3.5,3.5);修改Rotation为(90,0,0)。

(2)修改Canvas的渲染模式Render Mode为World Space。

(3)修改Canvas Scaler下的Reference Pixels Per Unit为1。

展开Canvas,对Slider重命名为HealthSlider,然后展开HealthSlider,有如下几个子元素:Background、Fill Area、HandleSliderArea。把HandleSliderArea删除,因为不需要用到滑动图标。接着,复选HealthSlider、Background、Fill Area和Fill,单击Anchor Presets,按住ALT选中右下角的选项(见图8-111)。

图8-111 选项选择

选中HealthSlider,做以下改动(见图8-112):①单击取消Interactable;②Transition选择为None;③Max Value选择为100。(www.chuimin.cn)

图8-112 HealthSlider参数设置

选中Background,做以下改动(见图8-113):①在Source Image中,选择图片资源为HealthWheel;②在Color中,把Alpha值改为80。

图8-113 Background参数设置

选中Fill(Fill是Fill Area的子对象),做以下改动(见图8-114):①Source Image,选择图片为HealthWheel;②在Color中,把Alpha值改为150;③ImageType改为Filled;④Fill Origin选择为Left;⑤取消选择Clockwise。

图8-114 Fill参数设置

接着,我们找到/Scripts/UI文件夹下的UIDirectionControl脚本,把它拖拽到HealthSlider下。我们来看看这个脚本的作用是什么?

既然坦克有生命值,那么当坦克的生命值降为0的时候,会发生什么?答案是会爆炸,那么我们就需要坦克爆炸的效果,素材已经为我们准备好了。在Prefabs文件夹下,找到TankExplosion预制件,把它拖 拽 到Hierarchy根 目 录。选 中TankExplosion,为 它 添 加AudioSource,AudioClip选 择 为TankExplosion,取消Play On Awake以及Loop,然后单击右上角的Apply,使得改动在Prefabs的预制件生效,然后删除在Hierarchy下的TankExplosion(见图8-115)。

图8-115 TankExplosion预件设置

完成以上改动后,接下来要思考一个问题,坦克的生命条UI界面有了,但还需要让它动态地减少,即在坦克受到伤害的时候会扣除生命值,那么该怎么实现呢?答案是我们需要一个脚本,对坦克的生命值进行控制。在/Scripts/Tank文件夹内找到TankHealth.cs文件,把它拖拽到Tank下,然后打开它,我们来编辑它。

编辑完毕后,要对其公有变量进行初始化(见图8-116)。最后,单击Tank中右上角的Apply按钮,使其应用到预制件中,保存当前Scene。

图8-116 公有变量初始化