Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 16 - Unity (C#) Android: Obarvení draka podle zdraví

V minulé lekci, Unity (C#) Android: Animace draka, jsem se zabýval výměnou hráče jako koule za animovaného draka.

V dnešním tutoriál upravíme opět hráče. Drak se bude obarvovat podle svého aktuálního zdraví.

Video

Úprava HealthScript

Ve skriptu byla změněna návratová hodnota z void na int a přepsána na veřejnou (public), aby mohla do PlayerCollisi­onScriptu vracet aktuální život.

using UnityEngine;
using System.Collections;

public class HealthScript : MonoBehaviour {

    int health = 100;
    float initSize;

    bool dead = false;

    // Use this for initialization
    void Start () {
        initSize = transform.localScale.x;
        health = 100;
        RefreshScore();
    }

    public int Hit(int damage)
    {
        if (dead)
            return 0;


        health -= damage;
        RefreshScore();

        if (health <= 0)
            Die();

        return health;
    }

    void Die()
    {
        dead = true;
    }

    void OnGUI()
    {
        if(dead)
        {
            if(GUILayout.Button("Restart"))
            {
                Application.LoadLevel(Application.loadedLevel);
            }
        }
    }

    void RefreshScore()
    {
        //transform.GetChild(0).guiText.text = "Health: " + health;

        Vector3 scale = transform.localScale;
        scale.x = initSize / 100 * health;
        transform.localScale = scale;
    }
}

Úprava PlayerCollisi­onScript

Ve skriptu byla přidána funkce k obarvování draka. Obarvování je založeno na procentuálním míchání dvou barev (jejích složek).

using UnityEngine;
using System.Collections;

public class PlayerCollisionScript : MonoBehaviour {

    public HealthScript healthScript;

    public Color fullColor;
    public Color deadColor;

    SpriteRenderer sr;

    void Start()
    {
        sr = GetComponent<SpriteRenderer>();
    }

    void OnCollisionEnter2D(Collision2D col)
    {
        if (col.collider.CompareTag("Stalag"))
        {
            GameObject stalag = col.collider.gameObject;
            stalag.SendMessage("React");
        }

        int currHealth = healthScript.Hit(20);

        Color c = new Color();

        float fr = fullColor.r - deadColor.r;
        fr /= 100;
        c.r = deadColor.r + fr * currHealth;

        float fg = deadColor.g - fullColor.g;
        fg /= 100;
        c.g = fullColor.g + fg * (100 - currHealth);

        float fb = deadColor.b - fullColor.b;
        fb /= 100;
        c.b = fullColor.b + fb * (100 - currHealth);

        c.a = 1;

        sr.color = c;
    }

}

Jak hra vypadá teď?

Zdrojákoviště Unity - 2D hry

Problémy?

Pokud máte nějaké otázky, neváhejte se zeptat v komentářích, nebo mi napsat do zpráv.

V příští lekci, Unity (C#) Android: Nové UI, zkusíme další způsob vytvoření menu.


 

Předchozí článek
Unity (C#) Android: Animace draka
Všechny články v sekci
Zdrojákoviště Unity - 2D hry
Přeskočit článek
(nedoporučujeme)
Unity (C#) Android: Nové UI
Článek pro vás napsal vratislavino
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Autor se věnuje programování v C#, především pak ve vývojovém prostředí Unity3D. Má asi pětileté zkušenosti s programováním a momentálně pracuje na připravované hře Azulgar: Beyond The Frontiers.
Aktivity