Wpis z mikrobloga

Mireczki spod tagów #programowanie #csharp i #unity3d

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ś?
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mam ambicję napisać skrypt eksplozji.


@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.
  • Odpowiedz
@daedalus_pl:

Ależ ambicja. ( ͡° ͜ʖ ͡°)


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ć.
  • Odpowiedz
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
  • Odpowiedz
@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:

public float radius = 5.0F;
public float power
  • Odpowiedz
@ktos12356: Właśnie rozwiązanie które mi zaproponowałeś zadziałałoby na silniku 3D ale nie 2D. Stąd mój problem :)

@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
  • Odpowiedz
@Ofacet: wybacz, nie zauważyłem że chodzi o 2D ( ͡º ͜ʖ͡º)

void Update () {
Vector2 explosionPos = transform.position;
Collider2D[] colliders = Physics2D.OverlapCircleAll (explosionPos,
  • Odpowiedz
@Ofacet: utwórz sobie jakąś funkcje do odpalania wybuchu i wklej tam:

explosionPos = transform.position;
Collider2D[] colliders = Physics2D.OverlapCircleAll (explosionPos, radius);
foreach (Collider2D hit in colliders) {
if (hit.gameObject.tag
  • Odpowiedz
@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.
  • Odpowiedz
@ktos12356: zrobiłem jak zasugerowałeś ale nie działało. Kminiłem sprawę aż mnie szlag trafił i poszedłem do łóżka :P

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ąż
  • Odpowiedz
public GameObject player;
public GameObject explosionPos;

public Collider2D circle;

public float radius;
  • Odpowiedz