unity官方案例--坦克大战(四)

首先将我们的视图坐标系设置为Pivot,而不是Center,这一节我们将对坦克的血量进行设置


首先创建一个Slider使用GameObject>UI>Slider

选择EventSystem对象,在Standalone Input Module组件中将Horizontal Axis属性改为HorizontalUI,将Vertical Axis属性改为Vertical Axis改为VerticalUI。选择Canvas对象,在Canvas Scale组件中将Reference Pixels per Unit的只 改为1.将Canvas对象的Canvas组件将Render Mode改为World Space。将Canvas对象拖入到Tank对象中,使其成为Tank的子对象。选择Canvas,在RectTransform组件当中改变Position(0,0.1,0),将Width和Height改为3.5,将Rotation改为(90,0,0),将HandleSliderArea删除掉,同时选中Slider、Background、Fill Area、Fill,然后点击Anchor面板下拉按住Alt建选择右下角的组件。


unity官方案例--坦克大战(四)_第1张图片
Anchor面板

选择Slider对象,在Slider对象中不选择Interactable。将Transition变为None,将Max Value和Value改为100.将Slider该名为HealthSlider。选择Background对象,利用Image组件旁边的小圆钮将Source Image图片改为HealthWheel。选择Color将alpha(A)改为80。选择Fill对象,将SourceImage也用同样的方法改为HealthWheel.将alpha(A)改为150,将Image Type改为Filled,将Fill Origin改为Left,不选择Clockwise。

在Prefabs文件夹中找到TankExplosion,拖入到Hierarchy,在TankExplosion对象中增加AudioSource组件,在Audio Clip中找到TankExplosion并加入,不选择Play On Awake.点击Apply更新prefab,然后删除Hierarchy面板中的TankExplosion对象。

将Script/Tank下面的TankHealth脚本放到Tank对象当中,然后双击进行编辑,脚本主要实现三个功能:

1.设置坦克受到攻击时,降低血量。

2.根据坦克的血量更新UI

3.坦克不活动。

下面我们在Tank对象中创建一个叫Tank_Healths脚本,首先创建一个SetHealthUI()的函数,用于设置UI的血量,之前先定义几个变量

public float m_StartingHealth=100f;//血条初始值

public Slider m_Slider;//调用HealthSlider,将该对象 拖入到面板中

public Image m_FillImage=Color.green;//显示血满时的颜色,为绿色

public Image m_ZeroImage=Color.red;//显示血消耗的状态,为红色


private float m_CurrentHealth;//当前值

private void SetHealthUI(){

  m_Slider.value=m_CurrentHealth;//血条值为当前值;

m_fillImage.color=Color.Leap(m_ZeroHealthColor,m_FillHealthColor,m_CurrentHealth/m_StartingHealth);//线性插入颜色

}

在定义一个函数

private void OnEnable(){

 m_CurrentHealth=m_StartingHealth;//重设坦克血量值

SetHealthUI();//重设UI

}

定义一个函数TakeDamage(float amount),当坦克受到攻击时,调用此函数

public void TakeDamage(float amount){

m_CurrentHealth-=amount;

SetHealthUI();改变血条的值

}

private void Awake(){

m_ExplosionParticles=Instantiate(m_ExplosionPrefab).getCompond();

m_ExplosionAudion=m_ExplosionParticles=.GetCompont();

m_ExplosionParticles.gameObject.SetActive(false);//设置爆炸对象为不活动

}

点击Apply,保存游戏场景。

你可能感兴趣的:(unity官方案例--坦克大战(四))