Kezdőoldal » Számítástechnika » Programozás » Unity: c# script folyamatos...

Unity: c# script folyamatos sebzés?

Figyelt kérdés

Azt szeretném elérni hogy ha a játékos egy colliderbe van akkor folyamatosan sebzést szenvedjen el.Jelenleg ez a kódrészlet oldaná ezt meg nekem:

pastebin: 1jYxSYP9

Elvileg a startcoroutine még lefut de a dDamage metódus már valamiért nem.

Hogyan lehetne ez megoldani?

(Egyékbént ha nem coroutine-t használok akkor müködik azonban akkor nem tudok késleltetni és framenként von le 10 hp-t)



2015. júl. 3. 20:05
 1/3 anonim ***** válasza:

Elvileg lefut, vagy lefut?

A coroutine első sorába rakj be egy Debug.Log("") ot első körben.

A tag biztosan Player?


Egyébként félreérted a coroutine működését, felesleges a yield után megint meghívni a sebzést, elég előtte, és akkor vonj le 10 et(mindenképp levonja mindkét esetben, akkor is, ha már kijött a triggerből, a WaitForSeconds() csak a ciklust állítja meg 2 másodpercre, de nem ellenőrzi újra a feltételt). Plusz ide, ebben a formában amúgy sem jó, mert amíg az OnTriggerStay() teljesül, addig folyamatosan meghívja a coroutine t, tehát pontosan ugyanott vagy, mintha coroutine nélkül írnád. Egy változóban tárold el, hogy épp fut-e a coroutine(első sorban myBool = true; utolsóban meg myBool = false; OnTriggerStay ben csak akkor indítsd a coroutine t, ha myBool == false).


Aztán.. OnTriggerStay ben több értelme lenne ellenőrizni a tag et, főleg akkor, ha a string alapú coroutine hívást akarod használni(a taget mindenképp ellenőrzöd, felesleges coroutine hívásra pazarolni az erőforrásokat, mielőtt egyáltalán tudnád, hogy le kell-e futtatni - nyilván egynél még nem számít, de elég könnyen össze tudnak adódni az ilyen gondok).


A kódban nem látok hibát, esetleg ami előfordulhat, hogy kimaradt a using System.Collections, de ha nem tévedek automatikusan generálja, feltételezem nem törölted ki. Vagy simán nem működik a string alapú StartCoroutine, de ezt még inkább kétlem.

2015. júl. 3. 22:13
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Végülis találtam rá másik megoldást mert coroutine egyáltalán nem akart müködni.( [link] ezzel oldottam meg ha valakit érdeklne) Egyékbént érdekes mert másik scriptben hasonló kódot használok és ott működik.
2015. júl. 5. 01:26
 3/3 anonim ***** válasza:
A trigger enter\exit nem a legmegbízhatóbb, normális körülmények között nincs vele semmi baj, de ha teszem azt teleportálni akarsz, akkor nem működik(~kiteleportálsz a sebző zónából, de az exit et sosem hívja meg, úgyhogy továbbra is sebződsz). Illetve csak akkor hívja meg őket, ha a rigidbody megy bele(a legtöbb esetben szintén elegendő, de ha mondjuk egy mozgó halál felhőt akarsz csinálni(rigidbody nélkül, nyilván), akkor nem fog működni).
2015. júl. 5. 20:09
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!