• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zwrócić się do zmiennej z innego skryptu w Unity C#, jak obiekt który posiada skrypt jest na innej scenie?

Object Storage Arubacloud
+1 głos
3,524 wizyt
pytanie zadane 2 września 2016 w C# przez kalendarmenn Obywatel (1,270 p.)

Witam!

Mam problem, chciałbym zwrócić się do zmiennej Level2 typu bool ze skryptu Menu,

skrypt Menu przypisany jest do obiektu też o nazwie Menu, ale  ten obiekt znajduję się na innej scenie.

Proszę o jak najszybsze odpowiedzenie na moje pytanie.

 

2 odpowiedzi

+1 głos
odpowiedź 4 września 2016 przez Thomas Frost Bywalec (2,540 p.)
Cześć,

Unity używa Entity Framework (tzn. mamy obiekt, do którego podpinamy coś jakby podzespoły/właściwości np. Postać - podpinamy możliwość ataku, możliwość budowy), więc skrypt z innego game object jest również takim entity i trzeba się do niego dostać:

Musimy mieć dostęp do obiektu:
var obiekt = (GameObject)Instantiate(Resources.Load("NazwaObiektu"));

​Następnie aby wyciągnąć skrypt należy wyciągnąć odpowiedni komponent (tj. nazwę tego komponentu/skryptu):
​var skrypt = (nazwaSkryptu)obiekt.GetComponent(typeof(nazwaSkryptu)));

 

Następnie mamy dostęp do zmiennych, metod i klas publicznych poprzez:
​skrypt.nazwaZminnej;
​skrypt.nazwaMetody();
​skrypt.nazwaKlasy.nazwaZmiennej;
skrypt.nazwaKlasy.nazwaMetody();


​Pozdrawiam,
Tomek
0 głosów
odpowiedź 2 września 2016 przez Mikołaj Kurcin Początkujący (440 p.)
Może stwórz obiekt międzyscenowy tzw nie rozwala się przy przejściu między scenami który będzie takie rzeczy kontrolował.
komentarz 2 września 2016 przez Mikołaj Kurcin Początkujący (440 p.)
Czyli napisz skrypt o kontroli tego i w void start dodaj

DontDestroyOnLoad(transform.gameObject);

ale pamiętaj żeby stworzyć go raz np na scenie która może tylko i wyłącznie pojawić się raz bo będziesz miał duplikat i z tego powodu problemy albo inaczej to możesz rozwiązać np innym kontrolerem który będzie pilnował że jest tylko jeden taki obiekt
komentarz 2 września 2016 przez kalendarmenn Obywatel (1,270 p.)
edycja 2 września 2016 przez kalendarmenn
Dzięki, to powinno pomóc, ale mam jeszcze jedno pytanie, chodzi oto, że mi niedziała funkcja

void OnTriggerStay() w innym skrypcie oto kod:

-----------------------------------------------

using UnityEngine;
using System.Collections;

public class Level1 : MonoBehaviour {

    public Menu Menu;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
    
    }
    void OnTriggerStay(Collider col)
    {
        Menu.Level2 = true;
        Application.LoadLevel(0);
    }
}

-----------------------------------------------

nie chce tego zrobić po wejściu w collider.
komentarz 2 września 2016 przez Mikołaj Kurcin Początkujący (440 p.)
Akurat tutaj to inna sprawa, bo pomóc ci nie mogę, bo pewnie masz błąd w unity np zaznaczone Trigger albo nie masz rigidbody, albo ustawione isKinematic, dużo rzeczy mogło pójść źle, ale tak btw radziłbym w takich voidach dawać coś w stylu

if(col.gameObject.tag =="Example Tag"){

 

}

 

to sprawia że możesz kontrolować jaki obiekt coś wywołuje bo teraz cokolwiek jest w stanie zmienić scene, a np zbierana moneta tego nie powinna robić
komentarz 2 września 2016 przez kalendarmenn Obywatel (1,270 p.)
edycja 2 września 2016 przez kalendarmenn
Mój problem był taki, że jak gracz wchodził do collidera to nie chciała się zmienić scena, już dzisiaj nie wchodzę na forum.
komentarz 2 września 2016 przez Mikołaj Kurcin Początkujący (440 p.)
przecież wyraźnie napisałem "Akurat tutaj to inna sprawa, bo pomóc ci nie mogę, bo pewnie masz błąd w unity np zaznaczone Trigger albo nie masz rigidbody, albo ustawione isKinematic, dużo rzeczy mogło pójść źle," to podaj więcej szczegółów screena z ustawień obu gameObject czy coś bo tu jest niby dobrze
komentarz 2 września 2016 przez kalendarmenn Obywatel (1,270 p.)
Jednak mogłem wejść na forum i okazało się, że nie miałem rigidbody.
komentarz 2 września 2016 przez kalendarmenn Obywatel (1,270 p.)
Dziękuję za pomoc, gdyby nie ty to bym tego nie zrobił.

Podobne pytania

0 głosów
1 odpowiedź 486 wizyt
0 głosów
1 odpowiedź 852 wizyt
pytanie zadane 23 kwietnia 2019 w C# przez Pytam_PL Użytkownik (520 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 14 sierpnia 2018 w C# przez Stami Gaduła (3,790 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...