【发布时间】:2019-04-18 12:29:59
【问题描述】:
嘿,当我的玩家受到伤害并失去生命值时,我想让他无敌。 ATM 我不能让我的玩家无敌,而且如果他与多个损坏结构发生碰撞,他会受到比预期更多的伤害,我希望他失去 20% 的生命值,然后在 2-3 秒内无敌。
这是附在我的损坏结构上的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoseHealth : MonoBehaviour {
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
HealthBarScript.health -= 20f;
}
}
}
这是给我小时候贴在我“空心”上的画布上的 FullHearts
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class HealthBarScript : MonoBehaviour {
Image FullHearts;
float maxHealth = 100f;
public static float health;
// Use this for initialization
void Start () {
FullHearts = GetComponent<Image>();
health = maxHealth;
}
// Update is called once per frame
void Update () {
FullHearts.fillAmount = health / maxHealth;
if (health == 0)
{
Application.LoadLevel(Application.loadedLevel);
}
}
}
ATM 我在我的 playerscript 上有这个,它不工作所有其他脚本都在工作,但只需要它只需要失去一颗心,无论玩家是否击中多个结构,然后无敌有时间恢复而不击中结构:
if (!invincible)
{
if (col.gameObject.tag == "enemy")
{
// HealthBarScript.health -= 20f;
// health -= 20; // subtract 1 form your total health
invincible = true; // makes this whole function unusable since invincible is no longer false
new WaitForSeconds(3);
invincible = false; // makes this whole function reusable since invincible is false again
}
}
【问题讨论】:
-
胡乱猜测,应该是“yield return new WaitForSeconds(3);”吗?
-
但是我需要一个协程,因为它只是一个布尔值,所以我必须让它做一些事情,这样播放器就不会被某种方式损坏,但我想因为我让这个函数不可用,所以它会是无敌的或?所以也许我会尝试协程:D
-
现在怎么样了,它会做到以下几点:1)让玩家无敌。 2)立即创建一个代表(只是代表,它自己不做任何事情!)等待三秒钟的对象。 3) 立即使玩家能够再次受到伤害。 4) 继续其他任务