Заставить игрока использовать фиксированное количество здоровья? - PullRequest
0 голосов
/ 15 ноября 2018

Эй, я хочу сделать своего игрока невидимым, когда он получает урон и теряет здоровье.Банкомат Я не могу сделать своего игрока невидимым, а также, если он сталкивается с несколькими структурами урона, он получает больше урона, чем предполагалось. Я хочу, чтобы он потерял 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);
        }
    }
}

БанкоматУ меня есть это на моем проигрывателе сценария, который не работает, все остальные сценарии работают, но просто нужно, чтобы он потерял 1 сердце, независимо от того, ударил ли игрок по нескольким структурам и затем невидим, чтобы успеть восстановиться и не поразить структуру:

  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
            }


        }

1 Ответ

0 голосов
/ 15 ноября 2018

Итак, я только что сделал простую «игру» о столкновениях, используя предоставленный вами метод, и все работает отлично.Но теперь, когда я смотрю дальше, я вижу некоторую избыточность в том, что вы предоставили, и ваш «ответ» немного сбивает с толку.

Но ваш первый сценарий показывает, что каждый раз, когда урон наносит урон игроку, он наносит урон.

private void OnTriggerEnter2D(Collider2D collision)
        {
            if (collision.CompareTag("Player"))
            {
                HealthBarScript.health -= 20f;
            }

        }

И каждый раз, когда «Игрок» сталкивается с «врагом», он выполняет непобедимую проверку, которая должна работать.(Предполагается, что комментарии удалены).Но, как говорится в комментариях, урон игрока не наносит удар по структуре урона, но всегда (независимо от непобедимого) урон игроку наносится структурой.

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
            StartCoroutine(Invincible());                   // makes this whole function reusable since invincible is false again
        }


    }
}


IEnumerator Invincible()
{
    if (invincible == true)


    {
        yield return new WaitForSeconds(2);
        {


            invincible = false;
        }
    }

Но при повторном ударе перед непобедимымпроверка истекает, сценарий на противнике все еще наносит урон.

У вас есть два сценария, наносящих урон, и только один выполняет непобедимую проверку.

Избавьтесь от разрушающего сценария на структурах, отметьте всеструктуры правильно, прокомментируйте сценарий на игроке, и вам будет хорошо идти.Или вы можете оставить сценарий на структурах урона и просто проверять, неуязвим ли игрок, делая этот бул статичным.

Также вы могли бы легко ответить на свой вопрос, используя стандартное использование Debug.Log ("что, черт возьми, происходит").Debug.Log должен быть вашим лучшим другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...