Mam ambicję napisać skrypt eksplozji. A mianowicie chcę aby przeciwnik podczas śmierci eksplodował, zadając obrażenia sile żywej w zasięgu rażenia. Poszukałem na google, ale nie znalazłem rozwiązania a to głównie dlatego że grę robię na silniku 2D a nie 3D i nie mam zielonego pojęcia jak się za to wziąć :(
@Ofacet: Ależ ambicja. ( ͡°͜ʖ͡°) Przecież to jest banalne i można zaimplementować na wiele sposobów. Np. puszczasz pętlę sprawdzającą wszystkich "żywych" w scenie i jeśli odległość między ich pozycją, a pozycją wybuchu jest mniejsza niż dana wartość, to zadajesz obrażenia. To, czy to jest 2D, czy 3D nie ma praktycznie żadnego znaczenia.
Hmmm, pomyslmy. Robisz tak metode w ktorej sprawdzasz czy jest wybuch, w zmiennej przechowujesz wartosc false dla nie wybuchu. Gdy przeciwnik eksploduje zmieniasz na true i odpalasz funkcje boxColiderEntered, i w niej odwolujesz sie do hp bohatera w tym przypadku odejmujesz mu zycie
@Ofacet: marnie widzę te programowanie jak nie chce Ci się sprawdzić jak działają collidery ( ͡°͜ʖ͡°) Standardowe collidery mogą być dość kłopotliwe bo wykrywają jednocześnie tylko 1 obiekt (ostatni jaki wszedł w jego obręb). Idzie sobie z tym poradzić ale jest lepsze rozwiązanie:
@Kiv: chyba ktoś skomentował ale nie przeczytał o co chodzi autorowi ( ͡°͜ʖ͡°) Po pierwsze autor korzysta z 2D a nie 3D więc Rigibody nie zda egzaminu. Po drugie nie chodziło mu o symulacje samego odrzutu a o zadanie obrażeń obiektom znajdującym się w promieniu rażenia.
Mam ambicję napisać skrypt eksplozji. A mianowicie chcę aby przeciwnik podczas śmierci eksplodował, zadając obrażenia sile żywej w zasięgu rażenia. Poszukałem na google, ale nie znalazłem rozwiązania a to głównie dlatego że grę robię na silniku 2D a nie 3D i nie mam zielonego pojęcia jak się za to wziąć :(
Ktoś? Coś?
@Ofacet: Ależ ambicja. ( ͡° ͜ʖ ͡°) Przecież to jest banalne i można zaimplementować na wiele sposobów. Np. puszczasz pętlę sprawdzającą wszystkich "żywych" w scenie i jeśli odległość między ich pozycją, a pozycją wybuchu jest mniejsza niż dana wartość, to zadajesz obrażenia. To, czy to jest 2D, czy 3D nie ma praktycznie żadnego znaczenia.
Uczę się tego przeklętego programowania :P I wcale mi dobrze nie idzie.
@Duze_blekitne_oczko: A w jaki sposób byś proponował to rozwiązać? Bo tyle to sam wymyśliłem ale nie miałem pojęcia jak to cudo zaimplementować.
public float radius = 5.0F;
public float power
@Duze_blekitne_oczko: Akurat wróciłem z biegania i powoli siadam do tego spowrotem. Jak coś tam naskrobię to na pewno się odezwę :D
void Update () {
Vector2 explosionPos = transform.position;
Collider2D[] colliders = Physics2D.OverlapCircleAll (explosionPos,
void Update()
{
if (health <=
explosionPos = transform.position;
Collider2D[] colliders = Physics2D.OverlapCircleAll (explosionPos, radius);
foreach (Collider2D hit in colliders) {
if (hit.gameObject.tag
(https://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html)
Komentarz usunięty przez autora
teraz jak wróciłem do skryptu to dopiero zauważyłem że mam błąd. InvalidCastException: Cannot cast from source type to destination type.
Szukam w internecie właśnie sugestii co z tym fantem zrobić :D
EDIT: Ale ze mnie debil. Nie zrobiłem public GameObject z przeciwnikiem który ma wybuchać xD. Co nie zmienia faktu że wciąż
public GameObject explosionPos;
public Collider2D circle;
public float radius;