• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BYDKUNITY 3D
    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)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: zrovna ta snadna a rychla customizace editoru, pridavani vlastnich toolu a podobne byl duvod, proc jsem kdysi davno pred lety unity of love and hate zacal pouzivat :) veci jako custom inspectory a editory se daji psat naprosto bleskove a okamzite... (kdyz jsem loni zkousel resit v unrealu, trvalo mi nechutne dlouho, nez jsem zjistil jak vubec na to... a pak me malem jeblo, kdyz jsem se ujistil, ze to opravdu nejde bez tuny boilerplatu, restartu editoru nemluve, par radku v unity vs par souboru v unrealu....

    SLASH
    SLASH --- ---
    SHIGORBIRDMAN: dnes som to pouzil a funguje to super!
        [MenuItem("FirebaseTools/Save Remote Config")]
        static void SaveRemoteConfig()
        {
            var conf = Conf.Instance;
            if (conf == null)
            {
                EditorUtility.DisplayDialog("Warning!", "This script can be only run at runtime, please run the game first", "ok");
                return;
            }
            else
            {
                conf.saveDefaultConfigToFirebase(2);
            }
        }
    


    Robil som predtym vo Flashi a neda sa to z Unity porovnavat... Hlavne to ladenie sceny pocas runtime je uplne bozi!
    GILTAR
    GILTAR --- ---
    Zdravím Vás, mám prosbu, jsem začátečník a zkoušel jsem se ptát na fórech, ale nikdo neodpovídá. Možná budete vy znalí vědět, co s tím. https://forum.unity.com/threads/top-down-camera-stutters.800907/ Díky předem!
    BYDK
    BYDK --- ---
    Zase trochu se zpozdenim, ale jeste to plati do konce roku. Tri mega budly s 90% slevou.

    Synty Studios Mega Bundle
    Snaps Mega Bundle
    World-building Mega Bundle

    Asset Store Mega Bundles Menu - Asset Store
    https://assetstore.unity.com/browse/mega-bundles
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    JAACOB: jasne, takze ukazuje prefaby, ktere skript pouzivaji. na to jsem si kdysi psal tool :) (ono je to v podsatte jen hledani guidu z meta, snadny za predpokladu ze pouzivas textovy zaznam dat)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    SLASH: kdekoli (pokud chces, aby kod byl jen v editoru a nikdy se nedostal do runtime, tak do editor skriptu) statickou funkci a pridat nad ni dekorator [MenuItem("mojetooly/mojefunkce")]
    JAACOB
    JAACOB --- ---
    SHIGORBIRDMAN: No Rider si proste nejak povida s Unity a je schopnej dohledat skript reference ve scenach a prefabech. Takze takhle vypada Rider search window - ta tmava cast. Ty kosticky jsou reference v prefabech v unity projektu a kdyz na tu referenci prokliknes, tak ti to vyhodi EditorWindow (prava cast screenshotu) v Unity s podobnych vypisem. Proste to zjisti z mety skriptu guid a projede reference mno...
    Kliknutím sem můžete změnit nastavení reklam