Zimní výprodej Kotlin týden
Pouze tento týden sleva až 80 % na e-learning týkající se Kotlin
40 % bodů zdarma díky naší Zimní akci!

Lekce 19 - 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

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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ď?

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: Pauza, přidáme možnost hru zapauzovat.


 

 

Článek pro vás napsal vratislavino
Avatar
Jak se ti líbí článek?
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.
Předchozí článek
Unity (C#) Android: Animace draka
Všechny články v sekci
Tvorba 2D arkády pro Android v Unity
Miniatura
Následující článek
Unity (C#) Android: Pauza
Aktivity (4)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!