プレイヤーのダメージ処理 ゲームオーバー リセット

Uncategorized

UnityでVampire survivers 風のゲームを作ろう!#0【連載目次】

最後にプレイヤーがダメージを受けるようにしていきます。

EnemyScriptに以下を追加してください。

  if (HP <= 0)//HPが0以下になったら消える
        {
            Player.gameObject.GetComponent<PlayerHP>().Heal(1);//敵を倒したら1回復
            Hitpos = this.transform.position;
            Hitpos.z = -2f;
            Hitmark.transform.position = Hitpos;
            Hitmark.GetComponent<SpriteRenderer>().enabled = true;//ヒットマーク画像を表示する☑
           
            if (statusdata.Boss == true&& clearbool==false)//ボスを倒した時一回だけ処理させる
            {
                clearbool = true;
                GameClear = GameObject.Find("GameClearUI");
                GameClear.GetComponent<Text>().enabled = true;

                StartCoroutine("GameClearfunc");
                for (int i=0;i<500;i++) { 
                    Instantiate(confetti, this.transform.position, transform.rotation);
                }
                Debug.Log("ゲームクリア");

            }
~省略~

    void OnTriggerStay2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
        {
            other.gameObject.GetComponent<PlayerHp>().Damage(statusdata.ATK);
        }
    }

・敵を倒したらボーナスとして主人公のHPを回復する

・主人公に触れた時にダメージを与える

という処理を書きました。

Player.gameObject.GetComponent().Heal(1);//敵を倒したら1回復

続いてPlayerHPScriptを変更していきます。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//UIを使用する際は宣言が必要

public class PlayerHP : MonoBehaviour
{
    [SerializeField] StatusData statusdata;
    public Slider hpBar;
    float HP;

    [SerializeField] GameObject GameOVerUI;
    [SerializeField] GameObject Player;
float currentTime = 0f;
    // Start is called before the first frame update
    void Start()
    {
        if (hpBar != null)
        {
            hpBar.maxValue = statusdata.MAXHP;
            hpBar.value = statusdata.MAXHP;
        }
        HP = statusdata.MAXHP;
    }

    void Update()
    {
        hpBar.maxValue = statusdata.MAXHP;
    }

    void Update()
    {
        hpBar.maxValue = statusdata.MAXHP;

  if (MUTEKI)
        {
            currentTime += Time.deltaTime;
            if (currentTime > 0.2f)
            {
                // Debug.Log("今は無敵です");
                currentTime = 0f;
                MUTEKI = false;
            }

        }
    }

    public void Damage(float damage)
    {
        if (!MUTEKI)
        {
        HP -= damage;
MUTEKI = true;//無敵状態にする
        Debug.Log(HP);
        if (hpBar != null)
        {
            hpBar.value = HP;
        }
        if (HP < 0)
        {
            Player.GetComponent<SpriteRenderer>().enabled = false;
            GameOverUI.SetActive(true);
            Time.timeScale = 0;
        }
	}
   }

    public void Heal (int heal)
    {
        
        Debug.Log(HP);
        if (hpBar != null)
        {
            if (statusdata.MAXHP >= HP) {
                HP += heal;
            }
            if(statusdata.MAXHP <= HP) {
                
            }
        }
        hpBar.value = HP;
    }

}

GameOverUIを作っていきましょう。
Create >Empty Object で名前をGameOverUIにします。
AddComponentでGraphic Raycasterを追加します。
これによって子要素のボタンがクリックできるようになります。

その下にCreate>UI>Imageを作ってどくろの画像を貼ります。

http://webtime.blog/?p=47
Scaleを10と10にしましょう。
GameClearUIを複製し名前をGameOverに変えて、GameOverUIの子要素にします。
TextをGameOver!に変えて、Colorを赤にします

Create>UI>Legacy>Buttonを作ります。
Retryと名前を変えます。

Pos X 0 Y -700
Width 600 Height 150にします。
Colorは5849FF
OutLineを追加して色をFFDE00にします。
X10とY-10に設定します。

子要素のTextのWidth 600 Height 120にします

Button以外のRaycast Targetはオフにします。
Retryと入力し、テキストサイズを100にします。
テキストは中央揃えにします。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Retry : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void OnRetry()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
        //SceneManager.LoadScene(0);
        Time.timeScale = 1;
    }
}

これをGameManegerに読み込ませてください。
そしてButton(Retry)のOnClickにGameManegerのオブジェクトをアサインします。
Retry.OnRetryを選びます。

これで敵と接触している間0.2秒ごとにダメージを受けるようになりました。

HPが0になったらゲームオーバー画面が出て、ボタンを押すと初めからやり直せるようになりました。

コメント

タイトルとURLをコピーしました