80 % bodů zdarma na online výuku díky naší Letní akci!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

19. diel - Unity (C #) Android: Zafarbenie draka podľa zdravie

V minulej lekcii, Unity (C #) Android: Animácie draka , som sa zaoberal výmenou hráčov ako guľa za animovaného draka.

V dnešnom tutoriál upravíme opäť hráča. Drak sa bude zafarbovať podľa svojho aktuálneho zdravia.

Video

Úprava HealthScript

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

V skripte bola zmenená návratová hodnota z void na int a prepísané na verejnú (public), aby mohla do PlayerCollisi­onScriptu vracať aktuálnej ž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

V skripte bola pridaná funkcia na tónovanie draka. Obarvování je založené na percentuálnom miešanie dvoch farieb (jej zložiek).

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;
    }

}

Ako hra vyzerá teraz?

Problémy?

Ak máte nejaké otázky, neváhajte sa opýtať v komentároch, alebo mi napísať do správ.

V budúcej lekcii, Unity (C #) Android: Pauza , pridáme možnosť hru zapauzovať.


 

Predchádzajúci článok
Unity (C #) Android: Animácie draka
Všetky články v sekcii
Tvorba 2D arkády pre Android v Unity
Článok pre vás napísal vratislavino
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
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 (1)

 

 

Komentáre

Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!