Redgate Hub

stel dat u een role-playing video game maakt en u een eenvoudigere manier nodig hebt om statistieken, eigenschappen en nog veel meer toe te wijzen aan verschillende items. Hoewel u Unity prefabs kunt gebruiken om dit te doen en vervolgens de waarden van elke individuele kopie van de prefab te wijzigen, is dit een ongemakkelijke manier om de taak uit te voeren. Voor starters, deze methode verbruikt meer van je geheugen, iets wat je nodig hebt om te besparen als u van plan bent op het maken van een groot spel. Bovendien, als u wijzigingen moet aanbrengen in de in-game objecten, het is gewoon niet zo efficiënt om dit te doen als er meerdere kopieën van prefabs rondslingeren. Dit wordt vooral een probleem als je een groter team om mee te werken, dus je wilt dingen gemakkelijker te veranderen voor andere teamleden. Zelfs als je niet in een team, deze methode zou gewoon moeilijker op je als je werkt.

om het in een situatie als deze gemakkelijker te maken, hebt u Scriptbare objecten tot uw beschikking. En wat zijn Scriptbare objecten? Simpel gezegd, het zijn datacontainers. De Unity Ontwikkelaar maakt een basis sjabloon voor deze containers, het definiëren van welke informatie elk object moet bevatten. Vervolgens worden de Scriptbare objecten gemaakt van dat sjabloon, die vervolgens worden gebruikt door Unity game objects. In het bovenstaande voorbeeld kan een enkel Scriptbaar Object worden gebruikt om te definiëren wat de verschillende eigenschappen van een item zijn. Vervolgens wordt naar dat Scriptbare Object verwezen door alle kopieën van het item. Voordat u de statistieken van een item wilt wijzigen, moet u de waarden van elke kopie van het item wijzigen. Met Scriptbare objecten hoeft u nu slechts één object te wijzigen (het Scriptbare Object) en alle objecten die gegevens van dat Scriptbare Object krijgen, veranderen tegelijkertijd.

het is altijd handig om deze dingen in actie te zien, Maak een nieuw project aan. Dit project toont Scriptbare objecten en hoe ze u kunnen helpen. Het project bestaat uit drie spelobjecten bedoeld om drie karakters te vertegenwoordigen. Elk teken erft een aantal waarden van een Scriptbaar Object. Deze waarden zijn maximale gezondheid, aanval, verdediging, snelheid, en een naam en kleur voor het karakter. Een eenvoudige gebruikersinterface geeft deze waarden weer, zodat u gemakkelijk de resultaten van het toepassen van Scriptbare objecten kunt zien. Nu je een einddoel hebt, is het tijd om te creëren.

Project Setup

ervan uitgaande dat u deze ideeën in een nieuw project zult implementeren, opent u de Unity Hub-toepassing en maakt u een nieuw project aan zoals getoond in Figuur 1.

figuur 1: Een nieuw project

in het volgende venster, geef het project een naam van uw keuze en beslis over het bestandspad. Hoewel u dit project in elk sjabloon kunt uitvoeren, gebruikt dit voorbeeld het 3D-projectsjabloon zoals weergegeven in Figuur 2. Het is aan te raden om deze sjabloon te gebruiken als je wilt volgen.

Figuur 2: het instellen van de projectnaam, het type en de locatie

zodra het project is gemaakt, wilt u zich organiseren. In uw Assets-venster moet u drie mappen maken door met de rechtermuisknop op het venster te klikken en te navigeren naar map-> maken, zoals weergegeven in Figuur 3.

Figuur 3: Een nieuwe map

aanmaken terwijl u hier bent, is het een goed idee om drie materialen te laten maken. Deze materialen worden gebruikt om de kleuren van verschillende objecten te veranderen na het materiaal dat het Scriptbare Object specificeert. Om deze materialen te maken, navigeert u naar de map materialen en klikt u opnieuw met de rechtermuisknop, dit keer selecteert u-> materiaal maken. Bij het benoemen van het materiaal, is het raadzaam om het een naam te geven die correleert met de kleur. Dit eerste materiaal kan bijvoorbeeld rood worden genoemd. Om deze kleur in te stellen, moet u het nieuw gemaakte materiaal selecteren en naar het venster Inspector navigeren. In de Albedo veld, er is een kleurkiezer weergegeven in Figuur 4 kunt u klikken op om de te openen, goed, kleurkiezer.

Figuur 4: het openen van de kleurkiezer

de kleur wordt gewijzigd door de kleine cirkel in de Kleurkiezer te verplaatsen of door de RGB-waarden direct in te voeren in de onderste helft van het kleurkiezervenster. In het bovenstaande voorbeeld zouden de RGB-waarden 255, 0, 0 zijn. Hierna moet u nog twee materialen maken en hun kleuren toewijzen. Dit voorbeeld maakt gebruik van groen en blauw, maar ze kunnen elke kleur van uw keuze.

nu is het tijd om de werkelijke scène te maken waar dit spel plaatsvindt. Het bestaat uit twee belangrijke delen-er is de gebruikersinterface die de statistieken gegeven aan verschillende scriptbare objecten en de drie capsules die tekens weergeeft. De “karakters” zijn het makkelijkste deel, dus je kunt daar beginnen. Het enige wat u hoeft te doen is naar het hiërarchievenster te gaan, op de knop Maken te klikken en 3D-Object – > Capsule te kiezen die in Figuur 5 wordt getoond. Doe dit drie keer of kopieer het eerste object, en je kunt ze ook namen geven als je wilt. Dit voorbeeld geeft de capsules de namen Char1, Char2, Char3.

Figuur 5: het maken van een capsule-object

u moet hun posities wijzigen, zodat ze elkaar niet overlappen. Als u de positie van het object wilt wijzigen, selecteert u er een in de hiërarchie en navigeert u naar de transformeer-component in de Inspector. Wijzig vervolgens de positioneringsvelden x, y en z om de objecten te verplaatsen waar u ze wilt.

Figuur 6: Positie

bewerken Tabel 1 toont de exacte posities van alle drie de capsules in dit voorbeeld.

Tabel 1: Alle objecten en hun plaats in de wereld

Object

X-Positie

Y-Positie

Z-Positie

Char1

Char2

Char3

Natuurlijk voel je vrij om te passen een van deze nummers als u wilt. De volgende is de gebruikersinterface, die de waarden geeft aan Scriptbare objecten. Om te beginnen moet u op de knop Aanmaken van de hiërarchie klikken, maar deze keer kiest u UI -> Canvas. Klik vervolgens met het nieuwe Canvas-object geselecteerd op de maak knop Opnieuw en selecteer deze keer Maak een leeg kind. Tot slot klikt u nogmaals op de knop Maken en deze keer kiest u UI -> tekst. Sleep het nieuw aangemaakte tekstobject naar het lege spelobject en dupliceer vier keer tekst met Ctrl + D, zodat er in totaal vijf tekstobjecten onder GameObject staan. Als je klaar bent, zou je hiërarchie eruit moeten zien als die in Figuur 7.

Figuur 7: de huidige hiërarchie

elk tekstobject correleert met de naam en statistieken die worden gegeven via Scriptable Object, die statistieken zijn maximum health, attack, defense en speed. Het is handig om de namen van tekstobjecten te wijzigen in de waarde die het vertegenwoordigt. Het eerste tekstobject kan dus name_text worden genoemd, en het tweede kan attack_text worden genoemd, enzovoort. Daarnaast moet u de standaardtekst wijzigen om een visueel beeld te geven van hoe de gebruikersinterface eruit ziet. Dit wordt gedaan door naar de Tekstcomponent in de Inspector te navigeren en de tekstwaarde te wijzigen. En tot slot, pas hun posities aan zodat ze niet allemaal op elkaar gestapeld zijn. Om dit eenvoudig te houden, toont Tabel 2 alle verschillende objectnamen en wat hun respectievelijke waarden zouden moeten zijn.

Tabel 2: alle tekstobjecten en hun standaard tekst-en positioneringswaarden

hernoemen GameObject (onder Canvas) naar iets meer beschrijvend, zoals Char1Description, en dupliceren vervolgens het bovenliggende object. Hernoem de twee duplicaten naar Char2Description en Char3Description en plaats de drie objecten, zodat ze boven de capsule objecten. Dit voorbeeld plaatst Char1Description op een X positie van -300, Char2Descrption op 0, en Char3positie op 250. Alle y-en Z-positiewaarden blijven op 0 staan.

het was een beetje een lange weg, maar de projectopstelling is voltooid! Nu is het tijd om te coderen en te zien hoe Scriptbare objecten worden gemaakt voor zover het programmeren gaat. Navigeer in het venster Assets naar de map Scripts en maak twee nieuwe scripts door met de rechtermuisknop te klikken en te navigeren naar Create-> C# Script. Deze scripts zouden CharStats en LoadStats moeten worden genoemd. Zodra deze zijn gemaakt, start je in het script CharStats, dus dubbelklik op dit script om Visual Studio te openen en aan de slag te gaan met het coderingsproces.

CharStats Script

om een Scriptbaar Object te maken, moet u eerst toevoegen aan het Create menu dat u hebt gebruikt om materialen en scripts te maken. Hiervoor gebruikt u het attribuut CreateAssetMenu en specificeert u de standaard bestandsnaam en locatie in het menu. Ook moet je veranderen van welke klasse CharStats erft. Standaard erft elke C# – klasse in een Unity-project van MonoBehaviour, maar dit script moet in plaats daarvan van ScriptableObject erven.

merk bij het instellen van menuName op dat een schuine streep wordt gebruikt, wat het gebruik van submenu ‘ s aangeeft. Als je wilt, je zou kunnen verwijderen van de slash en gewoon de speler eenheden optie aanwezig zonder verder te navigeren door het menu maken. In dit geval werd het submenu voornamelijk toegevoegd om te laten zien dat u uw Scriptbare objecten kunt organiseren op wat u maar wilt. In dit geval is het menu Create -> Character Creation -> Player Units. Als u wilt, kunt u in een ander Scriptbaar Object het object laten maken vanuit hetzelfde pad, maar met een andere create optie, zoals Item.

omdat het een Scriptbaar Object is, zijn de standaard Start en Updatemethoden niet nodig, dus u kunt deze verwijderen. Het primaire doel van dit object is om gegevens vast te houden die aan een ander object worden gegeven, maar er worden ook twee aangepaste methoden gemaakt om aan te tonen hoe Scriptbare objecten meer kunnen doen dan alleen gegevens vasthouden. Het spreken van de gegevens, de code voor het bepalen van welke gegevens dit object bevat gaat als volgt:

1
2
3
4
5
6

public string charName;
public int aanval;
public int verdediging;
public int snelheid;
public Int maxHealth;
Public Material newColor;

zoals eerder vermeld, bevat elk scriptbaar object een naam en enkele waarden voor vier verschillende statistieken. Het bevat ook informatie over wat de nieuwe kleur van het karakter zodra het Scriptbare Object wordt toegepast. De waarden voor elk zijn gedefinieerd in de Unity editor, en natuurlijk, zullen ze anders zijn voor elk object gemaakt.

de twee methoden worden eenvoudig gehouden. Men drukt gewoon een bericht naar de debug console zeggen dat het teken is geladen. Dit bericht wordt afgedrukt volgens de Start methode van het LoadStats script.

1
2
3
4

public void PrintMessage()
{
Debug.Log (“the” + charName + ” character has been loaded.”);
}

RandomizeStats, de tweede methode, doet precies zoals de naam al doet vermoeden. Het verandert de waarden van het Scriptbare Object in een willekeurig getal tussen 1 en 20. Later programmeer je het project om de gebruikersinterface automatisch bij te werken met de nieuwe waarden. Maar dat is niet eens het meest interessante deel! Data in een Scriptbaar Object is persistent, wat betekent dat ze hetzelfde blijven voor de sessie tot het spel is gesloten. Dit is vooral handig als je een spel maakt dat uit meerdere scènes bestaat, omdat gewoonlijk oude objecten worden verwijderd en nieuwe opnieuw worden geladen als een nieuwe scène wordt geopend. Echter, Scriptable Object data is onaangeroerd in de overgang tussen scènes. Bovendien blijven de gegevens hetzelfde tijdens het werken in de Unity editor totdat de editor zelf is gesloten. Dit betekent dat wijzigingen in de gegevens binnen Scriptbare objecten tijdens het uitvoeren van het spel van de editor aanwezig zijn zodra u het spel van de editor opnieuw te spelen, op voorwaarde dat er geen wijzigingen worden aangebracht in de gegevens zelf.

Dit is alles wat er is in het CharStats script. Het lijkt misschien vrij eenvoudig, maar het project is niet voltooid. Je hebt de mogelijkheid geprogrammeerd om Scriptbare objecten te maken met zijn eigen methoden en gegevens, maar je capsule-personages weten niets over deze objecten. Wat hen betreft, bestaan de Scriptbare objecten niet. Om dit op te lossen, moet u het LoadStats-script openen en het coderen, zodat de objecten de gegevens van een Scriptbaar Object kunnen gebruiken om de gebruikersinterface bij te werken en hun kleur te veranderen. De code moet er vergelijkbaar uitzien met Figuur 8.

Figuur 8: Complete charstats script

LoadStats Script

maak je geen zorgen over het veranderen van de klasse die dit script erft. De standaard MonoBehaviour is precies wat nodig is. In plaats daarvan, voeg een nieuwe using statement aan de bovenkant.

1
met behulp van UnityEngine.UI;

Inclusief dit kunt u de tekst van de gebruikersinterface te krijgen en bij te werken om de waarden in de Scriptable objecten weer te geven. Nu, naar de klas zelf, beginnend met variabelen.

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;

zoals opgemerkt in het commentaar, is de variabele charStat het Scriptbare Object dat wordt gebruikt. U kunt hier zien dat het verkrijgen van deze Scriptbare objecten is niet anders dan het declareren van een andere variabele. Later in het script krijg je de variabelen en methoden binnen het object en gebruik je ze in dit script. In feite wordt de PrintMessage methode gevonden in CharStats op dit moment gebruikt in LoadStats Start methode.

1
2
3
4
5

void Start()
{
DisplayStats();
charStat.PrintMessage();
}

net als bij elk ander script buiten het script, hoeft u alleen charStat gevolgd door PrintMessage aan te roepen om de methode te vinden in dat Scriptbare Object. Dit kan vooral nuttig zijn als je objecten hebt die allemaal hetzelfde of identiek gedrag vertonen. In dit geval kan het ook nuttig zijn voor de ontwikkelaar om, zoals in dit voorbeeld, berichten af te drukken naar de debug console. Als er iets mis zou gaan en u vermoedde dat het Scriptbare Object fout was, kunt u de foutopsporingsconsole-berichten gebruiken om het probleem te vinden.

op dit moment is er een fout die zegt dat DisplayStats niet bestaat. Om dit op te lossen, navigeert u onder de Update methode en voegt u deze code toe.

hier worden de waarden weergegeven die zijn opgeslagen in het Scriptbare Object. Al die tekstvariabelen die eerder zijn aangegeven? Ze krijgen data om weer te geven, dus die vraagtekens die je in de editor hebt ingesteld, geven nu een waarde weer. Hoewel het niet echt een stat is, wordt de kleur van het teken hier veranderd door currentColor.material aan te roepen en het in te stellen op het materiaal dat is ingesteld in het Scriptbare Object.

de tweede charStats methode, RandomizeStats, is nog niet gebruikt, dus je moet er een plaats voor vinden. In de Update methode controleert het programma of de spatiebalk is ingedrukt. Als dat zo is, dan roept het RandomizeStats aan en geeft het Scriptbare Object enkele nieuwe waarden. Dan wordt DisplayStat opnieuw aangeroepen en worden de nieuwe waarden weergegeven.

1
2
3
4
5
6
7
8

void Update()
{
if (Ingang.GetKeyDown (Sleutelcode.Spatie))
{
charStat.RandomizeStats ();
DisplayStats();
}
}

hiermee eindigt het LoadStats script, waarmee het coderingsgedeelte van dit project wordt beëindigd. De code moet er vergelijkbaar uitzien met Figuur 9. Het enige wat nu nog te doen is een paar Scriptbare objecten te maken, toe te passen op het capsule-object met behulp van LoadStats, en probeer deze nieuwe functionaliteit uit. Natuurlijk, zorg ervoor dat u uw werk op te slaan voordat u terugkeert naar de Unity editor.

figuur 9: Complete loadstats script

Project

Voltooien om Scriptbare objecten te gebruiken, moet u ze eerst aanmaken. In het venster Assets, onder de map Scriptable Objects, klikt u met de rechtermuisknop en navigeert u naar Create-> Character Creation- > Player Units zoals weergegeven in Figuur 10.

Figuur 10: Een nieuwe Afspeeleenheid aanmaken, een Scriptbaar Object

u kunt het object een naam geven zoals u wilt. Het voorbeeld baseert deze objecten op traditionele role-playing game klassen, dus het zal een krijger, jager, en mage hebben. Selecteer het nieuwe object, navigeer dan naar het venster Inspector en geef waarden op aan de verschillende velden. Om het nieuwe kleurveld in te vullen, navigeert u gewoon naar uw Materiaalmap en klikt u op en sleept u het gewenste materiaal naar het veld zoals weergegeven in Figuur 11.

Figuur 11: Het nieuwe kleurenmateriaal van het object instellen

maak nog twee Scriptbare objecten en doe hetzelfde als voorheen, waardoor ze verschillende waarden krijgen voor de verschillende velden. Zodra dat is gedaan, verplaatsen naar de hiërarchie venster en selecteer een van de char objecten. Geef ze dan het LoadStats-script als component door naar de map Scripts in het Assets-venster te navigeren, LoadStats te vinden en het naar het Inspector-venster te slepen zoals getoond in Figuur 12.

Figuur 12: LoadStats script koppelen aan een object

vervolgens moet u de LoadStats velden invullen. Om te beginnen, zoek een Scriptbaar Object dat je wilt gebruiken op je eerste “karakter” en pas het toe op het Char Stat veld zoals getoond in Figuur 13. Onthoud dat Scriptbare objecten worden gevonden in het venster Assets onder Scriptbare objecten.

Figuur 13: instelling waar het Scriptbare Object Char1 is om gegevens

te krijgen vul nu de tekstvelden in. In de hiërarchie vouwt u Canvas uit, gevolgd door het object karakterbeschrijving uit te breiden dat correleert met het object dat u momenteel bewerkt. Bijvoorbeeld, het bewerken van Char1 betekent dat je Char1Description wilt uitbreiden. Neem vervolgens de tekstobjecten die onder het bovenliggende object zijn gevonden en pas ze toe op de overeenkomstige velden zoals weergegeven in Figuur 14.

Figuur 14: alle tekstvelden

als de tekstvelden zijn ingevuld, hoeft u alleen maar de Mesh-Renderer van het object te krijgen, zodat u toegang hebt tot het materiaal, waardoor de kleurverandering mogelijk is. Het enige wat u hoeft te doen is klikken en slepen de Mesh Renderer component in het venster Inspector en sleep het in de huidige kleur veld zoals weergegeven als figuur 15.

figuur 15: Instellen van het huidige kleurveld

herhaal de vorige stappen voor de andere twee karakterobjecten, en u zult het project hebben voltooid. Als u klaar bent, klikt u op de knop Afspelen boven aan de editor en observeert u dat drie vrijwel identieke objecten zeer verschillende waarden hebben. Als Om een of andere reden iets niet goed op zoek is, de eerste plaats om te controleren zou uw Scriptable objecten en verzeker jezelf dat de waarden en kleuren weergegeven zijn degenen die je wilde. Vergeet niet om het nieuwe kleurenveld ook te controleren.

al deze getallen en hun kleuren zijn afkomstig van Scriptbare objecten, die zelf afkomstig zijn van één sjabloon. Je zou ook nog meer Scriptbare objecten kunnen maken en ze in het Char Stat-veld in de Load Stats-component van een object kunnen steken en een heel ander karakter hebben. Tijdens het uitvoeren van het spel (Figuur 16), zou je een bericht moeten zien in de debug console in de linkerbenedenhoek waarin staat dat een teken is geladen. Er zijn twee andere berichten, maar u kunt slechts het ene bericht zien zonder de volledige debugconsole te openen, te vinden in venster – > Algemeen – > Console. U kunt ook op de spatiebalk om een aantal volledig nieuwe statistieken voor uw personages te krijgen. Als je het spel stopt en het dan opnieuw uitvoert, zul je merken dat de waarden die je willekeurig hebt gegenereerd persist zijn, wat de persistentie van Scriptbare objecten aantoont. Ze zullen terugkeren naar hun oorspronkelijke waarden, hetzij door de waarden handmatig in te voeren in de objecten zelf of door het sluiten en heropenen van de editor.

Figuur 16: Scriptbare objecten in actie

conclusie

natuurlijk kunt u meerdere typen Scriptbare objecten maken voor vele typen objecten. Dit voorbeeld demonstreerde hun gebruik via karakter klassen, maar er is ook de bovengenoemde items voorbeeld. Het kan zelfs worden gebruikt voor veel kleinere objecten, zoals power-ups die doen denken aan die in arcade games. Door Scriptbare objecten te gebruiken, creëer je een schoon, eenvoudig systeem waar je gegevens kunt wijzigen en laden met een paar toetsaanslagen en de resultaten vrijwel direct kunt zien. Het gebruik van Scriptbare objecten betekent ook minder scripts om te maken, omdat u één sjabloon kunt gebruiken voor meerdere objecten. Of uw project nu groot of klein is, of dat uw team veel leden heeft of alleen uzelf, Scriptbare objecten kunnen ieders ontwikkeling een beetje makkelijker maken.

You might also like

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.