這篇要把上一篇製作的HP條裝在Player身上,在裝之前先給Player有個死亡動畫,一樣把爆炸畫面拖曳到場景製作成動畫,好讓這動畫安裝在Player身上
開啟Player的Animator一樣給個bool名為die,把剛剛存好的爆炸動畫拉到Animator裡面,從any state給一條動畫線過去,設定die為true啟動,畢竟是死亡動畫撥放完畢就結束了
現在開啟Player的程式
要在最上面的using裡面多加一條
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// using UnityEngine.UI才能使用UI系統裡的資料,未加就不能使用UI裡圖檔…
using UnityEngine.UI;
public class PlayerControl : MonoBehaviour
{
private Animator anim;
private Rigidbody2D rig;
[SerializeField]float speed = 5f;
[SerializeField] GameObject bullet = null;
//序列化Hp先給個20滴
[SerializeField] float hp = 20f;
//序列化HpMax一樣給個20滴
[SerializeField] float hpMax = 20f;
//序列化一個圖檔 hpBar預設空值(記得等等要在unity裡給他這個值)
[SerializeField] Image hpBar = null;
float horizontalMove;
private void Start()
{
anim = GetComponent<Animator>();
rig = GetComponent<Rigidbody2D>();
InvokeRepeating("Attack", 0.1f, 1.1f);
//血條的填充度=現在血量除以最大血量
hpBar.fillAmount = hp / hpMax;
}
private void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal");
}
private void FixedUpdate()
{
Move();
}
void Move()
{
rig.velocity =
new Vector2(horizontalMove * speed, rig.velocity.y);
if (horizontalMove > 0.2f)
{
anim.SetBool("right",true);
}
if (horizontalMove < -0.2f)
{
anim.SetBool("left", true);
}
if(horizontalMove < 0.2f && horizontalMove > -0.2f)
{
anim.SetBool("right", false);
anim.SetBool("left", false);
}
}
void Attack()
{
Instantiate(bullet,transform.position,Quaternion.identity);
}
//觸碰器碰到物件
private void OnTriggerEnter2D(Collider2D collision)
{
//如果(碰到的物件標籤為"EnemyBullet")
if (collision.tag == "EnemyBullet")
{
//現在血量扣5滴
hp -= 5f;
//血條的填充度=現在血量除以最大血量
hpBar.fillAmount = hp / hpMax;
//如果(血量小於等於0)
if (hp <= 0)
{
//動畫系統的die為true(將撥放死亡動畫)
anim.SetBool("die", true);
//0.5秒後刪除此物件(死亡動畫約0.5秒)
Destroy(gameObject,0.5f);
}
}
}
}
改好程式記得剛剛設定Player的HPbar,可以用旁邊的圈圈選擇,也可以直接從場景的Hp拖曳進來(不要給成背景圖唷~)