首先将我们的视图坐标系设置为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建选择右下角的组件。
选择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<ParticlesSystem>();
m_ExplosionAudion=m_ExplosionParticles=.GetCompont<AudionSource>();
m_ExplosionParticles.gameObject.SetActive(false);//设置爆炸对象为不活动
}
点击Apply,保存游戏场景。