Snabbtips Så här kodar du en enkel karaktärsgeneratorgenerator

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.


Ställ in gränssnittet

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.


Skapa förnamn

Lägg till några Syllables

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!

Sätt förnamnet tillsammans

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:

  • Zagmonshi
  • Izenzag
  • Shifay
  • Rashblarg

Men det här namnet generatorn är ganska enkelt. Låt oss föröka våra resultat genom att lägga till efternamn.


Skapa efternamn

Lägg till några Syllables

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!

Få alltid att falla på plats

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:

  • Blargshiizen Maloabokor
  • Zagblarg Maloson
  • Rashzag Wonkli
  • Shifay Abomalo

Lägg till en suffix till slutet av namnet

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.


Slutsats

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:

  • Mellan namn
  • Fler namn suffixer (III, UBE, och så vidare)
  • Prefix (Sir, Lady, Count och liknande)
  • Andra tillägg ("Glagnarr Destructor")

Du kan även använda denna idé för andra saker: ge rymdskepp slumpmässiga namn eller skapa slumpmässiga objektbeskrivningar. Gå vild!


referenser

  • Bildkredit: Identifiering av Rémy Médard från Noun-projektet