• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BYDKUNITY 3D
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    REDSNAKE: pouzij spis triggery, nez to delat rucne

    to ze ti to crashuje znamena ze mas spatne nastavenou layermasku (whatisplayer) nebo nekde kolizni layery, takze ti do toho checku prijdou i objekty, ktere na sobe nemaji Patrol, ale stejne se ho na nich pokousis volat
    REDSNAKE
    REDSNAKE --- ---
    Měl jsem takový nápad, spouštět přes
    Collider2D[] playerNearby = Physics2D.OverlapCircleAll(PlayerDetectPos.position, detectRange, whatIsPlayer);
    for (int i = 0; i < playerNearby.Length; i++) {
    playerNearby[i].GetComponent<Patrol>().TakeDamage(damage);
    fázi v chování "AI" enemy. Nepřítel by v podstatě korzoval po platformě doprava a doleva a v momentě kdy by hráčův charakter vstoupil do okruhu kde detekuje enemy, tak by enemy začal nepřítele sledovat. Další fáze je po určitém přiblížení pokus o útok, ale tak daleko jsem se ještě nedostal.

    zde je script:
    https://pastebin.com/CiJvuTiF

    Je to úplně zcestná myšlenka?

    EDIT: Tak zdá se že mi to z části funguje, ale dostávám
    NullReferenceException: Object reference not set to an instance of an object Patrol.Update () (at Assets/Scripts/Patrol.cs:70)

    místo výpisu Debug.Log. Budu rád za tip.
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    za predpokladu ze je na tom objekt shader, ktery emisivni svetlo umi, tak se proste meni hodnota v shaderu - cili nejaky material.setfloat. u standardniho shaderu by to mel byt _emission myslim (ale musi byt povoleny uz v defaultnim nastaveni, jinak se pri kompilaci vyoptimalizuje)
    BYDK
    BYDK --- ---
    Vedel by nekdo, jak menit za behu intenzitu emisivity materialu? Zatim se mi to nepovedlo rozchodit. Take bych to rad menil jen na jednom objektu, pricemz je material stejny. Nasel jsem, ze by to mhlo jit pres Material Property block, ale to se mi take nepovedlo. Muze nekdo poradit? :)
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    LD45 - Start At NOTHING by Shigor
    https://shigor.itch.io/ld45-start-at-nothing

    Tak jsem si po letech zase jednou zkusil Ludum Dare. Na tri dny lehkeho crunche jsem s vysledkem celkem spokojeny. Byt teda ty nove isometricke tooly v unity jsem mel mozna zavrhnout a uplacat to jednodusejc jak jsem zvykly v pseudo3d / texturovanych vektorech. Pro me ucely s tim byla zbytecne otravna drbacka, ale aspon jsem si to vyzkousel...
    REDSNAKE
    REDSNAKE --- ---
    REDSNAKE: nakonec jsem to vyřešil přes SpawnPoint = GameObject.Find("SpawnPoint");
    REDSNAKE
    REDSNAKE --- ---
    JAACOB: Dekuju za tip, tak ja bych si rad samozrejme vybral ten nejlepsi tutorial, jen jak jej poznat jako podzacatecnik
    JAACOB
    JAACOB --- ---
    Hele takhle z popisu ti nikdo neporadi, museli bysme videt minimalne zdrojaky. Kazdopadne podvesovat Spawnpoint nebo SceneManager pod playera je samosebou nesmysl. Jestli mas ale Debug.Logy ve SpawnPointu a SceneManageru, tak nemuzes cekat, ze ti bude neco vypisovat Player skript...

    Kazdopadne se mi teda moc ten tvuj tutorial nepozdava, nemusim moc frikulinske hiphoppery co to mastej. Jestli muzu doporucit, mrkni spis na jeden z techle channelu:
    https://www.youtube.com/playlist?list=PLPV2KyIb3jR53Jce9hP7G5xC4O9AgnOuL nebo https://www.youtube.com/playlist?list=PLPV2KyIb3jR6TFcFuzI2bB7TMNIIBpKMQ (celej Brackeys je gut - ma tam i begginer veci i advanced veci).
    How to Make a Unity Game - YouTube
    https://www.youtube.com/playlist?list=PLB5_EOMkLx_WCGalAUeKXA1I-qQqYY_Sk

    Nebo primo Unity tutorialy:
    https://learn.unity.com potazmo https://learn.unity.com/course/unity-basics

    Zacatek se neda ochcat a kdyz zacnes matlat veci podle spatnych rad, akorat nasbiras hromadu spatnych navyku...
    REDSNAKE
    REDSNAKE --- ---
    Zřejmě je to tím, že gameObject SpawnPoint(Místo pro respawn po spadnutí z plošinky) a SceneManager(Objekt se skripty pro odečítání zdraví, hlídání výšky na ose Y, atd) není součástí charakteru. Což o to, SceneManager můžu připnout na hráče a pak funguje script na odečítání zdraví a výšky na ose y i v dalším lvlu, nicméně pokud samozřejmě hierarchicky přiřadím pod charakter i SpawnPoint, tak ten se pohybuje s Charakterem, takže respawn pak sice funguje, ale charakter se respawnuje na nějaké nesmyslné souřadnice ovlivněné pádem a posunem SpawnPointu.

    Prostě, potřeboval bych zřejmě přiřadit charakteru GameObject SpawnPoint a nějak docílit toho, aby byl součástí charakteru, ale nepohyboval se spolu s ním.

    Nevíte jak na to prosím?
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    W3R: no pokud se vyslovene nudis, muzes se podivat na dekompilovane zdrojaky (a mam pocit, ze c# cast nakonec unity nekde dali na nahled, protoze jim to stejen vsichni dekompilovali :).
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    JAACOB: podedit imo jde, ale nebude se ti to hlasit jako pridatelna komponenta v editoru, protoze to se bere reflexi. (imo to asi jde, minimalne pro interni pluginy, pridat nekde do inicializace, jako pridatelny skript... a mozna by slo rucnim volanim AddComponent.) otazkou je proc taky.
    W3R
    W3R --- ---
    JAACOB: dik tohle jsem nenasel necet; i kdyz stejne bud nechapu co dela ten rozdil, nebo uz je to nekde v zone blackboxu kde se deje neco co nevidim. A tomu ze to driv slo i verim, protoze kdyz jsem cetl dokumentaci, dosel jsem k zaveru ze je to tak mysleny.

    A jj je to asi ciste zvedavost, MonoBehavioury me nijak neomezuji. Spis kdyz takhle na neco narazim co nechapu, pokud to neni uplne mimo moji uroven snazim se to rozstourat a treba se neco priucit.
    REDSNAKE
    REDSNAKE --- ---
    mimochodem, dokázal by mi někdo prosím objasnit jednu věc? Mám platformu - podlahu pro 2D skákačku. Ta má 2D box collider bez zaškrtnutého trigger. Mám enemy, což je prázdný objekt s box colliderem se zapnutým trigerem kvůli útoku postavy hráče, aby se registrovaly hity. Pokud nastavím enemy box collider 2D s triggerem enemy propadne plošinou. Pokud přiřadím současně objektu enemy box collider s triggerem, současně assetu enemy přiřadím další collider bez triggeru, tak vše funguje jak má. Jen mě zajímá jestli je to takhle správné řešení nebo mi něco uniká?
    JAACOB
    JAACOB --- ---
    W3R: Zajimavej dotaz, chvilku jsem nad tim ted s kolegou stravil. On mi dokonce tvrdil, ze ma za to, ze to v minulych verzich Unity slo (podedit primo z Component / Behaviour). Ja si nejsem uplne jistej, vybavuju si pouze iterovani po Componentach, ne primo dedeni z nich. Narazil jsem ale na jeden post, ktery se to rozumne snazi vysvetlit: https://answers.unity.com/questions/1428657/can-my-scripts-derive-from-behaviour-or-component.html

    Zajimalo by me taky, proc ses k tomu vubec dostal? Chtel jsi tim neco vyresit nebo je to ciste zvedavost?
    W3R
    W3R --- ---
    Mam jedno znalostni okno, kdybyste treba nekdo prosim vedel. A neni to zasadni, ale zajima me to a nevim vlastne spis jak patrat a to nepochopeni si doplnit

    Na zaklade ceho se uniti interni komponenty nabizi jakozto pridatelne v Inspectoru? Nejsou to MonoBehaviory (ted myslim treba collidery nebo rigidbody), jsou odvozene od tridy Component od ktere bych cekal prave to (MonoBehaviour je od ni odvozen tez), ale pokud mam vlastni tridu implementujici Component, pridat jako komponenta nejde
    REDSNAKE
    REDSNAKE --- ---
    JAACOB: Dik, bylo to vskutku tak. Vcera se mi povedlo za pomoci Omnislah dopracovat k tomu samemu zaveru. Vtip byl v tom, ze kdyz jsem pridaval layer objektu enemy, zeptalo se me to zda chci layer enemy priradit i vsem dcerinnym objektum toho objektu. Ve vysledku se tedy vrstva enemy priradila i assetu a to zpusobovalo problemy, protoze asset nemel prideleny script enemy atd.

    Ano, fakt zacinam, teprv si prochazim nejake zacatecnicke tutorialy na c#, takze sotva chapu syntax a dalsi souvislosti, nicmene z yt tutorialu se to da nahazet do unity a zjistit jeee ono to funguje a to je pro me velky hnaci motor.

    Diky za tipy, myslim ze na takovy optimalizace mam jeste spoustu casu. Urcite si chci zkouknout i dalsi tutorialy na collidery, rigidbody a dalsi a jak urcite sam vis, je to casove narocne a zacal jsem s tim v patek.
    JAACOB
    JAACOB --- ---
    REDSNAKE: Kdybych si mel tipnout, mas nejakej bordel v layerech. Over si, ze whatIsEnemies layer mask odpovida enemacum a ze jen a pouze enemaci maji nastaveny tenhle layer, ale nezapomnel jsi ho na jinem gameobjektu. Abys zjistil, presneji kde je problem, prepis si vnitrek toho for cyklu v updatu takhle:

    var enemyCollider = enemiesToDamage[i];
    var enemy = enemyCollider.GetComponent<Enemy>();
    if (enemy == null)
    {
    Debug.LogError("Tenhle objekt nema spravne nastavenej enemy layer: " + enemyCollider.gameObject.name, enemyCollider.gameObject);
    continue;
    }
    enemy.health -= damage;
    /*shake cam a animace utoku*/
    shake.CamShake();
    Instantiate(bloodEffect, transform.position, Quaternion.identity);
    Debug.Log("Cakance krve!!!!!!");

    Beru to tak, ze se fakt ucis zaklady, ale mam tu pro tebe nejake tipy do budoucna:

    Jednak teda neni moc dobry v updatu volat GetComponent<> funkce - jsou pomale. Je o dost lepsi mit enemace cachle v nejakem globalnim listu nebo podobne (ackoliv v tomhle workflow ti to moc nepomuze).

    Takze druhy tip kolem workflow s kolizema - je lepsi nastavit kolizni layery primo v settings (Edit -> Project settings -> Physics). Tam si zadefinujes, ze maji spolu kolidovat treba strely a enemies, pak na gameobjekty strel a enemacu nahazis collidery a Rigidbody2D, budes posouvat vsema objektama jen pres Rigidbody2D (ApplyForce?), protoze to zajistuje spravne fungovani fyziky (a potazmo kolizi) a pak na monobehaviours budes pouzivat OnCollisionEnter2D metodu, ktera ti vystreli automaticky, kdyz dojde ke kolizi mezi nastavenyma koliznima vrstvama.

    Byt tebou, probehnu si nejake tutorialy na Rigidbody(2D?) a collidery + spravny workflow s nima...
    REDSNAKE
    REDSNAKE --- ---
    Mám script kdy player útočí stiskem space a enemy dostává - health. Funguje mi to dost random. Občas to zaregistruje jeden hit, většinou žádný a někdy tři :D
    Random by to být ovšem nemělo, damage je nastaven na 1.

    Script přikládám v příloze, koukám do toho už delší dobu a fakt už nevím.
    Chybová hláška z unity je :"NullReferenceException: Object reference not set to an instance of an object
    PlayerAttack.Update () (at Assets/Scripts/PlayerAttack.cs:30)"

    Nevím si s tím rady, tak kdyby někdo tušil, rád si nechám poradit.

    BYDK
    BYDK --- ---
    JAACOB: AHoj, akorat jsem to chtel postnout. :) Jsou tam bezva veci.
    Kliknutím sem můžete změnit nastavení reklam