3. díl - Unity (C#) Android: Generování stalagů

C# .NET Unity 3D Unity (C#) Android: Generování stalagů

Tento videotutoriál navazuje na předchozí díl o programování her pro Android v Unity, kde jsme se zabývali hráčem. Dnešní díl se zabývá mapou, její grafikou a generováním.

Video

Generování mapy

Přidávám skript, který je použit ve videu, pokud se vám ho nechce opisovat :) Je to skript pro generování levelu. Prozatím je to finální verze. Oproti předchozímu dílu má hned několik úprav.

using UnityEngine;
using System.Collections;

public class StartScript : MonoBehaviour {

    public GameObject[] stalagPrefabs;
    public float distance = 10;
    public float offset = 10;
    public int count = 2;

    public float minHeight;
    public float maxHeight;

    public float minWidth;
    public float maxWidth;


    public Vector3 lastPos;

    void GenerateSet()
    {
        for (int i = 0; i < count; i++)
        {
            Vector2 pos = new Vector2();
            pos.x = lastPos.x + (2*distance) + offset + i * distance;

            int r = Random.Range(0, 2);
            int rotateIndicator = 1;
            if (r == 0)
            {
                pos.y = 4.5f;
            }
            else
            {
                pos.y = -4.5f;
                rotateIndicator = -1;
            }
            GenerateStalag(pos, rotateIndicator);
        }
    }

        // Use this for initialization
        void Start () {
        lastPos = transform.position;
        //GenerateSet();
        }

    void GenerateStalag(Vector2 p, int rotateInd)
    {
        GameObject g = Instantiate(stalagPrefabs[Random.Range(0, stalagPrefabs.Length)], p, Quaternion.identity) as GameObject;
        Vector3 theScale = g.transform.localScale;

        theScale.y = Random.Range(minHeight, maxHeight) * rotateInd;
        theScale.x = Random.Range(minWidth, maxWidth);
        g.transform.localScale = theScale;

        Bounds b = g.GetComponent<SpriteRenderer>().bounds;
        p.y -= b.size.y / 2 * rotateInd;

        g.transform.position = p;
    }


    void OnTriggerEnter2D(Collider2D col)
    {
        if(col.CompareTag("Player"))
        {
            GenerateSet();
            lastPos = transform.position;
            lastPos.x += count * distance;
            transform.position = lastPos;
        }
    }
}

Jak hra vypadá teď?

Problémy?

Pokud máte nějaké otázky ohledně nastavování, 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?
Celkem (3 hlasů) :
3.666673.666673.666673.66667 3.66667


 



 

 

Komentáře

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Výborné tutoriály (y). Určitě fandím a těším se na další díly ! :)

Odpovědět 7.7.2014 22:02
To co se zdá být nemožné, je vždy možné.
Avatar
danar2004
Člen
Avatar
danar2004:

Ahoj, v první řadě díky za tutoriál.

Mám dvě věci:

  1. Ve videu je zmiňováno sekání kvůli kolizi stalagů s bordery. Mě se nezdá, že by se to dělo, zkouším stalagy posouvat mimo bordery i do nich a nepozoruji rozdíl. Je možné, že to je verzí Unity, nebo něčím takovým?
  2. Občas se mi stává, že když mi player dopadne na spodní border, tak propadne dolů. Ale je to jen někdy. Když ho nechám "jet" stále po borderu a neskáču, tak nikdy nepropadne, děje se to jen po dopadu z výšky a jen někdy. Nevím, co s tím :(
 
Odpovědět 27.9.2015 14:31
Avatar
vratislavino
Redaktor
Avatar
Odpovídá na danar2004
vratislavino:

Ahoj :-)
Jsem rád, že se tutoriály líbí :-)
Jedničku nevím, ale s dvojkou dokážu pomoci. Edge Collider je pomalejší na detekci kolize. Doporučuji použít box collider 2D :-)

Odpovědět 27.9.2015 14:40
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
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.

Zobrazeno 3 zpráv z 3.