. Skriptistä käsin objektien luominen on joissain tilanteissa se vähän epämiellyttävämpi homma.
Worst case tämän kanssa on että teet prefabin ja instantioit niitä miten huvittaa. Vie yhden rivin koodia.
Tiedän kyllä. Jossain pitää vain käydä luomassa se objekti, jolla tuota metodia kutsutaan, ja seuraavan scenen pitää sitten käydä vielä etsimässä tuo objekti. Ratkaisu toimii kyllä mainiosti muttei ole kovin elegantti. Jotta kyseinen skripti suoritettaisiin heti pelin käynnistyessä scenestä riippumatta, skriptin sisältävä objekti pitäisi muistaa käsin laittaa jokaiseen sceneen. Eihän sekään ongelma ole, mutta minusta tuollaisten asioiden kuuluisi olla automatisoitavissa. Awake on joka tapauksessa tuttu asia, ja käytän sitä tällä hetkellä reilusti enemmän kuin Startia.
Äärettömän yleistä isommissa peliprojekteissa olla jonkin sortin GameManager objekti joka hoitaa tämän tyyppisiä funktionaalisuuksia. Voit laittaa tämän yhteen skeneen, tallentaa staattisena arvona, kutsua DontDestroyOnLoadia ja rekisteröidä SceneManagementin eventteihin jotain kutsuja kun skene vaihtuu.
Skenejä ja niiden käyttötapoja on niin monia erilaisia ettei tämän tekemisestä enginen puolesta olisi kovin järkevää.
Toisin kuin Start, Awake kutsutaan myös disabloiduille objekteille ja sitä pitäisi käyttää vain asioiden initialisointiin.
Jos haluaa lähes kaiken pysyvän gridissä, nappi pohjassa tekeminen ei ole miellyttävää. Lisäksi asioilla tuntuu olevan pientä taipumusta karata gridistä aika helposti, jos ei ole hyvin tarkkana. Erityisesti ärsyttää, miten objektit, jotka eivät ole jo valmiiksi gridissä, jäävät Ctrl pohjassa raahatessa edelleen gridin ulkopuolelle. Ylipäänsä tuntuu, ettei Unityssä ole gridin kanssa työskentelyyn hirveästi panostettu vaan tehty ihan minimimäärä sen eteen. Luulen että tuon saisi jollain editoriskriptillä korjattua ainakin enimmäkseen, mutta ainakaan vielä ei ole tullut niin suurta tarvetta puuttua tuohon, että olisin sellaista kaivellut tai väsännyt.
Unity on 3D moottori ja monet 3D pelit eivät ole gridipohjaisia. Unityn mentaliteetti on myös hyödyntää Asset Storea tämmöisiin spesifisiin use-caseihin. Grideihin voi käyttää vaikka
https://www.assetstore.unity3d.com/en/#!/content/4466
Tuokin ominaisuus on tiedossa, ja itsekin välttelen sen käyttöä muuten kuin viimeisenä vaihtoehtona. Kiitos vinkistä kuitenkin!
Ei script exec orderia kannata "välttää", vaan käyttää ainoastaan silloin kuin on tarve. Esim omassa pelissäni on Controller, PlayerMovement ja CameraController komponentit. Camera controller täytyy kutsua ennen PlayerMovementia, jotta liikkuminen on kameran nykyisen framen mukaista, ja Controller on kutsuttava ennen PlayerMovementia ja CameraControlleria, jotta kummallakin on käytössä nykyisen framen state-data. Movement on kutsuttava ennen muita pelaajan skriptejä, jotta niillä on nykyisen framen positiodata.
Kutsut voisi kirjoittaa käsin skripteihin, mutta tällöin Controllerin pitäisi tietää jotain CameraControllerista, CameraControllerin jotain Controllerista tai sisältää jotain rumia null checkejä ja/tai frame flageja ettei niitä kutsuta useampaan otteeseen.
Unityn suurimmat rajoitukset tulee kun projektit kasvaa ja/tai mennään vähän syvemmälle koodauksen kanssa.
- Haluat rendata natiivit shadowmapit itse vaikka stencilien kanssa? Ei onnistu
- Tarviit gigan kokoisen arrayn dataa? Pakko käyttää unsafe dll:ää ja unmanaged arraytä jos ei halua että monon GC menee hulluksi
- Haluat useamman fysiikkakontekstin tai deterministiset fysiikat vaikka nettipeliä varten? Pakko käyttää P/Invoken kautta ulkoista kirjastoa kauhean overheadin kanssa
- Haluat piirtää GPU instansoinnilla vaikka 100000 asteroidia tai ruohonkortta kuten monet AAA pelit Crysiksestä lähtien? Pakko käyttää unityn lagista APIa joka vie kaiken CPU tehon
- Haluat ketjuttaa image effektejä useamman kameran välillä? Voi vittu mikä sotku tästä tulee
- Haluat työskennellä 10+ ihmisen kanssa projektissa? Scenejen ja prefabien hallinnasta tulee käsittämättömän hankalaa. (Koita opettaa artistille UnityYAMLMerge etc prefabien hallinta)
jne lista jatkuu pitkälle..
Monet näistä paranee todennäköisesti kun Unity saa uumoillun Scriptable Rendering Pipelinen, nested prefabit jne muita featureja tehtyä, mutta siltikin ollaan vielä kaukana siitä että Unityllä tehtäisiin useita AAA pelejä.
AA pelit ja siitä alaspäin Unity on tosin loistava.