En este tutorial, te mostraré cómo crear un generador de nombres aleatorio simple, que podrías usar para dar a los NPC al azar una gran variedad de nombres únicos o dar sugerencias a los nombres de jugadores cuando hacen clic en un Nuevo nombre botón.
El sistema básico es bastante simple, y puede integrarse en casi cualquier lenguaje de programación y entorno disponible. Lo construiremos en Unity, que debería ser relativamente fácil de configurar. Si desea consultar el código directamente, puede obtener los archivos de proyecto de GitHub.
Listo? Vámonos.
Crea un nuevo archivo JavaScript en Unity y llámalo. nombreGenerador
. Pon el siguiente código en él:
var currentName: String = "Alex"; función OnGUI () if (GUI.Button (Rect (10,10,100,50), "Nuevo nombre")) CreateNewName (); GUI.Box (Rect (120,10,200,50), currentName); función CreateNewName ()
A continuación, agregue este script a un gameObject
en la escena (poner en la cámara principal hará).
Esto crea una interfaz simple que mostrará el nombre que se creará. Si lo intentas, el botón no hará nada ahora, sin embargo..
Para generar un nuevo nombre, primero crearemos una lista de sílabas a partir de las cuales se ensamblará el nombre. Añade este código:
var firstNameSyllables: Array; function Start () firstNameSyllables = new Array (); firstNameSyllables.Push ("mon"); firstNameSyllables.Push ("fay"); firstNameSyllables.Push ("shi"); firstNameSyllables.Push ("zag"); firstNameSyllables.Push ("blarg"); firstNameSyllables.Push ("rash"); firstNameSyllables.Push ("izen");
Usted querrá agregar algunos más usted mismo; esto no es suficiente!
Para elegir un nombre, adapte el CrearNombreNombre ()
funciona como tal:
function CreateNewName () // Crea un primer nombre con 2-3 sílabas var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); para (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;
Este código elegirá aleatoriamente las sílabas de la lista, dos o tres veces, y las unirá. Luego eliminará la primera letra, la pondrá en mayúscula y la pegará de nuevo delante del nombre.
Cuando presionas el botón ahora, ¡obtienes un nombre ensamblado al azar de la lista! Puedes probarlo en esta compilación:
Estos son algunos de los nombres generados:
Pero este generador de nombres es bastante simple. Vamos a multiplicar nuestros resultados agregando apellidos..
Agreguemos una nueva lista de sílabas que solo se usarán en el apellido. El nuevo código se ve así:
var lastNameSyllables: Array; function Start () lastNameSyllables = new Array (); lastNameSyllables.Push ("malo"); lastNameSyllables.Push ("zak"); lastNameSyllables.Push ("abo"); lastNameSyllables.Push ("wonk");
Como antes, estos son sólo para empezar. Añade más sílabas para hacerlo más diverso.!
A continuación, adapta el CrearNombreNombre ()
funciona de esta manera:
function CreateNewName () // Crea un primer nombre con 2-3 sílabas var firstName: String = ""; var numberOfSyllablesInFirstName: int = Random.Range (2, 4); para (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;
Ahora, en lugar de solo obtener un nombre de la lista, el generador creará un primer nombre, pondrá un espacio detrás de él y luego creará un apellido.
Puedes probarlo en esta compilación aquí:
Estos son algunos de los nombres generados:
Como detalle final, agreguemos un sufijo, que aparecerá al final del apellido. Agregue este código al comienzo de la nombreGenerador
guión:
var nameSuffixes: Array; function Start () nameSuffixes = new Array (); nameSuffixes.Push ("hijo"); nameSuffixes.Push ("li"); nameSuffixes.Push ("ssen"); nameSuffixes.Push ("kor");
A continuación, agregue lo siguiente a CrearNombreNombre ()
, antes de que el nombre sea ensamblado al final:
// agrega un sufijo al apellido con una probabilidad del 50% si (Random.Range (0,100) < 50) lastName += nameSuffixes[Random.Range(0, nameSuffixes.length)];
Ahora hay un 50% de probabilidad de que un nombre generado tenga un nombre típico que termine.
En este tutorial, te mostré el código básico para formar un generador de nombres. Puede ampliar esto con variables y características adicionales. Intenta agregar:
También puede utilizar esta idea para otras cosas: asigne nombres a las naves espaciales o cree descripciones de elementos al azar. Enloquecer!