úterý 20. června 2017

Kreslící program v 10 řádcích v Unity


Unity je prostředí, které umí zhmotnit všechny vaše představy nebo alespoň ty, které se dají ukázat na obrazovce počítače. A na rozdíl od konkurenčních prostředí je Unity unikátní v tom, jak málo řádků kódu mu stačí na to, aby ona představa ožila. Například, chcete mít kreslící program? Uděláte ho v pauze na svačinu! Následující kód je kompletní program, s pomocí nějž si můžete nakreslit třeba ten trefný obrázek nahoře.

using UnityEngine;
public class PaintCasualCore : MonoBehaviour {
public GameObject stetecPrefab;
private GameObject stetec;
void Start () {
stetec = Instantiate (stetecPrefab, new Vector3 (0f, 0f, -1), Quaternion.identity); }
void Update(){
Vector2 pridatKam = Camera.main.ScreenToWorldPoint(Input.mousePosition);
stetec.transform.position = pridatKam;
if (Input.GetMouseButton (0)) {
var klon = Instantiate (stetecPrefab, new Vector3(pridatKam.x, pridatKam.y, 0), Quaternion.identity);
}
}
Do štětce "stetecPrefab" přidáte v inspektoru čtvereček z menu GameObject > Quad, přidejte světlo, možná i tabuli na kreslení a barvu pozadí v kameře a voilá. Máme základní Photoshop. No není Unity super?

zeal "the coder"

2 komentáře:

  1. Nooo. Jestli to správně chápu, tak při každým pohybu při stisknutém tlačítku myši se vytváří nový objekt, který se vykreslí na obrazovku (takže jich pak můžou být i tisíce?). Je super, že jde něco takového udělat v pár řádcích kódu, ale je to teda dost plýtvání systémovými prostředky. ;)

    OdpovědětVymazat
    Odpovědi
    1. Omlouvám se za opožděnou odpověď, komentáře jsem si všiml až teď. Je to tak. Po stisknutí myši se vyrobí kopie čtverečku (Quad mesh s černou barvou - vytvořený v Unity po jednom stisknutí v menu) a předá se mu aktuální pozice kurzoru myši. Samozřejmě, že by se to dalo optimalizovat: ignorovat přidání čtverečku, je-li na pozici už nějaký. Myslím ale, že zase tak náročné na systém to není. Je to instance stále stejného čtverečku a Unity umí Batching, tj. že by to nemělo mít větší nároky na grafiku. Snad. :) Náročnější obrázky jsem nezkoušel. https://docs.unity3d.com/Manual/DrawCallBatching.html

      Btw, jak je to na obrázku takové, že chvílemi to vypadá jako křída, je tam alfa kanál asi na 80 procentech. Dá se samozřejmě vytvořit štětec z nějakého obrázku a to ještě vyzkouším, i nějaké efekty by se tam daly zakomponovat (měnící se velikost štětce, rotace, ad.).

      Vymazat