iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Mobile Development

30天輕鬆學會unity自製遊戲系列 第 13

30天輕鬆學會unity自製遊戲-修改Player程式

  • 分享至 

  • xImage
  •  

這篇要把上一篇製作的HP條裝在Player身上,在裝之前先給Player有個死亡動畫,一樣把爆炸畫面拖曳到場景製作成動畫,好讓這動畫安裝在Player身上
https://ithelp.ithome.com.tw/upload/images/20210913/20140598KPfYlkVHFU.png
開啟Player的Animator一樣給個bool名為die,把剛剛存好的爆炸動畫拉到Animator裡面,從any state給一條動畫線過去,設定die為true啟動,畢竟是死亡動畫撥放完畢就結束了
https://ithelp.ithome.com.tw/upload/images/20210913/201405989XYLFM8yk6.png
現在開啟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拖曳進來(不要給成背景圖唷~)
https://ithelp.ithome.com.tw/upload/images/20210913/20140598rKOEIiWCks.png


上一篇
30天輕鬆學會unity自製遊戲-製作PlayerHP
下一篇
30天輕鬆學會unity自製遊戲-關卡場景製作
系列文
30天輕鬆學會unity自製遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言