• 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?

+1 głos
4,217 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ź 679 wizyt
0 głosów
1 odpowiedź 1,145 wizyt
pytanie zadane 23 kwietnia 2019 w C# przez Pytam_PL Użytkownik (520 p.)
0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 14 sierpnia 2018 w C# przez Stami Gaduła (3,790 p.)

93,720 zapytań

142,641 odpowiedzi

323,265 komentarzy

63,269 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...