System żyć w grze 2D

0

Cześć robię gre 2D w unity. Działa mi poruszanie gracza, skakanie oraz respawn po kolizji z obiektami powodującymi śmierć gracza. Chciałam dodać serduszka więc dodałam trzy obrazki do interfejsu UI oraz stworzyłam tablice w kodzie i dodałam tam te trzy obrazki. I póki co działa tak że usuwa jedno serce po kolizji, a chciałabym żeby drugie i ostatnie też się usuwały odpowiednio za drugą i trzecią śmiercią oraz po trzeciej śmierci żeby była możliwość wczytania innej sceny. Byłabym wdzięczna za pomoc bo zielona trochę w tym jestem.

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{
    private float horizontal;
    private float speed = 6f;
    private float jumpingPower = 8f;
    private bool isFacingRight = true;
    public Image[] heartImages;

    public float maxHealth = 3f;
    public float currentHealth;

    [SerializeField] private Rigidbody2D rb;
    [SerializeField] private Transform groundCheck;
    [SerializeField] private LayerMask groundLayer;

    private Vector3 respawnPoint;


    void Start()
    {
        currentHealth = maxHealth;

        respawnPoint = transform.position;
    }


    void Update()
    {
        horizontal = Input.GetAxisRaw("Horizontal");

        if (Input.GetButtonDown("Jump") && IsGrounded())
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpingPower);
        }

        if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f)
        {
            rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 1f);
        }

        Flip();
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(horizontal * speed, rb.velocity.y);
    }

    private bool IsGrounded()
    {
        return Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer);
    }

    private void Flip()
    {
        if (isFacingRight && horizontal < 0f || !isFacingRight && horizontal > 0f)
        {
            isFacingRight = !isFacingRight;
            Vector3 localScale = transform.localScale;
            localScale.x *= -1f;
            transform.localScale = localScale;
        }
    }



    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag == "Enemy")
        {
            transform.position = respawnPoint;


            Destroy(heartImages[heartImages.Length - 1]);

        }

    }


   
}
3

Skoro życia są liczbą całkowitą, to maxHealth i currentHealth powinny być typu int.

Kiedy gracz traci życie, to nie rób Destroy().
Zamiast tego użyj jednej metody z zestawu metod, który sobie napiszesz.

Napisz metodę SetHP(int value), RefreshHearts() oraz SubHP().

SetHP() będzie ustawiać maxHealth i currentHealth oraz wywoływać metodę RefreshHearts().

SubHP() będzie zmniejszać currentHealth o 1 i wywoływać metodę RefreshHearts().

RefreshHearts() będzie w pętli wyłączać wszystkie obrazki serc, a w następnej pętli będzie włączać tyle pierwszych serc, ile wynosi currentHealth.

heartImages[i].gameObject.SetActive(true);

1 użytkowników online, w tym zalogowanych: 0, gości: 1