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

[unity, c#]Zmienna sama się zmienia

Object Storage Arubacloud
0 głosów
276 wizyt
pytanie zadane 9 sierpnia 2017 w C# przez Stami Gaduła (3,790 p.)

Witam. Pojawił mi się dziwny problem w moim projekcie unity. Najlepiej pokaże kod:
 

public class PrzepisSelect : MonoBehaviour
{
    public string on_off;

    void Update() //Wywyołuję się co klatkę (co chwilę) 
    { 
        Debug.LogError(on_off);  //Działa jak Console.WriteLine
    } 
    void Start() { PrzepisTP("on"); } //Wywołuję się przy starcie skryptu (1 raz na początku)

    public void PrzepisTP(string on)
    { 
        if (on == "on")
        {
            //instrukcje (bez modyfikacji zmiennej on_off, ani on)
        }
        if(on == "off")
        {
            //instrukcje (bez modyfikacji zmiennej on_off, ani on)
        }
        on_off = on;
        Debug.LogWarning(on_off); //Działa jak Console.WriteLine
    }
}
public class BoxMove : MonoBehaviour //Metoda odpowiedzialna za poruszanie obrazem
{
    private PrzepisSelect PS;

    void Start() //Wywołuję się przy starcie (1 raz na początku)
    {
        PS = gameObject.AddComponent<PrzepisSelect>(); //Działa tak jak: (PrzepisSelect)PS = new PrzepisSelect();
    }
    void Update () //Wywołuję się co klatkę (co chwile)
    {
        Debug.Log(PS.on_off); //Działa jak Console.WriteLine
        if (PS.on_off == "off")
        {
           //instrukcje
        }
    }
}

Oprócz tego jest jeszcze guzik który wywołuje PrzepisTP z wartością off - da się go kliknąć tylko jeden raz.

A tak wyglądają logi:

Debug.Warring jest wywoływane w PrzepisTP
Debug.Error w Update w PrzepisSelect (tam gdzie PrzepisTP)
A Debug.Log w Update w BoxMove (tam gdzie if)

A więc czemu zmienna sama się zmienia. Jest to dla mnie bardzo nie zrozumiałe. Proszę o pomoc.

komentarz 9 sierpnia 2017 przez bimbrownik Mądrala (5,180 p.)
Swoją drogą nie łatwiej użyć zmiennej typu boolean?
komentarz 9 sierpnia 2017 przez Stami Gaduła (3,790 p.)
Łatwiej, tylko próbowałem wszystkich sposobów, gdy rozwiązywałem ten problem.

1 odpowiedź

0 głosów
odpowiedź 10 sierpnia 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)

Zmień to: 

void Start() //Wywołuję się przy starcie (1 raz na początku)
    {
        PS = gameObject.AddComponent<PrzepisSelect>(); //Działa tak jak: (PrzepisSelect)PS = new PrzepisSelect();
    }

Na: 

void Start() //Wywołuję się przy starcie (1 raz na początku)
    {
        gameObject.AddComponent<PrzepisSelect>(); //Działa tak jak: (PrzepisSelect)PS = new PrzepisSelect();
   PS = GetComponent<PrzepisSelect>();
 }

 

Podobne pytania

0 głosów
2 odpowiedzi 242 wizyt
pytanie zadane 27 września 2018 w C# przez kubekszklany Gaduła (3,190 p.)
0 głosów
1 odpowiedź 173 wizyt
+1 głos
3 odpowiedzi 504 wizyt
pytanie zadane 18 maja 2021 w C# przez disaster Bywalec (2,120 p.)

92,551 zapytań

141,395 odpowiedzi

319,526 komentarzy

61,936 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!

...