• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BYDKUNITY 3D
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: no ved prave... sice nie v tomto release , ale v dalsom chceme pouzit normalne 3D postavy rignute a rozpohybovane cez https://www.mixamo.com/
    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
    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: dik za reply!

    shownItemsList je definovany ako Hastable, nie som si isty aky je rozdiel medzi Hastable a Dictionary a ktory sa viac hodi pouzit kedy. ten sceneIDX je int.

    Takze tam zase dochadza k boxingu v zmysle ze sa ten int musi konvertovat na object zrejme?

    Kdezto key v Dictionary je stale int?

    A nie, toto nie je prilis casto volany kod, v ziadnej slucke, ani v unity lifecycle event, len ked user pouzije tento specialny Power-up, cize tak max 3-8 x za hru.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    (jinak... pokud je to nejaka metoda co se vola jen tak obcas, tak bych to asi neresil. sem tam nekde nejaky bajt je v klidu, pruser nastava, kdyz mas neco v timeticku nebo jinde kde se to vola fakt casto)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: jak je definovany shownItemsList? k boxingu by nemelo dochazet, pokud je to dictionary a klic je CISTY int. pokud je sceneIDX enum, tak se to bude boxovat, pokud nedodas pri inicializaci svuj custom comparer
    SLASH
    SLASH --- ---
    Potom co som si nainstaloval Heap Allocations Viewer, Rider ma teraz upozornuje na boxed allocations. Myslim ze pre spravnu memory management a Garbage Collector je dolezite na toto si dat pozor, ale nie som si isty ako to riesit?

    Napriklad v tomto pripade ten kod uklada do hastable zaznam o objektoch ktore uz boli kliknute a vybera stale nejake nove..

    (len tak pre upresnenie, ide o hru typu Hiddon Object , kde user klika na objekty skryte v scene, a tento konkretny kod je pouzity v powerup-u kde system najde automaticky 3 objekty za usera)

    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: dik za nasmerovanie, vyzera to na super uzitocne funkcionality!
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    samozrejme se daji delat tuny dalsich veci, nejruznejsi custom handly, editacni prvky atd. tohle je z meho pohledu jedna z nejsilnejsich veci na unity, to jak snadno se da editor vylepsovat a upravovat.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH:
    Unity - Manual: Custom Editors
    https://docs.unity3d.com/Manual/editor-CustomEditors.html

    oznacis classu zdedenou z Editor jako custom inspector pro tvuj specificky typ. overridnes si oninspectorgui a bud ho uplne nahradis, nebo si tam pridas vlastni tlacitka / polozky atd. a pak po kliku na objekt uvidis vlastni polozky, takze si tam muzes udelat tlacitka pro "save current status" a podobne, nebo proste ruzne editacni nastroje, validaci atd.

    uzitecna vec na velmi rychle pridavani neceho je context menu
    Unity - Scripting API: ContextMenu
    https://docs.unity3d.com/ScriptReference/ContextMenu.html

    metodu v objektu omarkujes dekoratorem - a pak se ti objevuje po right clicku na properties na objektu a muzes ji spustit (uzitecne pro ruzne resety, runtime testy atd)

    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: custom inspectory a editory? Please do tell! O co sa jedna?
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    GILTAR: smoothuj tu rotaci a delej ji dependent na delce framu
    transform.rotation = Quaternion.Lerp(transform.rotation, nowrotation, rotateSpeed * Time.deltaTime); (nebo fixed, podle toho, kde to budes mit

    v tvem pripade je to navic na rigidbody, takze bys mel pouzivat spis rotaci na rigid body nez primo transformaci (i kdyz fakt nevim, jestil u rigidbody 2d to ma nejaky vliv)
    Kliknutím sem můžete změnit nastavení reklam