Unity: score megjelenítése egy másik scene-ben?
Tudom, nem ez a legjobb hely a kérdés feltételére, de hátha.
Sok ilyen kérdés van az interneten, de egyszerűen nem tudom működésre bírni...
Szóval, szeretnék egy sima mentett adatot a GameManager scriptből meghívni a ShopManager scripte, ezzel a shopban (különálló scene) is megjeleníthessem az aktuális score-t.
A kód működő része:
public class GameManager : MonoBehaviour {
int money = 0;
public Text moneyText;
void Start()
{
money= PlayerPrefs.GetInt("Money");
moneyText.text = money.ToString();
}
void SaveMoney()
{
PlayerPrefs.SetInt("Money", money);
}
}
Ezt a money értéket szeretném megjeleníteni a Shop menüben (scene-ben).
Köszönöm szépen, ha valaki időt szán rám!
én a helyedben az adatokat függetlenné tenném a Componentektől
tehát létrehoznék egy GameData osztályt amiben tárolnám az adatokat, viszont ez vagy static, vagy singleton megoldással
a GameData nem component (tehát nem a MonoBehaviour osztály lesz a szülője), így bármikor elérheted gond nélkül, nem kell hozzá gameobject, sem component
én pár éve fejlesztek Unity motort használva és eléggé zavar amikor mindent componentekbe pakolnak az emberek a tutorial videókban
a componentek mellett érdemes ismerni a scriptableobjecteket és azt is, hogy ha csak simán vannak classok azokat hogyan tudod kezelni, hogyan lehet jól használni ezeket és mikor milyen megoldásokat érdemes!
én componentekbe akkor rakok adatot, ha annak ott a helye (vagy debug miatt)
a component egy entityhez kapcsolódó dolog, addig létezik amíg az entity létezik (vagy nem törlik direktbe a componentet)
Az Entity-Component-System a Unity alapja, jobb minél hamarabb megismerkedni vele, hogy tudja mi az az Entity, GameObject, Component, Prefab...
a DOTS, Jobs és egyéb dolgok még ráérnek
a scriptableobject ismerete is elég fontos, nem annyira bonyolult és nem véletlen van létjogosultsága, szintén érdemes pár videó alapján megnézni és megismerni, főleg ha adattárolásról van szó!
persze tárolhatsz mindent componentben ami belefér, de ettől még nem ez a helyes irány, hisz a componenteknek is megvan a maguk feladata
a multiscenes megoldást is felhozhattam volna ennyi erővel, hogy rakja oda ki a controllereket/managereket és tárolja ott az adatokat
több éve Unityzek sajnos én is sok rossz szokást tanultam meg az elején amik még, akkor mondhatni trendik voltak, de nem a legjobbak
végig lehet járni azt az utat, hogy sok hülyeséggel találkozik az ember és sok dolgot gány megoldásokkal csinál meg, amikre visszatekintve évek múltán csak fogja a fejét, hogy "ezt hogyan csinálta meg"
szerintem fontos, hogy ne csak a kód írást tanulja meg, hanem a mögöttes elméletet is értse meg és jó ha ismeri a lehetőségeit, de ne rossz szokások rögzüljenek
hogy egy fontos példát hozzak fel:
Camera.main
sok videóban kiemelik, hogy ezt ne használd Update metódus alatt (vagy gyakran futtatott kódokban), mégis sok tutorial kihagyja ennek az említését és az ember azt hiszi ez egy jó megoldás
vagy ott vannak a patternek, amik elég fontosak
ott van a Pool ami sok játékot megmentene a lagg spike-tól (lásd Rust, 7 Days to die)
a többszálúságról nem is beszélve, mert sok játék a fő száladat fogja meg és az FPS-edet redukálja le
sok-sok-sok dolog van, nem is azt mondtam egyből jöjjön minden is, viszont sok olyan dolog van amit már a kezdetek kezdetén meg KELL ismerni, mert sok problémától menthetnek meg
Köszönöm nektek a választ! Sajnos a scriptable egyelőre viszonylag járatlan út nekem.
A probléma forrása igen, az volt, hogy több komponenst próbáltam elérni. Szóval csináltam egy külön Walletet, onnan hivatkoztam a mentett adatokra.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!