30天轻松学会unity自制游戏-修改Player程序

这篇要把上一篇制作的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


<<:  33岁转职者的前端笔记-DAY 13 图片格式及影音格式

>>:  Day 01 - 哇!!来到第四年参赛罗~~

Leetcode: 785. Is Graph Bipartite?

这题目最一开始要做的事情就是,搞清楚什麽是bipartite? 一张图具有bipartite的性质...

自动化 End-End 测试 Nightwatch.js 之踩雷笔记:select option

相信 E2E 一定有做过遇到这种需要选择的部分,结构大致上会长这样 <select class...

DVWA练习-Cross Site Scripting

还在学校上课的时候 某堂课的老师跟我们分享他在准备CEH的考试 老师示范了Cross Site Sc...

[Day24]DDL语句建立资料表

资料表的命名规则: 名称开头一定要是文字,第二个字以後才可以使用文字、数字或其他符号。 长度在1~3...

[铁人12:Day 29] 「AI 的未来十年」摘要 5:固有知识框架

知识表达 符号处理其中的一个关键技术是「知识表达 (knowledge representation...