Oletetaan, että teet roolipeliä ja tarvitset helpomman tavan määrittää tilastoja, ominaisuuksia ja paljon muuta eri kohteille. Vaikka voisit käyttää Unity prefabs tehdä tämän ja sitten muuttaa arvoja kunkin yksittäisen kopion prefab, tämä on epämiellyttävä tapa edetä tehtävän. Ensinnäkin, tämä menetelmä käyttää jopa enemmän muistia, jotain ehkä säästää, jos aiot tehdä suuri peli. Lisäksi, jos sinun täytyy tehdä muutoksia pelin esineitä, se ei yksinkertaisesti ole yhtä tehokas tehdä niin, kun on olemassa useita kopioita valmistalot lojuu noin. Tämä erityisesti tulee ongelma, jos sinulla on suurempi joukkue työskennellä, joten sinun kannattaa tehdä asioita helpompi muuttaa muille tiimin jäsenille. Vaikka et ole joukkue, tämä menetelmä olisi vain vaikeampaa sinulle, kun työskentelet.
asioiden helpottamiseksi tällaisessa tilanteessa käytössäsi on Skriptattavia esineitä. Ja mitä ovat skriptattavissa olevat esineet? Yksinkertaisesti sanottuna ne ovat datasäiliöitä. Unityn kehittäjä luo näille konteille perusmallin, jossa määritellään, mitä tietoja kunkin objektin tulisi sisältää. Tämän jälkeen kyseisestä mallista luodaan Skriptattavat objektit, joita Unity-peliobjektit sitten käyttävät. Yllä olevassa esimerkissä voidaan yhden Skriptattavan objektin avulla määritellä, mitkä kohteen eri ominaisuudet ovat. Sitten että skriptattavissa objekti on viitattu kaikki kopiot kohteen. Ennen Jos halusi muuttaa kohteen tilastot, sinun täytyy muuttaa arvoja jokaisen kopion kohteen. Nyt Scriptable Objects, sinun tarvitsee vain muuttaa yksi objekti (Scriptable Object) ja kaikki objektit saada tietoja, että Scriptable objekti muuttaa samanaikaisesti.
on aina hyödyllistä nähdä nämä asiat toiminnassa, luoda uusi projekti. Tämä projekti näyttää pois skriptattavissa esineitä ja miten ne voivat auttaa sinua. Projekti koostuu kolmesta peliobjektista, joiden on tarkoitus esittää kolmea hahmoa. Jokainen merkki perii joitakin arvoja skriptattavissa olevasta objektista. Nämä arvot ovat maksimaalinen terveys, hyökkäys, puolustus, nopeus ja nimi ja väri hahmolle. Yksinkertainen käyttöliittymä näyttää nämä arvot, joten voit helposti nähdä tulokset soveltamalla skriptattavissa esineitä. Nyt kun on päätavoite, on aika lähteä luomaan.
Project Setup
olettaen, että toteutat nämä ideat uudessa projektissa, avaa Unity Hub-sovellus ja luo uusi projekti Kuvan 1 mukaisesti.
Kuva 1: uuden projektin luominen
seuraavassa ikkunassa, anna projektille valitsemasi nimi ja päätä tiedostopolusta. Vaikka voit suorittaa tämän projektin missä tahansa mallissa, tässä esimerkissä käytetään 3D-projektimallia Kuvan 2 mukaisesti. On suositeltavaa käyttää tätä mallia, jos haluat seurata mukana.
kuva 2: projektin nimen, tyypin ja sijainnin asettaminen
kun projekti on luotu, haluat järjestäytyä. Assets-ikkunassa sinun on luotava kolme kansiota napsauttamalla ikkunaa hiiren kakkospainikkeella ja navigoimalla luodaksesi – > – kansion Kuvan 3 mukaisesti. nimeä kansiot Materiaalit, Skriptattavat objektit ja skriptit.
kuva 3: Uuden kansion luominen
kun olet täällä, kannattaa mennä eteenpäin ja teettää kolme materiaalia. Näitä materiaaleja käytetään muuttamaan eri objektien värejä sen mukaan, mitä materiaalia Skriptattava objekti määrittelee. Jos haluat luoda nämä materiaalit, siirry Materiaalikansioon ja napsauta uudelleen hiiren kakkospainikkeella, tällä kertaa valitsemalla Create -> Material. Kun nimeät materiaalia, on suositeltavaa antaa sille nimi, joka korreloi sen värin kanssa. Esimerkiksi tämä ensimmäinen materiaali voidaan nimetä Punainen. Voit asettaa tämän värin, sinun täytyy valita äskettäin luotu materiaali ja siirry tarkastaja ikkuna. Albedo-kentässä on kuvassa 4 esitetty värinpoimija, jota klikkaamalla voit avata värinpoimijan.
Kuva 4: värivalitsimen avaaminen
väri vaihdetaan joko siirtämällä pientä ympyrää Värivalitsimessa tai syöttämällä RGB-arvot suoraan värivalitsimen ikkunan alaosaan. Yllä olevassa esimerkissä RGB-arvot olisivat 255, 0, 0. Tämän jälkeen sinun pitäisi luoda kaksi materiaalia ja määrittää niiden värit. Tässä esimerkissä käytetään vihreää ja sinistä, mutta ne voivat olla minkä tahansa valitsemasi väri.
nyt tulee aika luoda varsinainen kohtaus, jossa tämä peli tapahtuu. Se koostuu kahdesta pääosasta-siinä on käyttöliittymä, joka näyttää eri skriptattaville objekteille annetut tilastot ja kolme merkkiä edustavaa kapselia. ”Hahmot” ovat helpoin osa, joten voit aloittaa siitä. Sinun tarvitsee vain mennä hierarkia-ikkunaan, klikata Luo-painiketta ja valita 3D-objekti – > kapseli kuvassa 5. Tee tämä kolme kertaa tai kopioi ensimmäinen kohde, ja voit myös antaa niille nimet, jos haluat. Tämä esimerkki antaa kapseleille Nimet Char1, Char2, Char3.
kuva 5: kapselin kohteen luominen
sinun täytyy muuttaa niiden asentoa, jotta ne eivät ole päällekkäisiä. Muuttaaksesi objektin sijaintia, valitset yhden hierarkiassa ja siirryt Muuntokomponenttiin Tarkastajassa. Muuta sitten X -, y-ja z-paikannuskenttiä siirtääksesi objekteja sinne, minne haluat ne.
kuva 6: Kohteen sijainnin muokkaaminen
Taulukko 1 näyttää kaikkien kolmen kapselin tarkat paikat tässä esimerkissä.
Taulukko 1: Kaikki esineet ja niiden asemat maailmassa
objekti |
X-sijainti |
y-sijainti |
Z-sijainti |
Char1 |
|||
Char2 |
|||
Char3 |
voit tietysti vapaasti säätää mitä tahansa näistä numeroista, jos haluat. Seuraavana vuorossa on käyttöliittymä, joka näyttää skriptattavissa oleville objekteille annetut arvot. Aloita napsauttamalla hierarkian Luo-painiketta, mutta valitse tällä kertaa UI -> Kangas. Kun uusi Canvas-objekti on valittu, napsauta Luo-painiketta uudelleen ja valitse tällä kertaa Luo tyhjä lapsi. Lopuksi napsautat vielä kerran Luo-painiketta ja tällä kertaa valitse UI – > teksti. Vedä juuri luotu tekstiobjekti tyhjälle peliobjektille ja kopioi teksti neljä kertaa Ctrl + D: llä niin, että GameObject-kohdassa on yhteensä viisi tekstiobjektia. Kun olet valmis, Hierarkiasi pitäisi näyttää kuvassa 7 olevalta.
Kuva 7: nykyinen hierarkia
jokainen tekstiobjekti korreloi nimeen ja tilastoihin, jotka annetaan skriptattavissa olevan objektin kautta.nämä tilastot ovat maksimaalinen terveys, hyökkäys, puolustus ja nopeus. On hyödyllistä muuttaa Tekstikohteiden nimet sen edustamaan arvoon. Niin, ensimmäinen teksti objekti voidaan kutsua name_text, ja toinen voidaan kutsua attack_text, ja niin edelleen. Lisäksi, sinun täytyy muuttaa oletusteksti auttaa antamaan visuaalinen miten käyttöliittymä näyttää. Tämä tapahtuu navigoimalla tarkastajan Tekstikomponenttiin ja muuttamalla tekstin arvoa. Ja lopuksi, Säädä niiden asentoja niin, että ne eivät ole kaikki päällekkäin. Jotta tämä olisi helppoa, taulukossa 2 esitetään kaikki eri kohteiden nimet ja niiden arvot.
Taulukko 2: Kaikki Tekstiobjektit ja niiden oletusteksti-ja paikannusarvot
nimeä GameObject (kankaan alla) joksikin hieman kuvaavammaksi, kuten Char1Description, ja kopioi sitten pääobjekti. Nimeä kaksi kaksoiskappaletta Char2Description ja Char3Description ja aseta kolme objektia, joten ne ovat kapselin esineiden yläpuolella. Tässä esimerkissä Char1Description on X-asennossa -300, Char2Descrption 0 ja Char3Position 250. Kaikki Y-ja Z-positioarvot jätetään arvoon 0.
tie oli vähän pitkä, mutta projektiasetelma on valmis! Nyt tulee aika koodata ja nähdä, miten skriptattavissa olevat objektit luodaan ohjelmoinnin edetessä. Siirry Assets-ikkunassa komentosarjat-kansioon ja luo kaksi uutta komentosarjaa napsauttamalla hiiren kakkospainikkeella ja navigoimalla luodaksesi – > C# – komentosarjan. Näitä skriptejä pitäisi kutsua Charstateiksi ja Loadstateiksi. Kun ne on luotu, aloitat CharStats script, joten kaksoisnapsauta tätä script avata Visual Studio ja aloittaa koodausprosessi.
CharStats Script
luodaksesi Skriptattavan objektin, sinun on ensin lisättävä Create
valikkoon, jota olet käyttänyt materiaalien ja skriptien luomiseen. Voit tehdä tämän käyttämällä attribuuttia CreateAssetMenu
ja määrittämällä tiedostonimen ja sijainnin valikon sisällä. Sinun on myös muutettava, mistä luokasta CharStats
on peritty. Oletusarvoisesti jokainen C# – luokka Unity-projektissa perii MonoBehaviour
, mutta tämän skriptin tulee periä ScriptableObject
sen sijaan.
huomaa asetettaessa menuName
, että käytetään vinoviivaa merkkiä, joka osoittaa alivalikon käytön. Jos haluat, voit poistaa slash ja vain on Player Units vaihtoehto läsnä tarvitsematta navigoida edelleen luo-valikon kautta. Tässä tapauksessa alivalikko lisättiin ensisijaisesti osoittamaan, että voit järjestää skriptattavissa olevia objekteja mitä haluat. Tällöin valikko on Create – > hahmojen luonti – > Pelaajayksiköt. Jos haluat, toisessa skriptattavissa olevassa objektissa objekti voidaan luoda samalta polulta, mutta eri luo-vaihtoehdolla, kuten kohde.
koska objekti on skriptattavissa, ei ole tarvetta oletusarvolle Start
ja Päivitysmenetelmille, joten voit poistaa ne. Tämän objektin ensisijainen tarkoitus on pitää hallussaan toiselle objektille annettavaa dataa, mutta kaksi mukautettua menetelmää on myös luotu osoittamaan, miten skriptattavissa olevat objektit voivat tehdä muutakin kuin vain pitää dataa. Datasta puheen ollen, koodi, jolla määritellään, mitä tietoja tässä objektissa on, menee näin.:
1
2
3
4
5
6
|
public string charName;
public int attack;
public int defense;
public int speed;
public int maxHealth;
public Material newColor;
|
kuten edellä mainittiin, jokainen skriptattava objekti sisältää nimen ja joitakin arvoja neljälle eri tilastolle. Se sisältää myös tietoa siitä, mikä on hahmon uusi väri, kun Skriptattava objekti on käytössä. Arvot jokaiselle määritellään Unity editor, ja tietenkin, ne ovat erilaisia jokaisen objektin luotu.
nämä kaksi menetelmää pidetään yksinkertaisina. Yksi yksinkertaisesti tulostaa viestin debug konsoli sanomalla merkki on ladattu. Tämä viesti on painettu Start
– menetelmällä LoadStats
– kirjoituksella.
1
2
3
4
|
public void PrintMessage()
{
Vianetsintä.Loki (”+charName + ” – merkki on ladattu.”);
}
|
RandomizeStats
, toinen menetelmä, tekee täsmälleen nimensä mukaisesti. Se muuttaa Skriptattavan objektin arvot satunnaisluvuksi välillä 1 ja 20. Myöhemmin ohjelmoit projektin päivittämään käyttöliittymän uusilla arvoilla automaattisesti. Mutta se ei ole edes mielenkiintoisin kohta! Skriptattavissa olevan objektin tiedot ovat pysyviä, mikä tarkoittaa, että ne pysyvät samoina istunnossa pelin sulkemiseen asti. Tämä on erityisen hyödyllistä, jos teet pelin, joka koostuu useista kohtauksista, koska tavallisesti vanhat esineet poistetaan, ja uudet Ladataan uudelleen, kun uusi kohtaus avataan. Skriptattavissa oleva Objektidata on kuitenkin koskematon kohtausten välisessä siirrossa. Lisäksi tiedot pysyvät samoina työskennellessään Unity editorissa, kunnes itse editori suljetaan. Tämä tarkoittaa, että skriptattavissa olevien objektien sisältämiin tietoihin tehdyt muutokset, kun peliä ajetaan muokkaimesta, ovat läsnä, kun pelaat peliä muokkaimesta uudelleen, edellyttäen, että itse tietoihin ei tehdä muutoksia.
CharStats-kirjoituksessa ei ole muuta. Se voi vaikuttaa melko yksinkertaiselta, mutta projekti ei ole valmis. Olet ohjelmoinut kyvyn tehdä Skriptattavia esineitä omilla menetelmillään ja tiedoillaan, mutta kapselihahmosi eivät tiedä mitään näistä esineistä. Heidän mielestään Kirjoituskelpoisia esineitä ei ole olemassa. Voit korjata tämän, sinun täytyy avata LoadStats script ja koodata sitä, jotta objektit voivat käyttää skriptattavissa objektin tietoja päivittää käyttöliittymän ja muuttaa niiden väriä. Koodin pitäisi näyttää samalta kuin kuvassa 8.
Kuva 8: Complete CharStats Script
LoadStats Script
Don ’ t worry about changing where the class this script perii. Oletusarvo MonoBehaviour
on juuri se, mitä tarvitaan. Sen sijaan, sisällytä Uusi käyttää lauseke yläreunassa.
1
|
Unityenginen käyttö.UI;
|
mukaan lukien tämän avulla voit saada tekstiä käyttöliittymästä ja päivittää ne näyttämään arvot löytyy skriptattavissa esineitä. Nyt itse luokkaan, alkaen muuttujista.
1
2
3
4
5
6
7
8
|
// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;
|
kuten kommentissa todettiin, charStat
muuttuja on skriptattavissa oleva objekti, jota käytetään. Voit nähdä täällä, että saada nämä skriptattavissa esineitä ei eroa julistaa muita muuttuja. Myöhemmin skriptissä, saat muuttujia ja menetelmiä objektin sisällä ja käyttää niitä tässä skriptissä. Itse asiassa CharStats
: stä löytyvää PrintMessage
– menetelmää käytetään LoadStats
Start
– menetelmässä juuri nyt.
1
2
3
4
5
|
void Start()
{
DisplayStats ();
charStat.Tulostussivu();
}
|
kuten minkä tahansa muun ulkopuolisen skriptin kohdalla, sinun tarvitsee vain soittaa charStat
, jota seuraa PrintMessage
, saadaksesi kyseisen Skriptattavan objektin löytämän menetelmän. Tämä voi osoittautua erityisen hyödylliseksi, jos sinulla on esineitä, jotka kaikki ovat samanlaisia tai samanlaisia käyttäytymistä. Tässä tapauksessa kehittäjälle voi myös olla hyödyllistä, kuten tässä esimerkissä, tulostaa viestejä debug-konsolille. Jos jokin menisi vikaan ja epäilit, että Skriptattava objekti oli vika, voit käyttää debug-konsolin viestejä ongelman löytämiseksi.
juuri nyt on virhe sanoa DisplayStats
ei ole olemassa. Voit korjata tämän navigoimalla Update
– menetelmän alapuolella ja lisäämällä tämän koodin.
tässä kohtaa Skriptattavaan objektiin tallennetut arvot tulevat toistumaan. Kaikki ne aiemmin ilmoitetut tekstimuuttujat? Heille annetaan dataa näytettäväksi, joten ne kysymysmerkit, jotka asetit muokkaimeen, näyttävät nyt jotain arvoa. Myös, vaikka se ei varsinaisesti ole stat, sinänsä hahmon väriä muutetaan tässä kutsumalla currentColor.material
ja asettamalla se skriptattavissa olevaan objektiin asetettuun materiaaliin.
toisella charStats
menetelmällä, RandomizeStats
, ei ole vielä nähty käyttöä, joten sille pitäisi löytää paikka. Update
– menetelmässä ohjelma tarkistaa, onko välilyöntiä painettu. Jos on, niin se kutsuu RandomizeStats
ja antaa Skriptattavalle objektille joitakin uusia arvoja. Sitten DisplayStat
kutsutaan uudelleen,ja uudet arvot näytetään.
1
2
3
4
5
6
7
8
|
void Update()
{
if (Tulo.GetKeyDown(TäsmennyssivuAvaruus))
{
charStat.Randomizestatit ();
Displaystatit();
}
}
|
Tähän päättyy LoadStats
– skripti, ja näin päättyy tämän projektin koodausosuus. Koodin pitäisi näyttää samalta kuin kuvassa 9. Enää ei tarvitse kuin luoda muutama Skriptattava objekti, soveltaa niitä kapselin objektiin käyttäen LoadStats
ja kokeilla tätä uutta toimintoa. Muista tietysti säästää työsi ennen kuin palaat Unity-toimittajaksi.
Kuva 9: täydennä LoadStats-skripti
täydennä projekti
käyttääksesi skriptattavissa olevia objekteja, sinun täytyy ensin luoda ne. Napsauta Assets-ikkunassa skriptattavissa olevat objektit-kansion alla hiiren kakkospainikkeella ja siirry kohtaan Create -> Character Creation -> Player Units Kuvan 10 mukaisesti.
Kuva 10: Luodaan uusi Pelaajayksikkö, Skriptattava objekti
voit nimetä objektin miten haluat. Esimerkki perustaa nämä esineet pois perinteisistä roolipeliluokista, joten siinä on soturi, metsästäjä ja maagi. Valitse uusi objekti, siirry tarkastaja-ikkunaan ja anna arvot eri kentille. Täyttääksesi uuden värikentän, siirry Materiaalikansioon ja napsauta ja vedä haluamasi materiaali kenttään Kuvan 11 mukaisesti.
Kuva 11: Asettamalla objektin Uusi Värimateriaali
luo kaksi Skriptikelpoista objektia ja tee sama kuin ennen, antaen niille eri arvot eri kentille. Kun se on tehty, siirry hierarkia-ikkunaan ja valitse yksi char-objekteista. Anna heille sitten LoadStats-skripti komponenttina navigoimalla Assets-ikkunan komentosarjat-kansioon, löytämällä LoadStats-tiedostot ja vetämällä se tarkastaja-ikkunaan kuvan 12 mukaisesti.
Kuva 12: liittämällä LoadStats-skripti objektiin
Seuraavaksi sinun on täytettävä LoadStats-kentät. Aloita etsimällä skriptattavissa oleva objekti, jota haluat käyttää ensimmäisessä ”merkissäsi”, ja käytä sitä Char Stat-kenttään kuvan 13 mukaisesti. Muista, että skriptattavissa esineitä löytyy varat-ikkunan alla skriptattavissa esineitä.
kuva 13: asetus, jossa Skriptattava objekti Char1 saa tietoa
, täytä nyt tekstikentät. Hierarkiassa laajennat kangasta, jonka jälkeen laajennat hahmonkuvausobjektia, joka korreloi muokkaamasi kohteen kanssa. Esimerkiksi char1: n muokkaaminen tarkoittaa, että haluat laajentaa Char1descriptiota. Sitten ottaa tekstin objektit löytyy alla pääobjektin ja soveltaa niitä vastaaviin kenttiin kuten kuvassa 14.
Kuva 14: aseta kaikki tekstikentät
kun tekstikentät on täytetty, sinun tarvitsee vain saada objektin Mesh Renderaattori, jotta sinulla on pääsy materiaaliin, mikä mahdollistaa värimuutoksen. Kaikki mitä sinun tarvitsee tehdä, on napsauttaa ja vetää Mesh Renderer komponentti tarkastaja-ikkunassa ja vedä se nykyiseen Värikenttään kuten on esitetty if Kuva 15.
Kuva 15: Nykyisen värikentän
asettaminen toista edelliset vaiheet kahdelle muulle merkistölle, niin projekti on valmis. Kun olet valmis, napsauta Play-painiketta editorin yläreunassa ja tarkkaile, koska kolmella lähes identtisellä esineellä on hyvin erilaiset arvot. Jos jostain syystä jokin ei näytä oikealta, ensimmäinen paikka tarkistaa olisi skriptattavissa esineitä ja vakuuttaa itsellesi, että arvot ja värit näkyvät ovat niitä, jotka halusit. Muista tarkistaa myös uusi värikenttä.
kaikki nämä numerot ja niiden värit tulevat Skriptattavista olioista, jotka itse tulevat yhdestä mallista. Voit tehdä vieläkin skriptattavissa esineitä samoin ja kytke ne Char Stat kenttään objektin Load Stats komponentti ja on hyvin erilainen merkki. Kun suoritat peliä (Kuva 16), sinun pitäisi nähdä vianetsintäkonsolissa vasemmassa alakulmassa viesti, jossa kerrotaan, että merkki on ladattu. On olemassa kaksi muuta viestiä, mutta voit nähdä vain yhden viestin avaamatta koko debug-konsolia, joka löytyy kohdasta Window- > General – > Console. Voit myös painaa välilyöntiä saadaksesi joitakin täysin uusia tilastoja hahmoillesi. Jos lopetat pelin uudelleen, huomaat satunnaisesti luomasi arvot säilyvän, mikä osoittaa skriptattavissa olevien objektien pysyvyyden. He palaavat alkuperäisiin arvoihinsa joko syöttämällä arvot itse käsin objekteihin tai sulkemalla ja avaamalla editorin uudelleen.
Kuva 16: Scriptable Objects in action
Conclusion
Naturally, you can create monentyyppisiä Scriptable Objects for many type of objects. Tämä esimerkki osoitti niiden käytön kautta hahmoluokkia, mutta siellä on myös edellä mainitut kohteet esimerkki. Sitä voidaan käyttää myös paljon pienempiin esineisiin, kuten arcade-peleistä löytyviä lisävoimia muistuttaviin lisävoimiin. Käyttämällä Scriptable Objects, luo puhdas, helppo järjestelmä, jossa voit muuttaa ja ladata tietoja muutamalla painalluksella ja nähdä tulokset lähes välittömästi. Skriptattavien objektien käyttäminen tarkoittaa myös sitä, että luotavia skriptejä on vähemmän, sillä voit käyttää yhtä mallia useille objekteille. Riippumatta siitä, onko projekti on iso tai pieni, tai onko tiimisi on paljon jäseniä tai vain itse, skriptattavissa esineitä voi tehdä kaikkien kehitystä hieman helpompaa.