Unity analogiczny kod do działającego kod nie działa?

Odpowiedz Nowy wątek
2018-07-22 19:50

Rejestracja: 2 lata temu

Ostatnio: 3 minuty temu

0

Niedawno używałem takiego oto kawałka kodu:

private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.tag == "Player")
        {
            collision.gameObject.GetComponent<PlayerMovement>().GetBoost(boostType);
            gameObject.SetActive(false);
        }
    }

Który nie wywala żadnych błędów podczas egzekucji.

Natomiast ten kod, który jakby maksymalnie uprościłem

 private void OnTriggerEnter(Collider other)
    {
        if(other.transform.tag == "Car")
        {
            other.gameObject.GetComponent<TankMovement>().m_Speed = 10f;
            gameObject.SetActive(false);
        }
    }

Przy wykonywaniu się wywala błąd "Object refrence not set to an instance of an object"
Pierwszy projekt jest w 2D, drugi w 3D i zdaję mi się tylko tym się różnią więc o co tutaj chodzi?
Największy mindfuck jaki do tej pory miałem z unity i nie wiem nawet jak mogę dodatkowo opisać mój problem, bo pewnie nie jest opisany zbyt jasno.

Szerszy Opis:
Tank który triggeruje niedziałający skrypt jest praktycznie dokładną kopią(nie ma tylko tego jednego skryptu TankHealth) tego z poradnika https://unity3d.com/learn/tutorials/p[...]eation-control?playlist=20081 . W tym skrypt TankMovement jest niezmieniony.
Niedziałający kod ma za zadanie przekazać jakiego rodzaju przedmiot Tank właśnie "podniósł", tylko to nie działało, więc zmieniłem to na powyższą wersję, wydaje mi się że prostszą wersję.
Obiekt na którym jest ten niedziałający skrypt to zwykły Cube z BoxColliderem, który w zależności od koloru miałby dawać inne powerUpy pojazdowi który go podniósł (motyw z Lego Racers).

edytowany 3x, ostatnio: ToughCaptcha, 2018-07-22 22:34

Pozostało 580 znaków

2018-07-22 20:11

Rejestracja: 17 lat temu

Ostatnio: 14 minut temu

Lokalizacja: Kraków

0

W drugim kodzie masz "other.transform.tag", transform jest pewnie nullem, wnioskując z pierwszego kodu zamiast transform powinno być gameObject.


It's easy to hate code you didn't write, without an understanding of the context in which it was written.
Można ich używać zamiennie bodajże. Zmieniłem i jest tak samo. - ToughCaptcha 2018-07-22 21:07

Pozostało 580 znaków

2018-07-22 20:31

Rejestracja: 3 lata temu

Ostatnio: 1 rok temu

Lokalizacja: Zielona Góra

0

Ja bardziej stawiam, że to Component, który pobierasz nie jest dodany do gameobjectu. Collider wg. API zwraca transforma bez potrzeby odwoływania się do gameobjectu.

Edit: Teraz nie mam jak sprawdzić, ale możesz się jeszcze odwołać do taga tak: other.tag == "Coś"

edytowany 1x, ostatnio: Bartosz Stępień, 2018-07-22 20:37
Ten Component, czyli skrypt jest dodany do obiektu, inaczej tank by się nie mógł poruszać i nie mogłoby się w ogóle odpalić to OnTriggerEnter, które jest na obiekcie do którego tank musi dojechać. - ToughCaptcha 2018-07-22 21:09
generalnie if w moim kodzie działa bez zarzutu, tylko problem jest z tą pierwszą linijką wewnątrz jego. - ToughCaptcha 2018-07-22 21:21
Opisz dokładnie w poście gdzie te skrypty są dodane i co chcesz nimi uzyskać bo za mało informacji. Skoro to pierwsza linijka w warunku to na 90% jest źle przypisany komponent. - Bartosz Stępień 2018-07-22 21:55
Ok, ale nie wiem kompletnie jak ten komponent mógłby być źle przypisany. - ToughCaptcha 2018-07-23 11:49

Pozostało 580 znaków

2018-07-23 15:04

Rejestracja: 2 lata temu

Ostatnio: 3 minuty temu

0

Zrobiłem kopię skryptu TankMovement, usunąłem orignał, wstawiłem moją kopię i działa. Od początku czułem, że to musi być właśnie tego typu z d**y błąd.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0