• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BYDKUNITY 3D
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: no pro 2d prave chystaji celkem dost veci, jako specialni 2d svetla atd, kdyz jsem koukal na nejake previews, nevypadalo to zle. a ta tilemapa je mtysilm furt experimental, az ted ma byt full release.

    Ten unity package ma nejvetsi problemy s rozumnym sortovanim (coz je u iso vzdycky kapku problem), je to celkem otrava nastavovat, ale da se to pouzit, je tam celkem rozumne resena paleta pro kresleni mapy, bylo to vcelku rozumne, ale postrehl jsem, ze par lidi co s tim zkouselo delat neco vaznejsiho dost nadavalo. Vyhodou/nevyhodou je, ze se to da snadno kombinovat s cimkoli dalsim od sprajtu po 3d modely.
    Ten co linkujes podle popisu nebude imo pouzitelny pro pripad, ze bys mel 3d modely postavicek
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: toto vyzera celkom OK,
    2.5D Isometric engine - Asset Store
    https://assetstore.unity.com/packages/templates/systems/2-5d-isometric-engine-106321

    ale neviem na kolko je to lepsie ako to nativne riesenie z Unity. A ci sa do toho oplati investovat cas.
    Mozno v 2019.3 bude ich 2.5D ISO engine podstatne vylepsena :D , musim sa kuknut na release notes!
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    (lepsi reseni teda neznam, ale jsem si celkem jisty, ze na asset storu by se neco naslo)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: na podzimni Ludum Dare jsem zkousel unity tilemapu, ktera iso podporuje. Pouzit se to da, ale neda se rict, ze bych z toho byl uplne nadseny.

    Isometric 2D Environments with Tilemap - Unity Technologies Blog
    https://blogs.unity3d.com/2019/03/18/isometric-2d-environments-with-tilemap/
    SLASH
    SLASH --- ---
    Mate niekto tip na dobru game ISO engine pre unity? Ci je urcite najlepsie napisat si vsetko from scratch...
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    jj, taky mi to kdysi chvilku trvalo (byt ne moc dlouho, protoze jsem podobne reseny komponentovy system mel ve svem vlastnim enginu)
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: no pravdupovediac este som to tak neskusal, ale asi by to tak slo :D
    hmm, teraz mi to pride take jasne a samozrejme ked si to povedal a pozeram na ten tvoj priklad z dola :

    go = new GameObject("jmeno");
    go.transform.SetParent(do hierarchie, pokud nema byt v rootu);
    go.AddComponent(blablabla) co chces.

    ale vtedy ked som to prvy krat riesil (a bol som zvyknuty na vytvaranie new MovieClip() z ActionScriptu) mi celkom nebola jasna tato Unity architektura zalozena na flexibilnych komponentoch, takze ma to az tak nenapadlo.

    To je proste nevyhoda ked prides z ineho prostredia a IDE, ze si tak nejak automaticky hladas podobne cesty a postupy ako v starom prostredi.

    A chvilku to trva nez sa aklimatizujes a robis to "Unity way" :)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: a AddComponent ti nestaci?
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: ah, sory zle som sa vyjadril .. myslel som vytvorit instanciu novej class ktora extenduje Monobehaviour.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    (akorat u tech singleton like objektu je potreba davat pozor na reference... pokud je to neco co drzi furt, tak dontdestroyonload ve startupu a drzet ho furt, pokud je to neco, co je singleton style manazer pouze pro danou scenu, uz je tam potreba cistit a davat pozor)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: nechapu na co potrebujes extendovat gameobject. GO je jen holder v hierarchii, nic moc vic. pokud chces mit kodove implementovany factory pattern, tak proste

    go = new GameObject("jmeno");
    go.transform.SetParent(do hierarchie, pokud nema byt v rootu);
    go.AddComponent(blablabla) co chces.

    prefaby muzes instancovat z resources (ktere jsou ale bohuzel udelane celkem hloupe a pro spoustu veci nevhodne - ale pro nejake spravcovske prefaby, manazery atd je to v pohode...

    obvykle veci typu jeden prefab ktery funguje jako spravce neceho dalsiho delam jako modifikovany singleton


    mujprefab Instance {
    get{
    if (_mujprefab==null)
    _mujprefab = Instantiate(Resources.Load("cesta")).GetComponent(mujprefabtype)()
    return _mujprefab;
    }
    }
    SLASH
    SLASH --- ---
    Jedna z veci ktore ma trochu stvu na Unity je ze neexistuje moznost ako vytvorit nejaky Custom Game object (via new MyCustomGO() ktory bude jednoducho extendovat GameObject, a teda bude mat vsetky lifecycle events a moznost pridavat komponents atd..

    Hlavne kvoli tomu aby sa tam dali jednoducho predavat variables (napriklad priamo do contructor-a) , a tiez aby sa vsetky prefab nemuseli linkovat do nejakeho managera ktory ich potom vytvara.

    Toto sa zrejme da riesit iba cez Instantiate (prefab..) , (cize taka svojska unity implementacia factory pattern) aspon teda ja som nenasiel lepsi sposob. Ak viete.. som same ucho!
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    2019.2 se kterou jsem si hral na podzim mi prisla celkem v pohode, ale je fakt ze jsem s ni delal jen nejake drobnosti, po te co jsem vynechal vsechny novejsi od 5.6. (kvuli licenci a faktu, ze prechod z 5 na dalsi vypadal kvuli breaking changes jako priserne peklo.)

    Ale zkusenosti s verzemi 5 mi celkem jasne rikaji, ze je potreba si setsakra rozmyslet, jestli prejit na novejsi a nezustat radeji jen u patch releases.

    kdyz zbezne procitam ty komentare.... mam sto chuti switchnout se pro sve vlastni hratky na petku :D (a nebyt 64 bitu a VR podpory, tak bych klidne sel zpatky do ctyrky)
    JAACOB
    JAACOB --- ---
    SHIGORBIRDMAN: Prave bacha na 2019 - dost lidi breci, ze aktualni releasy jsou fest v hellu. Rozhodne bych aspon pro nejaky serioznejsi projekt nezkousel upgrade pred releasem LTS a mozna i tak dvou patchu - mohlo by z toho byt mrzeni...

    2019.3 is now in the final stages of beta testing - Unity Technologies Blog
    https://blogs.unity3d.com/2019/12/12/2019-3-is-now-in-the-final-stages-of-beta-testing/
    (+ comment sekce!)

    SLASH: Bez zalohy NIKDY nezkousej upgradnout!
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: rozhodne zkopiruj cely adresar. I minor upgrady muzou rozbit vsechno mozne, automaticke opravy zmen ne vzdy zafunguji.
    Myslim ze tentokrat tam zadna breaking change neni, ale... upgrade unity me mnohokrat kvalitne vyjebal :) (uznavam, delam s nim od verze 2...)
    SLASH
    SLASH --- ---
    Uz sa vam niekomu stalo ze po upgrade na novu verziu Unity sa vam rozhasil projekt na ktorom ste mesiace pracovali? Da sa to riesit?

    Pytam sa preto , lebo cakam ze vyjde 2019.3 a su tam niektore features na ktore sa tesim, ale zaroven pouzivam niektore externe kniznice, a obavam sa problemov zo spatnou kompatibilitou.

    A viem ze ked sa projekt otvori v novej verzii, musi sa prekompilovat a uz sa nebude dat otvorit v starej verzii ci ano?

    Doporucujete si ten projekt pre istotu zalohovat? Pouzivam na zalohovanie Collab, ale nebude lepsie cely projekt adresar skopirovat pred tym nez ho otvorim v 2019.3ke?
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    asi takhle - out by mel byt o neco rychlejsi, automaticky bych pouzil ten. (mimo jine teda proto, ze tuply v unity dlouho nebyly a ja tim padem nejsem moc zvykly pouzivat novejsi featury c#... a nektere z nich jako linq jsou v unity vetsinou dost blby napad). plus si nejsem jisty, jak by to bylo s alokaci u tuplu, out int je urcite bezpecny (a kompilator to muze vratit v hodne optimalni forme).

    takze neco jako

    public delegate void GetItemsDelegate(out int p1, out int p2);
    public GetItemsDelegate getItemsRemaining;


    a pak

    int p1, int p2;
    getItemsRemaining(out p1, out p2);
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: super, dobre vediet, prepisem si to.. akurat teraz riesim taky problem mozno by si vedel spravnu odpoved.

    Na konci levelu, ked to user nestihne dohrat v stanovenom case sa objavi game over / time up screen, kde bude mimo ine veci informacia typu:

    Found: 12/15 Items

    tych 12 a 15 su premenne ktore potrebujem vytiahnut z triedy "GuessItemPanel". Ale aby to nebolo take jednoduche, :( tento panel sa Instantiatuje z inej triedy (UIManager) ktory je volany z hlavnej game class.
    Ten UIManager class ale ma referenciu na ten GuessItemPanel.

    V ramci OOP principu encapsulation (black box behaviour) by som potreboval aby vsetky tie classes nevedeli toho o sebe viac ako je to nevyhnutne. Takze chcel som to vyriesit tak ze

    1) na mojej TimeOutPanl class bude
    public Action getItemsInfo; //toto je field nie method

    2) na GuessItemPanel bude metoda ktora vrati hodnoty (12,15)
    napr private ? getItemsRemaining()
    return {itemsRemaining:12, itemsTotal:15} //pseudocode

    3) Ui manager to vsetko prepoji
    cize potom ako vytvori Prefab, potom tu Action z GuessItemPanen pripise k field getItemsInfo na TimeOutPanel..

    Hlavny problem je v spravnej implementacii, ako to typovo osetrit aby ta metoda getItemsRemaining vracal 2 parametre
    ako zadefinovat ten Action field aby tam bol spravny type
    Ako sa potom dostat k tym premennym

    Podla toho co som si googlil, sa na to daju vyuzit 2 veci :

    Tuple alebo out

    Na obidve som ale zatial nenasiel priklady napriklad na ako to spravne zadefinovat pre Action field, alebo v pripade out ako to zadefinovat pre method return type?

    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    kdyz pouzijes dictionary(int,bool ) , budes to mit bez alokace a rychlejsi (a bezpecnejsi :)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: hashtable vzdycky boxuje - protoze jako klic se pouziva hash z objektu. dictionary s intem jako klic neboxuje a je afaik pro vetsinu use cases lepsi nez hashtable... pokud teda nutne nepotrebujes mapu, ktera nema specifikovany typ ani pro klice, ani pro obsah
    Kliknutím sem můžete změnit nastavení reklam