I den här handledningen visar jag dig hur du skapar en enkel slumpmässig namngivare som du kan använda för att ge slumpmässiga NPC: er ett stort antal unika namn eller ge ett spelarens namnförslag när de klickar på en Nytt namn knapp.
Det grundläggande systemet är ganska enkelt och kan byggas i stort sett vilket programmeringsspråk som finns tillgängligt. Vi bygger den i Unity, som ska vara relativt lätt att installera. Om du vill kolla in koden direkt kan du få projektfilerna från GitHub.
Redo? Nu går vi.
Skapa en ny JavaScript-fil i Unity och ring den nameGenerator
. Lägg följande kod i den:
var currentName: String = "Alex"; funktion OnGUI () if (GUI.Button (Rect (10,10,100,50), "Nytt namn")) CreateNewName (); GUI.Box (Rect (120,10,200,50), nuvarande namn); funktion CreateNewName ()
Lägg sedan till det här skriptet till en gameObject
i scenen (sätter in på huvudkameraet kommer att göra).
Detta skapar ett enkelt gränssnitt som visar namnet som kommer att skapas. Om du provar det, kommer det inte att göra någonting just nu.
För att skapa ett nytt förnamn skapar vi först en lista med stavelser från vilka namnet kommer att samlas. Lägg till den här koden:
var firstNameSyllables: Array; funktion Start () firstNameSyllables = new Array (); firstNameSyllables.Push ( "mon"); firstNameSyllables.Push ( "fay"); firstNameSyllables.Push ( "shi"); firstNameSyllables.Push ( "sack"); firstNameSyllables.Push ( "blarg"); firstNameSyllables.Push ( "utslag"); firstNameSyllables.Push ( "izen");
Du vill lägga till lite mer själv; detta är inte tillräckligt långt!
För att faktiskt välja ett namn, anpassa CreateNewName ()
funktion som så:
funktion CreateNewName () // Skapar ett förnamn med 2-3 stavelser var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); för (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;
Denna kod väljer slumpmässigt stavelser från listan, två eller tre gånger, och stränger dem tillsammans. Då tar det bort det första bokstaven, kapitaliserar det och håller det tillbaka framför namnet.
När du trycker på knappen nu får du ett slumpmässigt samlat namn från listan! Du kan prova i den här byggnaden:
Här är några av de genererade namnen:
Men det här namnet generatorn är ganska enkelt. Låt oss föröka våra resultat genom att lägga till efternamn.
Låt oss lägga till en ny lista med stavelser som endast kommer att användas i efternamnet. Den nya koden ser ut så här:
Var LastNameSyllables: Array; funktion Start () lastNameSyllables = new Array (); lastNameSyllables.Push ( "malo"); lastNameSyllables.Push ( "zak"); lastNameSyllables.Push ( "ABO"); lastNameSyllables.Push ( "wonk");
Som tidigare är det bara för att komma igång. Lägg till fler stavelser för att göra det mer mångsidigt!
Anpassa därefter CreateNewName ()
fungera så här:
funktion CreateNewName () // Skapar ett förnamn med 2-3 stavelser var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); för (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, istället för att bara få ett namn från listan, skapar generatorn ett förnamn, lägger ett mellanslag efter det och skapar sedan ett efternamn.
Du kan prova i den här byggnaden här:
Här är några av de genererade namnen:
Som en slutgiltig detalj, låt oss lägga till ett suffix, som kommer att visas vid slutet av efternamnet. Lägg till den här koden till början av nameGenerator
manus:
var nameSuffixes: Array; funktion Start () nameSuffixes = new Array (); nameSuffixes.Push ( "son"); nameSuffixes.Push ( "li"); nameSuffixes.Push ( "SSEN"); nameSuffixes.Push ( "kor");
Lägg sedan till följande till CreateNewName ()
, innan namnet samlas i slutet:
// lägger till ett suffix till efternamnet med en chans på 50% om (Random.Range (0.100) < 50) lastName += nameSuffixes[Random.Range(0, nameSuffixes.length)];
Nu finns det 50% chans att ett genererat namn kommer att få ett typiskt namn som slutar.
I den här handledningen visade jag dig den grundläggande koden för att skapa en namngivare. Du kan förlänga detta med extra variabler och funktioner. Försök lägga till:
Du kan även använda denna idé för andra saker: ge rymdskepp slumpmässiga namn eller skapa slumpmässiga objektbeskrivningar. Gå vild!