Bool z jednego odpalony w drugim skrypcie


#1

Hej, dawno nie pisałem bo nie miałem żadnych projektów rozpoczętych. Więc nie miałem po co klepać kodu :> .
Wrzucam wam zdjęcie z kodem z którym mam problem, chodzi o to że chciałbym odpalić boolean z kodu doorsopen który jest podpięty pod animatora, w innym skrypcie projectile2 który jest pociskiem służącym do otwierania drzwi. Mam już czytanie tagów kolizji ale nie mogę sobie poradzić z odczytywaniem kodu z jednego skryptu w inny, ktoś może pomóc ?


#2

Odwołujesz sie poprzez dodanie

public static bool nazwaZmiennej

a w drugim skrypcie piszesz

nazwaPierwszegoSkryptu.nazwaZmiennej

Pozdrawiam :slight_smile:


#3

Jeśli oba skrypty są podpięte do tego samego obiektu to w skrypcie Projectile2 zadeklaruj zmienną typu DoorsOpen i nad nią umieść komendę [SerializeField] oraz w IF’ie collidera gdzie ma otworzyć drzwi wpisz “nazwaZmiennej.Doors = true;” np tak:

//plik Projectile2
(…)
[SerializeField]
DoorsOpen nazwaZmiennej;
(…)
if (hitinfo.collider.CompareTag (“Doors”)) {
Debug.Log(“Doors Need to be Open”);
nazwaZmiennej.Doors = true;
}
(…)

Potem w oknie Inspector’a, w widniejącym tam skrypcie Projectile2 pojawi się puste pole “nazwaZmiennej” w które myszką należy przeciągnąć też znajdujący się w Inspector’ze skrypt DoorsOpen.

Jeśli oba skrypty są podpięte do różnych obiektów, wtedy w skrypcie Projectile2 nalezy zadeklarować zmienną typu GameObject i z tego wyciągnąć skrypt DoorsOpen, np tak:

//plik Projectile2
(…)
[SerializeField]
GameObject nazwaZmiennej;
(…)
if (hitinfo.collider.CompareTag (“Doors”)) {
Debug.Log(“Doors Need to be Open”);
nazwaZmiennej.GetComponent<DoorsOpen>().Doors = true;
}
(…)

W tym przypadku w oknie Inspector’a obiektu do skryptu Projectile2 przeciągnij myszką obiekt który ma podpięty skrypt DoorsOpen.


#4

Tylko że to osobne obiekty. Widziałem coś podobnego w tutku o strzelance 2.5d ze śpiącą postacią i wełnianymi potworkami, ale to raczej nie to samo :confused: .

A nie moment, dopiero doczytałem resztę. Spoko, dziś jest za późno ale zajmę się tym, dzięki za wszystko!


#5

I umarł problem niech żyje problem, nie mogę wrzucić GameObject’u z hierarchii tylko muszę zrobić prefab z drzwi a dopiero potem mogę wrzucić Prefab jako GameObject. Czegoś tu jeszcze brakuje, może zamiast gameobject użyc script jeśli jest coś takiego :confused: .


#6
if (hitinfo.collider.CompareTag (“Doors”)) {
    Debug.Log(“Doors Need to be Open”);
    hitinfo.transform.GetComponent<DoorsOpen>().Doors = true;
}

#7

dzięki Palanthirze, nawet głupie nie zauważyłem że odpowiedź miałem już w skrypcie. Oj dawno nie kodziłem :confused: .

Teraz tylko muszę ogarnąć animatora, bo w tym momencie skrypt wychwytuje boolean z innego skryptu i ładnie go aktywuje, ale po tym jak animator zmieni swoją zmienną na true i nie ważne czy do animatora dopnę triggera czy kolejnego booleana, animacja gra tylko parę klatek na początku i nie chce iść dalej. Znowu coś robię źle czy może trzeba odpalić animacje osobno skryptem?


#8

Użyj triggera zamiast boola i stwórz metodę albo właściwość ustawiające animator, a nie wrzucaj czegoś takiego do update. Raz, że przez to nie działa, dwa, że to niewydajne.

Proponuje też jakiś kurs :wink:


#9

Teorię kojarzę, jednak ja bardziej jestem od wyszukiwania skryptów i składania ich do kupy niż tworzenia od postaw, to jest prawdziwy c# dla leniwych :> .
Mówisz o metodzie, ale pewnie masz na myśli osobny void Opening na przykład? I potem zadeklarować w projectile uruchomienie właśnie tej osobnej funkcji? Sprawdziłem coś takiego, i wyszedł mi error:
“error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement”

Chyba samo odpalenie funkcji nic nie da, albo robię coś nie tak.

ADD: A nie, przerobiłem na tigger z poziomu animatora i wrzuciłem otwieranie drzwi w osobną funkcję i DZIAUA. I tak oto mam projectiles który otwiera drzwi. Teraz tylko szukać skryptu na wybór typu amunicji i będę w domu :> .

Edit: Temat do zamknięcia.