In deze zelfstudie laat ik je zien hoe je een eenvoudige willekeurige naamgenerator maakt, die je zou kunnen gebruiken om willekeurige NPC's een enorme verscheidenheid aan unieke namen te geven of een speler suggesties te geven als ze op een Nieuwe naam knop.
Het basissysteem is vrij eenvoudig en kan in vrijwel elke programmeertaal en -omgeving worden ingebouwd. We gaan het in Unity bouwen, wat relatief eenvoudig in te stellen zou moeten zijn. Als u de code rechtstreeks wilt bekijken, kunt u de projectbestanden van GitHub downloaden.
Klaar? Laten we gaan.
Maak een nieuw JavaScript-bestand in Unity en noem het nameGenerator
. Plaats de volgende code erin:
var currentName: String = "Alex"; function OnGUI () if (GUI.Button (Rect (10,10,100,50), "New Name")) CreateNewName (); GUI.Box (Rect (120,10,200,50), currentName); functie CreateNewName ()
Voeg vervolgens dit script toe aan a gameObject
in de scène (inschakelen voor de hoofdcamera).
Hiermee wordt een eenvoudige interface gemaakt die de naam weergeeft die wordt gemaakt. Als je het uitprobeert, doet de knop op dit moment niets.
Om een nieuwe voornaam te genereren, maken we eerst een lijst met lettergrepen waaruit de naam wordt samengesteld. Voeg deze code toe:
var firstNameSyllables: Array; function Start () firstNameSyllables = new Array (); firstNameSyllables.Push ( "maandag"); firstNameSyllables.Push ( "fay"); firstNameSyllables.Push ( "shi"); firstNameSyllables.Push ( "zag"); firstNameSyllables.Push ( "blarg"); firstNameSyllables.Push ( "rash"); firstNameSyllables.Push ( "IZEN");
Je zult er zelf nog wat meer aan toe willen voegen; dit is veruit niet genoeg!
Om de naam daadwerkelijk te kiezen, past u de CreateNewName ()
functioneer als volgt:
function CreateNewName () // Creëert een voornaam met 2-3 lettergrepen var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); for (var i: int = 0; i < numberOfSyllablesInFirstName; i++) firstName += firstNameSyllables[Random.Range(0, firstNameSyllables.length)]; var firstNameLetter: String = ""; firstNameLetter = firstName.Substring(0,1); firstName = firstName.Remove(0,1); firstNameLetter = firstNameLetter.ToUpper(); firstName = firstNameLetter + firstName;
Deze code pakt willekeurig lettergrepen uit de lijst, twee of drie keer, en rijgt ze samen. Vervolgens wordt de eerste letter verwijderd, wordt deze hoofdletter gemaakt en blijft deze voor de naam staan.
Wanneer u nu op de knop drukt, krijgt u een willekeurig samengestelde naam uit de lijst! Je kunt het uitproberen in deze build:
Hier zijn enkele van de gegenereerde namen:
Maar deze naamgenerator is vrij eenvoudig. Laten we onze resultaten vermenigvuldigen door namen toe te voegen.
Laten we een nieuwe lijst met lettergrepen toevoegen die alleen in de achternaam zal worden gebruikt. De nieuwe code ziet er zo uit:
var lastNameSyllables: Array; function Start () lastNameSyllables = new Array (); lastNameSyllables.Push ( "malo"); lastNameSyllables.Push ( "zak"); lastNameSyllables.Push ( "ABO"); lastNameSyllables.Push ( "wonk");
Zoals eerder, deze zijn alleen maar om u op weg te helpen. Voeg meer lettergrepen toe om het meer divers te maken!
Pas vervolgens de CreateNewName ()
functioneer op deze manier:
function CreateNewName () // Creëert een voornaam met 2-3 lettergrepen var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); for (var i: int = 0; i < numberOfSyllablesInFirstName; i++) firstName += firstNameSyllables[Random.Range(0, firstNameSyllables.length)]; var firstNameLetter: String = ""; firstNameLetter = firstName.Substring(0,1); firstName = firstName.Remove(0,1); firstNameLetter = firstNameLetter.ToUpper(); firstName = firstNameLetter + firstName; //Creates a last name with 1-2 syllables var lastName: String = ""; var numberOfSyllablesInLastName: int = Random.Range(1, 3); for (var j: int = 0; j < numberOfSyllablesInLastName; j++) lastName += lastNameSyllables[Random.Range(0, lastNameSyllables.length)]; var lastNameLetter: String = ""; lastNameLetter = lastName.Substring(0,1); lastName = lastName.Remove(0,1); lastNameLetter = lastNameLetter.ToUpper(); lastName = lastNameLetter + lastName; //assembles the newly-created name currentName = firstName + " " + lastName;
Nu, in plaats van slechts één naam uit de lijst te halen, maakt de generator een voornaam, plaatst er een spatie achter en maakt dan een achternaam aan.
Je kunt het hier in deze build proberen:
Hier zijn enkele van de gegenereerde namen:
Laten we als laatste detail een achtervoegsel toevoegen, dat aan het einde van de achternaam verschijnt. Voeg deze code toe aan het begin van de nameGenerator
script:
var nameSuffixes: Array; function Start () nameSuffixes = new Array (); nameSuffixes.Push ( "zoon"); nameSuffixes.Push ( "li"); nameSuffixes.Push ( "ssen"); nameSuffixes.Push ( "kor");
Voeg vervolgens het volgende toe aan CreateNewName ()
, voordat de naam aan het eind wordt verzameld:
// voegt een achtervoegsel toe aan de achternaam met een kans van 50% indien (Random.Range (0,100) < 50) lastName += nameSuffixes[Random.Range(0, nameSuffixes.length)];
Nu is er een kans van 50% dat een gegenereerde naam een typische naam eindigt.
In deze tutorial toonde ik je de basiscode om een naamgenerator te vormen. U kunt dit uitbreiden met extra variabelen en functies. Probeer toe te voegen:
Je kunt dit idee ook voor andere dingen gebruiken: geef willekeurige namen voor ruimteschepen of maak willekeurige itembeschrijvingen. Ga wild!