15. díl - Unity (C#) Android: Obarvení draka podle zdraví

C# .NET Unity 3D Unity (C#) Android: Obarvení draka podle zdraví

Tento videotutoriál navazuje na předchozí díl o programování her pro Android v Unity, kde jsem se zabýval výměnou hráče jako koule za animovaného draka.

V dnešním dílu 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ď?

Problémy?

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


 

  Aktivity (1)

Článek pro vás napsal vratislavino
Avatar
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.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Předchozí článek
Unity (C#) Android: Animace draka
Miniatura
Všechny články v sekci
Programování her v Unity3D v C# .NET
Miniatura
Následující článek
Unity (C#) Android: Pauza

 

 

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í!