Unity Jak mogę uzyskać komunikację między scenami

gamedev

#1

Witam, mam jedną scenę z menu itp, ale czy mogę tym sterować (on/off) czymś ,co znajduje się na innej scenie?

Głównie chodzi, że chciałbym za pomocą tego włączyć/wyłączyć wybrane efekty post processing na innej scenie(gry) przez scenę(z menu)

Kod na zmianę tych ustawień:
https://pastebin.pl/view/d9deb201

Z góry dzięki za pomoc


#2

Scriptable object. Tworzysz jeden asset po czym dajesz do obu scen gdzieś w mb. Możliwe że jest inny sposób, SO są przekazywane przez referencje o ile nie zrobisz bubla z duplikacja referencji powinno działać. Mimo że sceny zapisują się w całości na twardo tak jak są, brak im optymalizacji duplikatów assetow

Można pewnie zapisać je jako statyki
Chyba


#3

Ja kiedyś znalazłem sam. U mnie nie wiem czemu do końca nie działa, ale ogólnie działa i zapisuje. Zobacz sobie.

using UnityEngine;

using System.Collections;

public class ToggleMusic : MonoBehaviour {

RectTransform znaczek;
public bool muzyka;

// Use this for initialization
void Start () {
	znaczek = GetComponent<RectTransform> ();
	znaczek.sizeDelta = new Vector2 (Screen.width/30, Screen.height/10);
	muzyka = false;
}
// ustawienie i zapis toggle do booleana i do playerprefs
public void Muzyka() {
	muzyka = !muzyka;
	PlayerPrefs.SetInt ("Muzyka", (muzyka ? 1:0));
	PlayerPrefs.Save ();
	muzyka = (PlayerPrefs.GetInt("Muzyka") != 0);

}

}

To jest skrypt który sam generuje przycisk i zmienną, a następnie ją zapisuje, ale to dawno temu pisałem.

A bym zapomniał, tworzymy funkcję muzyka, którą może używać do aktywacji przycisk unityowy =).


#4

Generalnie jest dużo rzeczy których nie masz “tam gdzie się wyświetlają”.
Tylko są gdzieś indziej, ale wyświetlasz ich stan żeby nimi manipulować.

To co pokazałeś to są opcje. Opcje nie powinny “być na ekranie opcji”
Powinny być gdzieś indziej np w pliku na dysku i/lub na jakimś obiekcie który jest w tle.

A ten ekran

  • odczytuje aktualne opcje
  • pozwala zmieniać opcje
  • nie jest źródłem stanu dla opcji

Stan opcji możesz sobie np wczytać na starcie każdej sceny z pliku i odpalić kod który go dostosuje.

Użyć takiego wrappera jak ten PlayerPrefs który zapisze pliczek na dysk dla ciebie.
https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

Jak często będziesz musiał aplikować te opcje zależy od konkretnych systemów które będą konfigurowalne.