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になったらゲームオーバー画面が出て、ボタンを押すと初めからやり直せるようになりました。
コメント