Aprende Unity [1]

Hola bienvenido al comienzo de esta hermosa capacitación que le voy a brindar de manera gratuita. Si aún no sabe como es la forma de esta capacitación, le invito a leer el post anterior AQUÍ. Bien, pasaremos a ver el temario de lo que veremos en el día de hoy.

Temario

Propiedades

Las propiedades son muy útiles para mantener el principio de encapsulamiento que rige en la programación orientada a objetos(POO).

Operador Ternario

Sirve mucho para reducir líneas de código, es un condicional simple en una sola línea de código.

Estáticos

Variables y métodos estáticos, son valores o acciones accesibles desde cualquier sitio.

Sin aún no ha visto el video de práctica, aquí se lo dejaré. Si ya ha visto el video simplemente lo puede saltear o verlo nuevamente si lo desea.

Ahora daremos comienzo a la teoría. ¿Esta preparado? Espero que si. Acomódese bien y comenzamos.

TEORÍA

PROPIEDADES

Bueno antes de comenzar vamos a repasar el resumen que he dejado más arriba. 
«Las propiedades son muy útiles para mantener el principio de encapsulamiento que rige en la programación orientada a objetos(POO).»

Para comenzar debemos conocer algunos de los principios del paradigma orientado a objetos, el cual es utilizado por Unity. Puntualmente debemos saber que nos dice el principio de encapsulamiento. Antes de eso veremos que nos dice wikipedia al respecto de la POO.

programación orientada a objetos

Los objetos son entidades que tienen un determinado «estado», «comportamiento (método)» e «identidad»:

  • La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una «programación estructurada camuflada» en un lenguaje de POO.

La programación orientada a objetos difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.

Fuente :»es.wikipedia.org»

Principio de encapsulamiento

Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño estructurado) de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Fuente :»es.wikipedia.org»

explicación

Bueno ahora que ya sabemos a grandes rasgos de qué trata la programación orientada a objetos y el principio o característica de encapsulamento de dicho paradigma, es hora de darle nuestra explicación.
Pasaremos a explicar el cómo y porqué utilizar este principio y cómo las propiedades son una parte fundamental para respetarlo.

Imaginemos que cada clase es un objeto independientemente que esto no es real, ya que un objeto es una instancia (creación) de una clase, pero para simplificar el ejemplo vamos a suponer que así es. 
Si cada objeto tiene todas sus partes abiertas (métodos y variables) cualquiera puede entrar y alterarlo causando daños en su funcionamiento. Entonces lo que debemos hacer es controlar ese acceso, no darle libertad a cualquier para acceder sino sólo compartir la información que necesita el otro objeto de mi.

Vamos a poner un ejemplo, si tenemos sin protección al personaje, es posible que por un fallo de la interfaz de usuario o de un enemigo haga que el personaje se comporte de manera errónea. Al intentar solucionar ese comportamiento indebido, lo primero que iremos a ver es si el personaje posee algún error, incluso es posible que hagamos cambios en su código incluso cuando ahí no radica nuestro error.
Ahora viene el gran problema, puede pasar que rompas el código del personaje intentado solucionar ese problema, o en el mejor caso solo desperdicie valioso tiempo intentando llegar al error. Usted dirá que es fácil encontrar el error, simplemente se ven las referencias y se detectará que el enemigo provoca el error. A simple vista esto parece estar en lo correcto pero a medida que el proyecto crece y las referencias aumentan, esto se vuelve cada vez más insostenible, solucionar un bug le lleva cada vez más tiempo. 

Tal vez usted me dirá que lo realiza rápido para probarlo, que luego lo va arreglar cuando el proyecto comience a crecer. Lamento informarle que esta manera de pensar es un error, ya que te tomará más tiempo reestructurar su código cuando el proyecto ya haya crecido , en vez de hacerlo desde un principio.
Como ya podrá ver nuestra forma de pensar, le aconsejamos que se plantee el encapsulamiento de métodos y variables desde el inicio del proyecto.

Bueno ahora pasaremos a explicar el porqué las propiedades son un punto fundamental para aplicar este principio. Nosotros debemos tener todas nuestras variables en privadas(private) o en caso de herencia en protegidas (protected). Se preguntará y ¿cómo hago para compartir la información con los otros objetos? Para eso es qué existen las propiedades, lo que hace es definir si la propiedad es sólo de lectura o sólo de escritura o ambas. Luego se define que hacer cuando lees la propiedad, puede ser que le des el valor de una variable privada o un cálculo que realices con una variable privada,etc. eso lo debe decidir usted, lo mismo sucede cuando se escribe una propiedad , puede asignarla directamente a una variable privada o llamar a un método privado, hacer un cálculo matemático, entre otras cosas que puede llegar a utilizar.

¿Cómo utilizar las propiedades?

Le daré un par de ejemplos para que vea cómo Unity utiliza las propiedades.

public class Personaje : MonoBehaviour
{
    int experiencia;
    public int Experiencia
    {
        get { return experiencia; }
        set { experiencia = value; }
    }
    public int Nivel
    {
        get { return experiencia / 1000; }
        set { experiencia = value * 1000; }
    }
    public int Vida { get; set; }
}

Como podemos ver la variable experiencia no está declarada como pública, por lo tanto no puede ser accedida por un objeto externo. Sin embargo, la experiencia es una variable que se necesita tanto para ser obtenida como modificada por varios objetos externos, como por ejemplo los enemigos o la interfaz de usuario.
Entonces para esto creamos una propiedad pública (es muy importante que la propiedad sea pública) la cual devuelve en valor entero pero puede devolver cualquier tipo permitido por Unity, ya que como mencionamos anteriormente no es está necesariamente ligada a una variable. 

Ahora una vez creada la propiedad debemos decir si es posible la lectura o la escritura. Puede ser una u otra o ambas. Con el get (lectura) y el set (escritura). En cuanto a la práctica debes manejar desde los objetos externos como si una propiedad fuera una variable pública (en caso de que esté acostumbrado a la practica de colocar variables públicas). 
No acostumbres a colocar la escritura dentro de las propiedades sólo utilizarla en caso de que sea necesario actualizar los datos de la propiedad desde un objeto externo, siempre que pueda evitarlo, hágalo. Trate de manejar el flujo de información dentro del mismo objeto, y en caso de ser necesario utilizar las propiedades para la comunicación con objetos externos.

En el caso de la propiedad Nivel es un ejemplo claro de la utilización de un cálculo dentro de una propiedad. Esta toma el valor de la variable privada experiencia y calcula el Nivel en base a la cantidad de experiencia que tiene el jugador. Este es uno de muchos ejemplos en donde se puede utilizar las propiedades de esta manera. Muchos ya estarán aplicando esto mediante métodos; no digo que esté mal utilizar métodos en algunos casos, pero va a depender estrictamente de la situación, no siempre se puede utilizar las propiedades para cálculos o métodos para los cálculos. Más adelante cuando tratemos temas de buenas práctica en el desarrollo explicaremos más en profundidad esto que acabo de mencionar.

Perfecto, todo esto que me esta enseñando es genial, pero en muchas ocasiones necesito editar una variable desde el inspector y si es privada no puedo acceder a ella, y si es pública no tiene sentido utilizar propiedades. Para eso se debe colocar un modificador llamado [SerializeField], esto permite que una variable privada sea mostrada y modificada desde el inspector de Unity. Más adelante explicaré más a fondo el tema de la serialización de campos, por ahora sólo le dejaré un ejemplo para que lo vaya implementando de a poco.

public class Personaje : MonoBehaviour
{
    [SerializeField] int experiencia;
}

Por último en el ejemplo de la propiedad Vida, tenemos una declaración vacía de la propiedad lo que significa que se maneja igual que una variable pública, aún no le encuentro mucha utilidad, sobretodo en que casos utilizar esta forma de propiedad, pero si está permitido debe tener un porqué. En lo personal si colocamos la propiedad de esta manera tenemos el mismo nivel de control que una variable pública ya que no existe un filtro entre los datos internos y cómo los datos internos deben comportarse ante los datos externos.

Nuestros servicios

¿Necesita que desarrollemos su proyecto?


Desarrollo

¿Necesita aprender cómo desarrollar su proyecto?


Tutoría

TEORÍA

OPERADOR TERNARIO

Bien ahora comenzamos con el operador ternario, como es de costumbre analizaremos el resumen dejado más arriba.
«Sirve mucho para reducir líneas de código, es un condicional simple en una sola línea de código.» No hay demasiado que explicar en este caso, es un muy buena práctica para la optimización de lineas de código, además tendrás un código mucho más limpio y fácil de mantener. Lógicamente es igual que un if de única línea, la ventaja está a la hora de mantener el código limpio, legible y reducido. 
Bueno sin más vamos a ver el ejemplo.

public class OperadorTernario : MonoBehaviour
{
    void Start()
    {
        int vida = 10;
        string mensaje;
        mensaje = vida > 0 ? "Estoy vivo" : "He muerto";
    }
}

Analicemos un poco de que trata esta simplificación. 
Tenemos 2 variables, una de tipo entero y otra de tipo cadena de texto. Cuando la vida (entero) es mayor a cero, la variable mensaje (cadena de texto) va a valer «Estoy vivo» en caso contrario valdrá «He muerto». El ejemplo es muy sencillo. Es lo mismo que el siguiente ejemplo.

public class OperadorTernario : MonoBehaviour
{
    void Start()
    {
        int vida = 10;
        string mensaje;
        if(vida>0)
            mensaje="Estoy vivo";
        else
            mensaje= "He muerto";
    }
}

Como puede llegar a notarlo es mucho más limpio, fácil de entender y reduce líneas de código, es por lo cual recomiendo utilizarlo siempre que tenga la oportunidad. Recuerde que funciona para una sola línea, no serviría si dentro del if necesita tener más de una línea de código.

TEORÍA

ESTÁTICOS

Bueno ahora comenzaremos con los estáticos, es un modificador que permite acceder los datos que hay en ella desde cualquier punto. Este modificador se puede usar para clases, métodos y variables. Para las clases, esto permite poder llamar a una clase sin la necesidad de crear una instancia de ella, si bien llamar a una clase en sí no tiene sentido alguno; pero si deseas acceder a una variable o método que también necesitan ser estáticos si es de mucha utilidad. 

Veamos algunos ejemplos para aclarar el cómo se usa.

public class Enemigo : MonoBehaviour
{
    public static int enemigoCantidad = 0;
    private void Start()
    {
    }
    public Enemigo()
    {
        enemigoCantidad++;
    }
}

Como podemos ver en este ejemplo, sólo la variable enemigoCantidad es estática, la clase y los métodos en ella no lo son. 

public class Juego2 : MonoBehaviour
{
    private void Start()
    {
        Enemigo enemigo1 = new Enemigo();
        Enemigo enemigo2 = new Enemigo();
        Enemigo enemigo3 = new Enemigo();
        Debug.Log(Enemigo.enemigoCantidad);
    }
}

Tenemos que tener en cuenta si la clase no es estática, aún así podemos acceder a la variable estática y no requiere que haya una instancia de esa clase en el escenario. Tal como se hace en el Debug.Log, en esa sentencia no se llama a una instancia de la clase, no se llama ni a enemigo1, ni 2, ni el 3; llamamos directamente a la clase y accedemos a su variable.
En este ejemplo creamos 3 instancias de la clase Enemigo, con el propósito de aumentar el valor de enemigoCantidad, ya que en el constructor de la clase Enemigo se suma 1 al valor existente de enemigoCantidad. Si no sabe lo que es un constructor de una clase, es un método definido por el lenguaje que es llamado cuando se crea una instancia de la clase, este método puede o no ser utilizado. 
Bueno ahora veremos un ejemplo de método estático.

public static class Utilidades 
{
    public static int Agregar(int valor1, int valor2)
    {
        return valor1 + valor2;
    }
}
public class UtilidadesEjemplo : MonoBehaviour
{
    private void Start()
    {
        int valor = Utilidades.Agregar(5, 6);
        Debug.Log(valor);
    }
}

Como podrá observar tenemos en el primer código una clase llamada Utilidades, la cual tiene un método estático Agregar. Este método puede ser llamado desde cualquier lado, este tipo de métodos son muy útiles a la hora de hacer cálculos que se van a necesitar varias veces en su programa. Si bien en el ejemplo la clase es estática pero no es necesario que lo sea para poder acceder al método estático. Vuelvo a repetir que es una buena práctica la utilización de métodos estáticos para la reutilización de código, aunque en lo personal no uso variables estáticas ya que se mantienen en memoria todo el tiempo, lo cual puede afectar al rendimiento de su programa.

DESPEDIDA

Si ha llegado hasta aquí quiero felicitarlo por su esfuerzo y dedicación con el aprendizaje de su carrera profesional. Espero que le haya sido de utilidad, que le haya gustado. Déjanos su comentario que le ha parecido nuestro primer post de la saga Aprendiendo sobre Unity. Nos vemos en el próximo post.

“Esfuércese, capacítese y haga la diferencia”

Comienzo de la capacitación

Aprendiendo sobre Unity

Comienzo de la capacitación

Hola bienvenido/a, te doy las gracias por estar aquí, seguirnos en nuestro trabajo. Hoy vamos a ver en qué consiste esta capacitación, asumo que has venido aquí mediante el video; en caso contrario aquí te lo dejo:

Bien, vamos a explicar un poco más de la información que presenta el video. Esta es una capacitación en línea gratis para personas que desean aprender más sobre Unity. Este material no sirve para personas que no saben absolutamente nada de Unity Engine. Ya que lo básico lo he explicado en muchas ocasiones y hay mucho material de este tipo en Internet.

La idea de este material es aportar algo nuevo y distinto a la red; no tiene sentido hacer lo mismo que todos hacen. Si no sabes nada o sabes muy poco sobre Unity. Aquí te dejo un material que puedes visitar y aprender lo esencial que debes saber para poder tomar esta capacitación:

CONOCIMIENTOS PREVIOS:

Si al menos tienes un año de experiencia trabajando o estudiando Unity, entonces puedes realizar el estudio de este material. La capacitación se estructura en 2 partes como mencioné en el video; la primera parte consiste en un video corto en donde enseñaré la práctica del tema explicado; la segunda parte es un post en este mismo blog en donde explicaré extensamente la teoría de esta práctica.

¿A qué me refiero cuando digo extensamente? Además de lo obvio, los post serán bastante largos, por lo cual van a exigir más esfuerzo para aprender esto que un simple video de 20 minutos que puedas encontrar en Youtube. En caso de que desees aprender la práctica sin más puedes ver solo el video práctico y listo; pero lo más recomendable es que estudies todo el material. Si bien te llevará más tiempo hacerlo pero te prometo que te servirá mucho más que si solo ves el video.
Hoy en la era digital estamos acostumbrados a lo rápido, a lo instantáneo, el problema que trasladamos esa ansiedad por consumir información a nuestra capacitación laboral. Lo cual es un error muy grave, ya que no se puede aprender a programar en un lenguaje en un día por más que algunos lo prometan, tal vez puedas aprender algunas cosas básicas pero nada competente laboralmente.

En esta capacitación insertaremos descansos dentro de los post para que sean más fáciles de estudiar.

“Has un pequeño descanso.”

Unity

Si realmente deseas ser competente en tu mercado laboral entonces tienes que comprometerte y hacer la diferencia. Si bien un video es más rápido tanto para aprenderlo como para aplicarlo, pero si no lo aplicas seguido eso que aprendiste no durará mucho tiempo en tu memoria. ¿A qué se debe esto? Se debe al poco esfuerzo de concentración que exige ver un video explicativo. En cambio leer un material sobre un determinado tema exige mucha más concentración y esfuerzo de tu parte para poder entender el material. Esto quiere decir que hay muchas más probabilidades que esta información permanezca en tu memoria.

Existe un detalle más, toda la información puesta en videos está comprimida , resumida, acotada. Por el simple hecho que un video de más de una hora no lo ve casi nadie. A menos que sea una conferencia o algo muy importante. Entonces ¿Por qué estudiar información incompleta o resumida? Por falta de tiempo o porque no quieres esforzarte para realmente capacitarte en el tema. Si tu caso es el primero, si dejas un video a la mitad es más difícil continuar el hilo. A diferencia de dejar un documento o post que estabas leyendo y no lo pudiste terminar de leer. No es necesario que leas toda la teoría en un solo día. Tienes casi una semana entera para ir leyéndolo de a poco y así aprovechar toda la información.

Un detalle muy importante, no omitas ninguna información, para poder aprender algo primero debes desaprender, esto es porque las personas omiten temas que creen dominar y tal vez hay información importante que puede aportar a un mejor manejo del tema que aparentemente manejaban muy bien. Debes estudiar todo el material sin excepción, en caso contrario de que no sepas un tema que no está explicado en la teoría, investígalo, pregunta, estúdialo, no importa cuánto tiempo te tome aprenderlo lo importante para continuar este material es que no tengas ni la más mínima duda sobre ningún concepto. No me molestan las preguntas, puedes comentar el blog o enviarme un mensaje privado a través del formulario de contacto y les responderé lo más pronto que pueda.

Bien como  ya mencioné anteriormente los post serán  un poco largos, esta es una pequeña introducción a la capacitación, en el siguiente post comenzaremos a ver programación basada en la nueva API de Unity (en lo personal uso la beta de Unity 2019, aunque no es obligatorio tener esta versión para estudiar el material, con la 2018 es suficiente). Antes de irme quisiera decirte que además de código también explicaremos sobre mantenimiento de código, administración de sistemas de gran tamaño, sistemas multidisciplinarios, ya que cuando trabajamos solos o entre pocos no hay problema pero cuando son muchos los que trabajan en un mismo recurso las cosas comienzan a complicarse. Éstas prácticas no son meras técnicas que saco de algún libro y ya, sino es lo que uso en donde trabajo.

using UnityEngine;
public class Prueba : MonoBehaviour
{
void Start()
{
Debug.Log("<b>Esta capacitación va a ser genial</b>");
}
}

No quiero que te vayas hoy sin que te lleves al menos unos consejos sobre programación. No hagas lo más rápido sino lo que es correcto.

Un ejemplo simple de esto que acabo de decir sería las personas que por trabajar más rápido o esforzarse menos, no comentan su código. Esto es un error gravísimo, uno de los más graves que puede tener un programador que aspira a ser profesional. Tienes que evitar esta mala práctica a toda costa, no significa que tengas que comentar cada linea de código pero una buena práctica es comentar cada método y si el método es muy complejo tener algunos comentarios dentro de él.

Ahora veremos un ejemplo:

using UnityEngine;
public class Prueba : MonoBehaviour
{
public Transform objetivo;
void Start()
{
MostrarDistancia();
}
/// <summary>
/// Este método muestra la distancia que hay entre el personaje y el objetivo.
///</summary>
void MostrarDistancia()
{
float distancia = Vector3.Distance(transform.position, objetivo.position);
Debug.Log("<color=#ECFF00> Distancia: </color>"+"<b>"+distancia.ToString()+</b>);
}
}

“Al llamar a un método comentado nos muestra su comentario.”

Unity
Comentar código para Unity

Otra buena práctica que podemos tener es no meter los inputs en un simple if dentro de un Update. Y más cuando un mismo input es comprobado varias veces en un mismo script.

Vamos a ver el ejemplo:

using UnityEngine;
public class Prueba2 : MonoBehaviour
{
void Update()
{

//Este ejemplo es lo que NO deben hacer.
if (Input.GetKeyUp(KeyCode.Z)|| Input.GetKeyUp(KeyCode.V))
Debug.Log("Vete a dormir");
if (transform.position.y < 0)
{
transform.position = Vector3.zero;
if (Input.GetKeyUp(KeyCode.Z)|| Input.GetKeyUp(KeyCode.V))
gameObject.SetActive(false);
}
}
}

La utilización de un método que compruebe las entradas, además de ahorrar líneas de código, hace más fácil identificar y cambiar los inputs del mismo.

Ejemplo correcto:

using UnityEngine;
public class Prueba2 : MonoBehaviour
{
void Update()
{
if (ComprobarEntrada())//Este es el ejemplo de lo que SI deben hacer.
Debug.Log("Vete a dormir");
if (transform.position.y < 0)
{
transform.position = Vector3.zero;
if (ComprobarEntrada())
gameObject.SetActive(false);
}
}

/// <summary>
/// Este método comprueba el ingreso por teclado.
/// </summary>
/// <returns>devuelve verdadero si fue soltada la tecla z o v</returns>
bool ComprobarEntrada()
{
if (Input.GetKeyUp(KeyCode.Z) || Input.GetKeyUp(KeyCode.V))
return true;
else
return false;
}
}

Y bueno llegamos al último tip de esta introducción, en lo personal lo uso mucho, sirve mucho para mantener el código, sobre todo cuando vuelves después de un tiempo de no haber trabajando en el proyecto esto ayuda mucho. Se trata de comentar los métodos que son llamados por un Invoke, InvokeRepeating o Start/StopCoroutine.

Veamos un ejemplo:

using UnityEngine;
public class Prueba3 : MonoBehaviour
{
void Start()
{
Invoke("MostrarTiempo", 2);
}
/// <summary>
/// Muestra el tiempo actual.
/// Es llamado por un Invoke en el método Start.
/// </summary>
void MostrarTiempo()
{
Debug.Log(Time.time);
}
}

La práctica de este comentario es muy importante, por ejemplo que debas realizar una mejora o nueva versión de un proyecto anterior al que trabajas actualmente, no vas a recordar todo el código y si no está comentado de esta manera no podrás encontrar quien está llamando a ese método, ya que visual studio no encontrara referencias cuando coloques la herramienta de buscar referencias al método. Es por eso que debes comentar en donde está siendo llamado, recuerda esto no es para todos los métodos sino sólo para los que son llamados a través de un Invoke, InvokeRepeating o Start/StopCoroutine.

Bueno espero que les haya gustado este precalentamiento, nos vemos en el siguiente post y prepárate para ponerte en acción.

“Esfuérzate, capacítate y has la diferencia”

Age of seas

Age of seas (El diario de Cerón)

Bueno amigos aquí les presento el proyecto que estamos desarrollando.
Age of Seas es un juego multijugador para PC, MAC, LINUX gratuito donde tu personaje es un marinero mercader que explora los mares transportando mercancías de un lado a otro ganado Godeones de oro (moneda del juego) y experiencia así como nuevas mejoras para su barco.

Los Godeones de oro es la moneda del juego que te servirá para comprar otros barcos, sobornar mercaderes y comprar mejoras para tus navíos.

Definiciones de modos de juego:

Estrategia: Ya que tendrás que tomar y administrar bien tus marineros realizando contratos y sabiendo como capitanearlos.
Combate: Ya que tendrás que luchar por mantenerte a flote ya que en el mar siempre hay un pez más grande que tu.
Mercadería: Ya que te ganaras la vida transportando mercancías donde lo requieran.
Exploración: Ya que tendrás que encontrar los materiales que se requieran para tu causa.
Unión: Ya que podrás crear alianzas y clanes para asegurar tu supervivencia.

Age of seas

Modo de juego e historia:
Una vez navegado y descubierto algunas islas puedes comenzar tu campaña de comerciante, en algunos puertos requieren ciertos materiales que en otros venden. Tu misión es ir recolectando esos materiales para luego comercializar en los puertos donde haya demanda. Cada barco dependiendo de su envergadura tiene una capacidad de carga, por lo que aprovechando el viaje puedes transportar mas de un material a la vez y cumplir dos, tres, cuatro objetivos a la vez o todos los que tu barco te permita. El reto es saber organizar tus viajes y que materiales están en este momento más solicitados ya que aumentaran tus recompensas si sabes jugar bien tus cartas, ya que dependiendo del momento el material «AZÚCAR» puede estar más solicitado que el «CUERO» aumentando tu recompensa si decides transportar AZÚCAR a los puertos que lo solicitan aunque estos estén más lejos y aumente el riesgo de la misión, tu recompensa en «godeones» y experiencia serán mayores..

Existen más de 500 materiales diferentes, unos más raros que otros. Pero cuidado! si en el momento que estas transportando tu valiosa mercancía y otro jugador o monstruo te hunde por el camino tu cargamento quedara a flote pudiendo este  ser recuperado por tu atacante perdiendo tu el coste de tu mercancía, ya que tu compras a precio para vender a otro. (Trading)

Uno de los secretos de AGE OF SEAS es que puedes enterrar tus valiosos materiales por las 18 islas disponibles evitando así saqueos y pérdidas de tus valiosos materiales en abordajes o hundimientos inesperados.

Age of seas

Debes jugar bien tu estrategia de comerciante y seleccionar rutas poco transitadas por otros barcos para no arriesgar tu valioso cargamento, pero no todo esta perdido. En Age of Seas puedes crear alianzas (CLANES) formados por otros jugadores bajo un mismo estandarte, los cuales te ayudaran a transportar y proteger materiales valiosos, que son muy codiciados. En la  imagen que vemos a continuación uno de los barcos centrales transporta en sus bodegas «DIAMANTES DE LAS CUEVAS DEL PANTANO» hacia la isla del hombre muerto y el resto de la alianza lo protege.

Pero cuidado! no solo hay que preocuparse de otros jugadores, también los mares de Age of seas esconden peligros como tornados, tifónes y monstruos marinos como, así que tu travesía no sera fácil ni que entregues tu carga tampoco.

Age of seas

Escoge el momento el material y las rutas adecuadas que te dará mejor remuneración  por que si no lo haces pequeño marinero la cosa se te va a complicar mucho.

Pero, no todo es sufrir!

Gracias a todas las mejoras que puedes hacerle a tus barcos puede llegar a ser casi invencible y que otros jugadores o monstruos marinos huyan despavoridos al ver tus cualidades evolucionadas, así que convertirse en el mas temido de los mares no es imposible.

Tu tripulación!

Lógicamente un barco no se gobierna solo y por muy habilidoso que seas necesitas una tripulación. Obviamente en Age of Seas no te lo íbamos poner fácil ya que tu tripulación tiene un estado de animo que dependiendo de tus decisiones se incrementara o disminuirá afectando así al gobierno del barco.

Casos prácticos con tu tripulación.

Como todo marinero no le gusta estar mucho tiempo en la mar y de vez en cuando necesita pisar tierra firme beber hasta no poder mas en una cantina acompañado de grata compañía femenina, Si estas mucho tiempo deambulando en mar abierto sin rumbo fijo el animo de tu tripulación caerá empicado afectándote en el gobierno del barco.

Trucos con la tripulación:

Si es cierto que existen algunas artimañas para evitar que el animo de tu tripulación caiga aunque no se si son muy efectivas. Gracias a los barriles de ron que encuentras por el mar de naufragios desafortunados tu tripulación se podrá emborrachar olvidado así su melancolía de pisar tierra firme, aunque afectara a sus sentidos siendo difícil gobernar tu barco.

¿Que ocurre si el animo decae?

Si dejas que tu tripulación sobrepase los limites mínimos de animo comenzaran a caer enfermos y poco a poco muriendo dejándote sin tripulación y teniendo que contratar a mas marineros saliéndote por un buen pico.

Age of Seas es en definitiva un MMORPG gratuito donde poder divertirte con tus amigos aprender sobre la historia y tener apasionantes batallas por la conquista de las rutas mercantes. Un mundo con mas de 8 horas de navegación de punta a punta  y lleno de vida submarina y terrestre.

Más información e imágenes en:
https://twitter.com/ageofseas
o
https://ageofseas.com

Rutas de mercadería , piratería , grandes batallas épicas y monstruos marinos son algunas de las cosas que te esperan en esta mar inexplorado.

Age of seas

 

Age of seas

 

Age of seas

 

Age of seas

Age of seas

 

Aquí tienen más imágenes:

Age of seas

Age of seas

Probando el multiplayer:
Age of seas multiplayer

Si te ha gustado y quieres apoyarnos:
donar

Bueno amigos eso es todo por ahora, espero que les haya gustado, no se olviden de compartir este post.

Fisicas unity

Como manejar físicas en Unity (Evento)

Hola bienvenido/a a la nueva sección de eventos, publicaremos un evento cada 15 días. Estos son videoconferencias en vivo explicando algún tema en particular sobre el desarrollo de videojuegos en Unity.

Nota: Instalar Zoom meeting antes de la hora del live.

Se explicará como se debe utilizar correctamente las #colisiones 2D / 3D, #Rigidbody, #materiales físicos, etc. Además de prevenir los problemas más cometido en este área del desarrollo de #videojuegos.
Viernes 25 de agosto, 10 am Argentina.
Únete desde : https://zoom.us/j/448235588

Unity engine desarrollo de videojuegos

Los mejores videojuegos hechos en Unity

Hola bienvenido/a a nuestro blog, en el día de hoy veremos los 10 mejores videojuegos desarrollado en Unity, para que vean la potencia que tiene este fabuloso motor, siendo que estos videojuegos se considerar independientes por la cantidad de personas que lo han desarrollado. En este caso vamos a mostrar el Top 10 del 2016 ya que el 2017 aun no cierra y hasta fin de año no sabremos quienes serán los ganadores.

 

El mejor juego para las mejores gráficas 3D: Firewatch

Fue desarrollado por Campo Santo, está disponible para Windows, Mac, Linux, Playstation 4 y Xbox One.

Es un juego en el que no se desmorona nunca el sentido o la noción del tiempo si decidimos ignorar un rato la misión y dedicarnos a explorar el mundo abierto que se pone a nuestra disposición. Hay rutas bloqueadas que sus creadores se han preocupado de cuidar a base de puro sentido común, privándonos del material necesario para abordarlas o echando mano de excusas razonables y creíbles que hacen que nada sea forzado ni se erijan barreras artificiales.

A medida que los días transcurren, la sensación de ir desentrañando capas de un relato emergente recuerda mucho a Gone Home, al que Firewatch no duda en hacer un guiño directísimo en el último tercio del juego, pero el pilar de carga en la andadura forestal de Henry no son las misiones que nos encomiendan en este nuevo empleo ni tampoco la exploración de cada objeto como en el espléndido título de Fullbright, sino en los diálogos por radio con Delilah, la operadora de cálida voz que nos manda las tarea y el único punto de contacto humano en un verano de aislamiento total. Las conversaciones están planteadas en un esquema similar al de los juegos de Telltale, a base de elegir frases o quedarse callado y en algunos casos tener en cuenta un tiempo límite, pero el guion esta vez es harina de otro costal: inteligente, sagaz, fluido, a veces un poco sardónico y otras más profundo. Dependiendo de la fase de la relación que se va fraguando entre Henry y Delilah, hay días en los que la comunicación se vuelve áspera y días en los que ambos se aventuran a un amistoso combate de esgrima dialéctica, no tanto porque se trate de palabras grandilocuentes o conversaciones trascendentales, sino por la naturalidad y la inteligencia con la que se desarrollan las bromas, los sarcasmos y los juegos de palabras. Cada elemento del parque habilita la interacción con Delilah, de modo que si uno se encuentra un árbol arañado y pulsa sobre él no oímos a Henry decirse a sí mismo “estas marcas parecen de un oso” ni vemos un cartel descriptivo, sino que el protagonista se lo comenta a su jefa y esta le explica, con o sin cachondeo de por medio, de qué se trata. Una forma efectiva de no caer en los tópicos de la aventura gráfica.

Fuente : www.anaitgames.com

 

El mejor juego para las mejores gráficas 2D: Seasons after Fall

Fue desarrollado por Swing Swing Submarine, está disponible para Windows, Mac, Linux, PlayStation 4, Xbox One.

Cuesta resistirse a la belleza y encanto que desprende Seasons After Fall. Es un videojuego tan bonito, tan llamativo en su apartado artístico, que lo ves y de inmediato te enamoras. Tiene ese algo, esa magia que te atrapa como si realmente estuvieras viviendo dentro de un cuento de fantasía pero, por fortuna, esta aventura de puzles y plataformas es algo más que simple fachada. Tras sus bellos parajes naturales dibujados a mano encontramos un juego de calidad, con gracia, que sabe sorprender con rompecabezas ingeniosos que basan todo su atractivo en la posibilidad de cambiar, a voluntad propia, las estaciones del año no solo para contemplar los muchos cambios que acontecen en lo estético, que ya os digo es increíblemente bello, sino básicamente para sacar provecho de la climatología abriendo caminos que hasta ese momento parecían intransitables.

¿Un estanque os impide el paso? Dejad que el frío invierno hiele su superficie y ¡problema resuelto! O dad la bienvenida al otoño, contemplad cómo crecen las setas, y ellas solas os guiarán a zonas de otro modo inaccesibles. ¿Qué hacemos con el verano? Permitid que su cálida luz haga florecer algunas plantas; o que la primavera y sus lluvias torrenciales inunden por completo el escenario para acceder a lugares más elevados. De forma fluida, muy natural, en Seasons After Fall cambiaréis el clima constantemente buscando resolver unos puzzles que no son especialmente complejos, pero sí ingeniosos e imaginativos. Todo nace de la experimentación. De probar y observar los cambios que trae consigo cada nueva estación. Y la sensación es de lo más gratificante.

Fuente: www.3djuegos.com

 

El mejor juego de consola y PC: Inside

Fue desarrollado por Playdead, está disponible para Windows, PS4 y Xbox One.

Aquí no hay líneas de diálogo ni letras impresas sobre la pantalla, sólo una historia que se cuenta a base de saltos por escenarios surrealistas y consecución de puzles de los que sólo requieren un segundo de calma. Todo está tan bien hilado que, al final, el mensaje del juego acaba siendo lo de menos. No es que sólo importe el camino, es que ‘Inside’ triunfa al transmitirnos sensaciones como ningún otro lo ha hecho hasta la fecha.

Al control de un niño cuyo destino y procedencia desconocemos por completo, huiremos de perseguidores en una constante carrera hacia adelante en la que las posibilidades de quedarse atascados son casi nulas. No es un problema de falta de dificultad, es una cuestión de intuición que, una vez conocidas las mecánicas básicas, conseguirá que pasemos por puzles y obstáculos sin ni siquiera darnos cuenta de que estaban ahí.

Fuente: www.vidaextra.com

Unity engine desarrollo de videojuegos

Uno de los mejores engine para el desarrollo de videojuegos

 

El mejor juego para móvil : Lara Croft GO

Fue desarrollado por Square Enix Montreal, disponible para Android, IOS, Windows y Windows Phone.

En esta nueva aventura de Lara Croft debemos profundizar en un mundo ficticio bastante variado y dividido en varias zonas claramente diferenciadas. Y como no podía ser de otra forma, nuestra meta consiste en recuperar ciertas reliquias muy preciadas y, de paso, acabar con la Reina del Veneno. Una trama no demasiado original y previsible pero que es narrada de manera acertada a través de breves y simples escenas de vídeo que emplean el mismo motor del juego, las cuales se dejan ver de vez en cuando al completar ciertos niveles.

Cada nivel cobra vida a través de pequeños tableros en los que podemos ir avanzando por unas teselas o puntos prefijados. Es decir, que no gozamos de libertad de movimientos para explorar los fondos, sino que debemos hacerlo por caminos establecidos. La gracia del asunto es que a medida que avanzamos vamos descubriendo numerosas trampas y enemigos, los cuales poseen diferentes características pero un patrón común: se mueven justo después de nosotros, como si de un juego de estrategia por turnos se tratara. Eso sí, este desarrollo es muy simple y tremendamente esquematizado, pero en el mejor de los sentidos.

Fuente: www.3djuegos.com

 

El mejor juego para realidad virtual: Job Simulator

Fue desarrollado por Owlchemy Labs, está disponible para HTC Vive y Oculus Rift.

En Job Simulator, considerado uno de los videojuegos para la realidad virtual de mayor éxito, tendremos que resolver una serie de pruebas mientras emulamos en clave de humor algunos trabajos, como el de chef o el de oficinista. Las opciones y posibilidades de interacción sin casi infinitas.

Fuente: www.vandal.net

 

El mejor juego para la mejor experiencia VR: The Lab

Fue desarrollado por Valve, está disponible para HTC Vive.

Es una escala de la habitación de realidad virtual (VR) juego de video desarrollado por Valve Corporationy lanzado para Microsoft Windows el 5 de abril de 2016. Se utiliza la tecnología VR y el HTC Vive dispositivo para mostrar una serie de experiencias de juego se accede a través de un centro de la habitación. El juego está ambientado en el Portal universo y ofrece ocho diferentes tipos de juego que implican breve demostración de las experiencias que utilizan diferentes aspectos de la VR capacidades. La variedad también es ofrecido más allá de las experiencias mismas por la cantidad de interacción con los objetos del entorno que se incluye.

Fuente: en.wikipedia.org

 

El mejor juego para proyecto (NON-Game) : Tilt Brush

Fue desarrollado por Google, está disponible en HTC Vive. Non- games es una categoría que esta entre un videojuego y un juguete.

Uno de los avances tecnológicos que más fuerte está pegando durante la primera mitad de este año está siendo la realidad virtual. Los grandes fabricantes han empezado a mostrar sus apuestas de hardware, y es sólo cuestión de tiempo que a partir de estas plataformas empecemos a ver cada vez más innovaciones en el mundo del software.

Google ha decidido ir abriendo camino, y lo ha hecho presentando su propia aplicación de dibujo para Realidad virtual. Se llama Tilt Brush, y nos permitirá dibujar en un entorno virtual desde diferentes ángulos o metiéndonos literalmente dentro del dibujo. Eso sí, de momento sólo está al alcance de quien tenga unas HTC Vive.

Fuente: www.genbeta.com

 

El mejor juego para simulación : Factory I/O

Fue desarrollado por Real Games, está disponible para Windows.

Es un videojuego en el que debes administrar una fabrica y todas las tareas que comprende la mismas, un juego muy interactivo el cual se ha considerado uno de los mejores simuladores del 2016 y por supuesto esta desarrollado en Unity.

 

El mejor juego para proyectos de estudiantes : Pine

Desarrollado por Twirlbound en NHTV Breda (universidad de ciencias aplicadas).

Pine es un videojuego de acción y aventuras en mundo abierto donde, como miembro de una de las últimas tribus de la gran isla de Albamare, se debe buscar un nuevo hogar para nuestro pueblo. La producción nace de la premisa de una humanidad alejada de la cima de la cadena alimenticia, donde debe cooperar con otras especies para subsistir en un lugar repleto de misterios por descubrir. Desarrollado por Twirlbound, la producción cuenta entre sus atributos con una IA avanzada, capaz de aprender de los movimientos y estilo de juego del jugador.

Fuente: www.3djuegos.com

 

Una mención especial para el mejor asset: Dungeon Architect

Fue desarrollado por Code Respawn, está disponible en el Asset Store.

Dungeon Architect es una herramienta de generación de nivel de procedimiento. Le permite crear rápidamente sus propias mazmorras tanto en tiempo de ejecución como en tiempo de diseño con poderosas herramientas de edición.

Curso Unity

Aprende mucho más sobre cómo desarrollar videojuegos en Unity

Bueno eso fue todo por hoy espero que te haya gustado, nos vemos, hasta la próxima.

Cursos gratis en desarrollo de videojuegos con Unity

Como programar una interfaz de usuario (UI)

Hola bienvenido/a esta semana en vez de redactar un post como es costumbre de todas las semanas, decidí hacer un video explicando uno de los aspectos más solicitados por mis alumnos más nuevos en el área del desarrollo de videojuegos. Explicaré como usar algunos de los aspectos más básicos de el sistema UI que nos provee Unity, no pude explicar todo lo que tenia en mente ya que en 30 minutos no puedo explicar un sistema tan amplio y completo como es este. Bueno espero que les guste y lo disfruten, no te olvides de compartir.

Desarrollo en Unity Real

Libros para el desarrollo de videojuegos en Unity

Hola bienvenido/a a mi blog, en el día de hoy te traigo una serie de 15 libros sobre el desarrollo de videojuegos en Unity. No todos son necesarios sino que cada uno cubre una necesidad especifica, comenzando como está estructurado un motor de videojuegos, programación en C#, Shaders, Realidad aumentada, videojuegos para Android, videojuegos para iOS, como desarrollar un videojuego para OUYA, diseño de videojuegos, control del audio, conceptos para principiantes y mucho más.
Traté de hacer una lista de libros no tan extensa pero a su vez que les sea útil para la mayoría de las personas sean principiantes , intermedios o avanzados en el desarrollo con Unity. Como sabrán Unity es uno de los motores principales en la actualidad para el desarrollo de videojuegos multiplataforma , por lo que debemos poner mucho esfuerzo en estudiarlo y aprenderlo para sacar el máximo provecho de este software.

Unity engine desarrollo de videojuegos

Uno de los mejores engine para el desarrollo de videojuegos

 

1.Desarrollo de videojuegos. Arquitectura del Motor: Volumen 1

Motor de videojuego

Ficha técnica

Autor: David Vallejo
Publicista: ¿?
Edición: 1ra
Fecha de publicación: 11/9/2015
Idioma: Ingles/Español

2.Unity: Manuales Users (Spanish Edition)

User Unity desarrollo de videojuegos

Ficha técnica

Autor: Landa Cosio
Publicista: Users
Edición: 1ra
Fecha de publicación: 18/6/2013
Idioma: Ingles/Español

3.Learning C# Programming with Unity 3D

Aprende C# Unity

Ficha técnica

Autor: Alex Okita
Publicista: CRC Press
Edición: 1ra
Fecha de publicación: 4/8/2014
Idioma: Ingles

4.Unity 5 from Zero to Proficiency (Intermediate)(Volume 3)

C# intermedio para Unity

Ficha técnica

Autor: Patrick Felicia
Publicista: ¿?
Edición: 1ra
Fecha de publicación: 21/4/2016
Idioma: Ingles

5.Unity Shaders and effects cookbook
Shaders para Unity

Ficha técnica

Autor: Kenny Lammers
Publicista: Packt Publishing
Edición: 1ra
Fecha de publicación: 18/6/2013
Idioma: Ingles

6.Developing AR games for iOS and Android

AR Unity

Ficha técnica

Autor: Dominic Cushnan
Publicista: Packt Publishing
Edición: 1ra
Fecha de publicación: 24/9/2013
Idioma: Ingles

7.Game character creation with Blender and Unity

Modelar Blender para Unity

Ficha técnica

Autor: Chris Totten
Publicista: Sybex
Edición: 1ra
Fecha de publicación: 22/6/2012
Idioma: Ingles

Curso Unity

Aprende mucho más sobre cómo desarrollar videojuegos en Unity

8.Game development for iOS with Unity3D

iOS para Unity

Ficha técnica

Autor: Jeff W. Murray
Publicista: A K Peters/CRC Press
Edición: 1ra
Fecha de publicación: 26/7/2012
Idioma: Ingles

9.Getting started with OUYA

Desarrollar para OUYA Unity

Ficha técnica

Autor: Ruben Hoyos
Publicista: Packt Publishing
Edición: 1ra
Fecha de publicación: 12/5/2014
Idioma: Ingles

10.Introduction to game design, prototyping, and development

Game Design en Unity

Ficha técnica

Autor: Jeremy Gibson
Publicista: Addison-Wesley Professional
Edición: 1ra
Fecha de publicación: 21/7/2014
Idioma: Ingles

11.Mastering Unity 2D game development

Desarrollo 2D en Unity

Ficha técnica

Autor: Simon Jackson
Publicista: Packt Publishing
Edición: 1ra
Fecha de publicación: 26/8/2014
Idioma: Ingles

12.Pro Unity game development with C#

Desarrollo C# Pro Unity

Ficha técnica

Autor: Alan Thorn
Publicista: Apress
Edición: 1ra
Fecha de publicación: 20/5/2014
Idioma: Ingles

13.The essential guide to game audio

Conceptos de audio para videojuegos

Ficha técnica

Autor: Steve Horowitz
Publicista: Focal Press
Edición: 1ra
Fecha de publicación: 1/4/2014
Idioma: Ingles

14.Unity Android game development by example

Desarrollar Android para Unity

Ficha técnica

Autor: Thomas Finnegan
Publicista: Packt Publishing
Edición: 1ra
Fecha de publicación: 20/12/2013
Idioma: Ingles

15.Unity for absolute beginners

Principiantes en Unity

Ficha técnica

Autor: Sue Blackman Y Jenny Wang
Publicista: Apress
Edición: 1ra
Fecha de publicación: 12/6/2014
Idioma: Ingles

Bueno espero que te haya gustado este post, hasta la semana que viene. Gracias por visitarnos espero que la hayas pasado tan bien como nosotros al compartir este contenido contigo.

Unity desarrollo de videojuegos

Como vivir del desarrollo

Hola bienvenido/a, en el día de hoy le explicaré algunos aspectos esenciales para poder vivir del desarrollo de videojuegos, con esto no te garantizamos el éxito pero si te va ayudar a acercarte a este objetivo.

1.Tener un buen equipo

El primer paso que debes hacer es buscar un equipo de desarrollo, ya que no es recomendable desarrollar tu solo, no es que no se pueda pero es demasiado laborioso hacerlo de manera eficiente estando solo. Hay que tener algo de cuidado en este primer paso, ya que la calidad de tu equipo determinarán el éxito de tu videojuego es por eso que no debes incluir a cualquier persona a tu equipo. Es común ir a Facebook, unirse a grupos de videojuegos y ofrecer a las personas la posibilidad de entrar a tu equipo, de ahí tendrás varios comentarios o mensajes privados para elegir quienes de todas esas personas elegir para conformar tu equipo de trabajo, antes de elegir a alguien debes conocer a la persona, saber su trabajo, si es responsable , si es agradable para trabajar en grupo. Tienes que tener en cuenta que el equipo recomendable es tener un programador, un artista 2D, un artista 3D, un community manager, un compositor; con estas 5 personas ya podrías comenzar.

2.Requerimientos

Una vez conformado tu equipo, necesitamos ver los requisitos técnicos. Saber qué software y hardware van a necesitar. Te voy a dar un ejemplo para que te des una idea de cómo hacerlo. Ejemplo: Se requiere Unity engine, Blender, Photoshop, FlStudio, conexión a Internet. Depende del software a utilizar va ser el hardware requerido (Unity 3.0 GHz, 4 Gb de RAM, 512 Mb de video) Una vez definidos los requerimientos mínimos para cada software, debemos verificar si cumplimos con esos requisitos para los software que vamos a utilizar. También se puede necesitar hardware externo como tableta de dibujo o teclado midi; la compra de licencias para software de pago como Photoshop, entre otros.

3.Capacitación del equipo

Es fundamental para el éxito capacitar a tu equipo antes de comenzar a desarrollar, ya que debes evitar cometer el error de comenzar el desarrollo sin haberse capacitado correctamente. Si realmente deseas vivir de esto debes ser un profesional en la disciplina que vas a desempeñar. También ten en cuenta que una vez capacitados y comenzado el proceso del desarrollo no dejar de capacitarse, mientras se desarrolla se debe capacitarse al menos una hora al día.

Cursos gratis en desarrollo de videojuegos con Unity

Cursos gratis en desarrollo de videojuegos con Unity

 

4.Análisis del mercado

Antes de comenzar con el desarrollo se debe estudiar el mercado, sus tendencias y comportamientos, si bien todo el equipo debe hacer esta tarea en su disciplina, el community manager es quien debe realizar el estudio de mercado general para saber qué videojuegos independientes están funcionando en este momento y planear una estrategia de qué juegos pueden ser factibles para su desarrollo basándose en el riesgo de pérdida, si el estudio está bien planteado el juego que se desarrolle deberá tener menos probabilidades de fracaso. Este es un paso que el 95% de los estudios independientes omite, lo cual es un gran error porque toda tarea que podamos hacer previa al desarrollo que disminuya la probabilidad de fracaso hay que hacerla sin dudar, ten en cuenta que se invierte mucho tiempo , cariño y dinero (en ocasiones) para que luego el desarrollo sea un fracaso.

5.Desarrollo de la idea

Por lo general el 75% o más comienzan en este paso y luego se preguntan el porqué de su fracaso, omitir etapas solo aumenta la probabilidad de fracaso. En esta etapa se reúne el equipo y comienza la «lluvia de ideas«, luego de esto se seleccionan las ideas más relevantes y se elabora con esto otra idea más completa, este proceso puede repetirse tantas veces como se desee hasta tener una idea que todos estén a gusto con ella. Luego de eso el community manager debe investigar y analizar esa idea en el mercado buscando juegos similares y determinar si es comerciable o no dicha idea, no sirve de nada una idea estupenda si a nadie le interesa. Nosotros desarrollamos para lo que el jugador quiere y no para lo que nosotros queremos. Es complejo este paso cuando la idea es innovadora porque aún no hay competencia pero se puede buscar por mecánicas o tecnología de manera separada, ejemplo: RPG, FPS, VR; suponiendo de que no se haya creado esa combinación podemos analizar el mercado de los 3 de manera separada. Una vez tengamos la idea hacemos el GDD (game design document) es un documento de diseño en donde se describen todas las características del videojuego. En otro post ampliaré más sobre este documento por ahora diré que debemos explicar las características generales, mecánicas, concept art, plan de monetización, entre otros.

Curso Unity

Aprende mucho más sobre cómo desarrollar videojuegos en Unity

 

6.Plan de monetización

Si bien es un punto que se debe plasmar en el GDD, decidí hacerlo como un paso más ya que quería ampliar un poco más sobre este tema. Si queremos vivir del desarrollo de videojuegos tenemos que crear una estrategia para obtener ganancias monetarias, para esto hay varias alternativas: un juego gratis con publicidad (requiere una gran cantidad de usuarios activos conectados a internet), un juego de pago (requiere pocos usuarios no necesariamente activos ni conectados a internet) un juego gratis con pagos dentro del juego (requiere una cantidad moderada de usuarios activos conectados a internet). Debemos escoger entre algunas de estas 3, por lo general los estudios nuevos optan por la primera porque quieren hacerse conocidos y tiene mejor respuesta por parte de los usuarios. Pero es muy complejo generar una gran cantidad de usuarios activos, no sirve de nada tener 1500 descargas, si no tenemos ni 25 usuarios activos al día. Es un error muy común que busquen en donde sea que descarguen su juego y aumentar las descargas totales, pero lo que se debe hacer es segmentar a los posibles jugadores y tratar que ellos descarguen el juego. No sirve que un jugador de videojuegos deportivos descargue tu juego FPS porque lo más probable es que no juegue más de una semana. En cambio un jugador de FPS que descargue tu juego podrá analizar la calidad del mismo y si es buena jugará indefinidamente. Eso es justamente lo que queremos lograr; también se puede combinar publicidad con pago en juego, sobre este tema podemos hablar todo el día, luego hare un post explicando más sobre monetización.

marketing redes sociales

Como hacer un buen marketing para tu videojuego

 

7.Rutina de trabajo

A esta altura ya tenemos un equipo de trabajo ya capacitado para desarrollar un videojuego, una idea de un videojuego que creemos que puede funcionar según los estudios realizados, un GDD con las características que tendrá nuestro videojuego; es hora de comenzar a desarrollar nuestro videojuego. Es recomendable hacer una campaña de donaciones como Kickstarter u otro para poder sustentar el tiempo en que se tarde en desarrollar la primer versión pública del videojuego. Para esto es necesario tener el juego bien estructurado con buenos concepts arts para que las personas se interesen por su juego y realicen una donación (Advertencia: Si se piensa hacer una campaña de este tipo se debe comenzar a crear seguidores y una buena comunidad desde la primer fase que se menciona en este post, sé que es difícil que te sigan sin tener nada para mostrar, pero desde que tengas hecho tu GDD, ya tendrás materia para mostrar) Es casi obligatorio utilizar algún método de administración de tareas como es el SCRUM, recomiendo utilizar Trello u otro del mismo tipo. Trabajar con fechas de entrega, horarios de reuniones y medición del progreso.

8.Invertir en publicidad

Muchas veces que para darle vida y movimiento a nuestras comunidades en las redes sociales debemos invertir algo de dinero en publicidad. Por lo general se paga una vez y no pagan más, esto es un error grave se debe invertir el 20% de las ganancias totales en publicidad paga, les recomiendo al menos invertir 10 dólares al mes para difundir su futuro o actual videojuego, esto te ayudará a hacerte conocer ante un segmento especifico de usuarios, esa es la gran ventaja de este tipo de estrategia que te permite llegar a nuestro jugador objetivo como mencionamos anteriormente.

Bueno espero que te haya servido de algo, aclarado algunas dudas y sobre todo que te hayas disfrutado de leerlo tanto como yo disfruté al hacerlo. Si te gustó el post no te olvides de compartir.

Desarrollo de videojuegos

Respuestas que deberías saber

Hola bienvenido a mi blog, en el día de hoy te hablaré sobre algunas de las preguntas que me han hecho sobre el desarrollo de videojuegos en Unity. Es común que cualquier persona que desee introducirse en este mercado tenga muchas preguntas sin responder, en este post intentaremos responderte algunas de ellas. Si ya estas desarrollando y no te esta funcionando como esperabas tal vez esto te sirva, muchas veces el error está en los pilares base.


¿Qué necesito para ser un desarrollador de videojuegos?

Primero antes que nada deberías saber que un videojuego se compone por varias disciplinas (arte, sonido, programación, etc.), una vez sepas esto debes escoger una de ellas, la que más te guste o en la que mejor te desenvuelvas. Una vez teniendo esto, necesitas una conexión a internet y un ordenador sea portátil o de escritorio que soporte los softwares que vas a utilizar. Con todo esto ya tienes lo fundamental para comenzar a instruirte en el desarrollo de videojuegos.


¿Necesito saber matemática para hacer un videojuego?

Esta pregunta es algo delicada, en fin, si debes saber matemática para desarrollar un videojuego, si es un proyecto sencillo no es necesario que tengas grandes conocimientos pero si los fundamentales. Tenga en cuenta que solo considero esta respuesta para la disciplina de programador en caso de que opte por otra disciplina debería poder desarrollarla sin mayores dificultades. Se comenta que para la disciplina del modelado 3D se requieren ciertos cálculos pero no son comparados con lo que requiere en programación.


¿Cuál es mejor Unity o Unreal?

Los dos engine son excelentes, muy potentes y completos. No se podría decir que uno está por encima del otro. Nosotros hemos elegido a Unity no porque sea mejor que Unreal sino porque tiene una mejor documentación, mayor comunidad y soporte en comparación de Unreal.

Cursos gratis en desarrollo de videojuegos con Unity

Cursos gratis en desarrollo de videojuegos con Unity


¿Se puede desarrollar un videojuego solo?

De poder si se puede, nadie te lo impide; pero no es recomendable porque en lo que te demoras en aprender todas las disciplinas pueden haber lanzado 20 juegos mejores a su idea para entonces. El problema no está en que no puede aprender todo sino en que no te da el tiempo para desarrollar todo a la vez. Si aún con una persona dedicada a cada área es muy laborioso hacer un videojuego, imagínate hacerlo tú solo. Mi recomendación es que busques personas que deseen trabajar contigo, ten en cuenta que cada persona debe desarrollar una disciplina distinta no metas a 20 personas que hacen exactamente lo mismo.


¿Es mejor aprender de video o de un material escrito?

Esto pienso que es un dilema bastante personal, hay personas que les gusta leer más que a otras. Un video es más fácil de entender que un par de páginas de un libro. Pero que sea más fácil no significa que aprenda mejor, solo aprende más rápido pero no mejor, ya que la lectura requiere más concentración y atención a lo que lees para poder entenderlo; en cambio en un video no requiere de demasiado esfuerzo para aprender el contenido. En conclusión, lo que aprendió de un video es más probable que se te olvide, de lo que tuviste que leer y aprenderlo. Mi recomendación si te gusta leer aprende leyendo sino mira videos, aunque la lectura es un buen hábito y deberías considerarlo. No digo que un libro sea mejor que un video, sino que el proceso de aprendizaje es mejor, a un material escrito no solo me refiero a sólo libros sino a blogs, noticias, etc.


¿Es conveniente usar Assets descargados?

Si se utiliza correctamente si, aunque muchas personas los utilizan en exceso. Un assets es para agregar una funcionalidad o estética particular a un videojuego, no es para hacer todo el videojuego a base de assets. Los perjuicios a la hora de utilizarlos son: no poder imitar el mismo estilo gráfico para el resto del material gráfico, no poder editar o vincular tu programación con la del asset, no poder crear algo de la misma calidad porque se notara la falta de armonía en el apartado gráfico. Mi recomendación es utilizarlos para sistemas de partículas, o una funcionalidad en especifica, siempre y cuando se utilice sólo ese assets para cubrir ese aspecto y no varios que no concuerden entre sí.


¿Cómo hacer marketing de mi videojuego?

Esta es una pregunta muy amplia y recurrente, marketing es la estrategia de hacer conocer un producto o servicio a tu potencial cliente. Para lograr hacer un buen marketing debemos tener un manejo fluido y profesional de nuestras redes sociales, crear una fan page en Facebook, una cuenta de marca en Google Plus, un Instagram, un Twitter. Todas las redes sociales en donde tu marca conecte con los potenciales cliente, si en esa red social no está tu cliente ni siquiera se crees una cuenta en ella por más beneficios que tenga, hay que ir donde está su cliente para mostrarle su producto y convencerlo de que lo siga y posteriormente te compre. Nadie compra algo que no conoce, primero debe conocerlo y tener confianza en ti, luego de eso recién ahí podrá comprarte. Un consejo muy importante, que es un error muy común en los desarrollos independientes que comienzan a hacer marketing recién cuando tienen el videojuego hecho o una demo o alpha. Esto personalmente creo que está mal ya que se debe comenzar a crear nuestra comunidad de seguidores y brindar confianza desde que se comienza el proyecto, ya que demora meses en crear fidelidad en tus seguidores lo que se traduce en pérdidas si recién lo implementas cuando tienes el producto terminado. Debes comenzar a publicar pidiendo opinión sobre características que tendrá tu juego, haciendo encuestas , material gráfico como concept arts, en definitiva debe haber una persona que se especialice y que solamente se dedique al marketing de tu marca.

marketing redes sociales

Como hacer un buen marketing para tu videojuego


¿Se puede vivir del desarrollo de videojuegos?

De poder se puede, pero nadie dijo que sea fácil. No pretendas poder ganarte la vida haciendo videojuegos sencillos y de baja calidad, existen excepciones que logran hacer mucho dinero con juegos simples para móviles pero eso no quiere decir que en la mayoría vaya a funcionar, si le dijera eso le estaría mintiendo. Muchas personas o grupos independientes hacen muy buenos videojuegos y no son exitosos, y hay juegos de muy mala calidad que tienes más éxito. Esto no ocurre porque si o es a la suerte, hay varios factores que determinan la probabilidad de éxito, nadie te asegura el éxito pero si una aproximación de lo que puede o no funcionar. Estos factores es la categoría del juego en el momento de lanzamiento, es decir debemos lanzarlo en un lugar y momento especifico, para saber esto debemos hacer un estudio de mercado el cual se encarga nuestro marketer o community manager. Otro factor es la comunidad que has creado para seguirte, si realmente son tus clientes potenciales o solo son me gustas y seguidores sueltos que no interactúan y no les interesa tu producto, más seguidores no significa más ventas. En fin es un tema extenso que veremos en un post sólo para abordar esta inquietud.


¿Porqué tu no desarrollas videojuegos?

Esta es una pregunta bastante normal en mi día a día, es muy normal que los instructores o tutores no puedan desarrollar ya que enseñar consume mucho tiempo y no se puede hacer las 2 a la vez, lo intenté un tiempo pero la calidad se vio sacrificada por lo cual pensé que no era relevante si necesito sacrificar la calidad de mi contenido. Actualmente no estoy desarrollando nada oficial ya que me he quedado sin equipo de trabajo en cuando al desarrollo de videojuegos. Si bien ya he desarrollado varios videojuegos bajo el nombre de mi marca o para terceros, actualmente no dispongo de tiempo para un desarrollo de calidad.


¿Cualquiera puede aprender a programar?

Si, cualquiera que se proponga aprender a programar videojuegos puede hacerlo. Según las bases o antecedentes que tenga esa persona le costará más o menos pero no llegará a ser determinante de si una persona pueda o no aprender, siempre que se lo proponga usted puede lograrlo sin ningún problema. Tenga en cuenta que es un camino de aprendizaje por lo que no pretenda que funcione todo desde un principio, con la experiencia va a poder desarrollar cada vez lógicas más complejas. Un consejo paciencia y perseverancia.


¿Cómo depurar correctamente?

La depuración es el proceso de encontrar un error o fallo, siempre tendrás errores pero hay algunas buenas prácticas poder reducirlo. Una buena práctica es imprimir en consola, dependiendo el lenguaje y la herramienta pueden variar (Debug.Log, print, printf, etc.) esto sirve para saber si se ejecuta esa parte del código. Otra buena práctica es cuando buscas hacer una búsqueda para almacenar dicho valor en una variable, comprobar que esta variable no es nulo para saber si la búsqueda fue exitosa o no. Si hay variables expuestas asegurarnos que este correctamente asignadas con una comprobación similar a la del tip anterior. Salvando estos detalles los únicos errores que pueden tener son detalles menores o errores lógicos. Si manejan bases de datos también deben realizar comprobación para cada consulta o escritura en ella.

Desarrollo de videojuegos


¿Cómo administrar correctamente un equipo de desarrollo?

Suele pasar en ocasiones que estamos con una idea de desarrollo estupenda y nos damos a la búsqueda de un equipo de desarrollo. Una vez conformado el equipo pasando un tiempo comienzas a ver que no trabajan, que no cumple el trabajo y el equipo mismo se desmotiva se disuelve y tu idea nunca llega a la luz. Le daré algunos consejos para que esto no suceda. Primero antes que nada debe haber un líder en el equipo, el líder no debe ser el dueño de la idea sino el que tenga más experiencia administrando gente, alguien que sepa animar controlar y dirigir a los integrantes de tu equipo a buen puerto. Administrar las tareas y los tiempos con fechas prefijadas de entrega, les recomiendo usar un sistema de administración de tareas como Trello. Otro consejo es que su equipo de desarrollo este cerca físicamente para al menos una vez al mes juntarse físicamente, de otra forma se suele perder el compromiso pero eso no determina el éxito hay muchos grupos que son distante y nunca se conocieron personalmente y sin embargo trabajan muy bien porque tienen un nivel de compromiso muy alto. Algo a tener en cuenta a la hora de armar su equipo es buscar disciplinas no cubiertas, no sirve de nada ser 5 programadores si no hay ni un artista.

Curso Unity

Aprende mucho más sobre cómo desarrollar videojuegos en Unity


¿Cómo retirar el dinero de mis ganancias?

Esta es una pregunta muy recurrente en las personas que desean incorporarse a este mundo del desarrollo de videojuegos, que no saben cómo convertir el dinero virtual en real, déjeme decirle algo, siempre es dinero real aunque lo esté viendo por una pantalla es real. Por lo general todos los sitios pagar en dólares, por lo cual es conveniente tener una cuenta de Paypal que es una cuenta bancaria virtual, es la más segura del mercado, según el país en que vivas te permitirá retirar directamente de Paypal o no, en mi caso (Argentina), yo necesito utilizar una tarjeta de débito llamada Payoneer, con esa tarjeta paso los fondos de Paypal a la tarjeta y de ahí voy a cualquier cajero y saco mi dinero. Hay en países que el Paypal no lo pueden usar por las leyes del estado pero recuerden que aun existe la tarjeta Payoneer que funciona como cualquier Visa internacional, es por lo cual que no tendrán ningún problema legal.


¿Cuándo comenzar a desarrollar?

Es un error muy común en las personas nuevas que quieren comenzar a desarrollar ya, en vez de capacitarse correctamente primero y es el primer factor por el que el 90% de los proyectos falla en su desarrollo. Si se fija que existen muchos juegos en desarrollo pero de ellos son muy pocos los que salen al aire, esto es debido a varios factores pero uno de ellos es la capacitación, otro es la administración del equipo que explicamos anteriormente. La mayoría de las personas que quieren comenzar a desarrollar un videojuego es porque ya tienen una idea que quieren materializar, pero primero debes esperar ser paciente, capacitarte lo suficiente para poder desarrollar todo el proyecto y luego ahí comenzar a desarrollar. Recuerde que por más que se haya capacitado y comenzar el desarrollo no deje de capacitarse, según estudios todos nos debemos capacitar al menos una hora al día, para no atrasarnos en nuestra área y más que nosotros trabajamos con la tecnología que avanza a pasos agigantados.


¿Cómo programar en equipo?

Este problema es más recurrente de lo que creen, cuando dos o más programadores trabajan sobre un mismo código es complejo porque cada uno programa con su estilo, a su manera y muchas veces no sólo es que no se entienden entre sí sino que se pisan, es decir rompen el código que otro ya había hecho. Es por eso que existen estándares de programación para que se puedan entender mejor. Ahora le explico algunos de ellos: todas los nombres de archivos, variables o métodos deben ser descriptivos, no es lo mismo poner RTD que retirarDinero, el segundo se da a entender que es para retirar dinero. También se debe establecer la longitud máxima de los nombres de las variables para que el código no se haga ilegible, porque hay muchos programadores que con tal de describir hacen los nombres RetirarElDineroDeLaCajaRegistradora() ese nombre no puede tener un método es muy extenso, RetirarDineroCR() este segundo caso puede ser más aceptable a la hora de leer el código. Los nombres de variables siempre deben comenzar en minúsculas y los nombre de los métodos deben comenzar en mayúsculas. Los nombres de las variables privadas debes comenzar con _ (guion bajo) ejemplo _dineroActual. También debes mantener el código limpio y ordenado nada de dejar espacios blancos sin necesidad, o poner todo amontonado y comentar casi todo el código, hacer cualquiera de estas acciones en su medida correcta no afecta a la legibilidad pero hacerlo en exceso el código se vuelve un caos.

Bueno eso sería todo por hoy, no alcance a contestar todas las preguntas porque el post se iba a tornar demasiado largo, pronto hare otro post para responderlas. Espero que le haya gustado y servido.

Unity: uno de los mejores engine.

Estamos muy contentos de anunciar que Unity 2017.1 ha sido lanzado y ya está disponible para su descarga. Queremos agradecer a la comunidad de Unity por sus valiosas contribuciones durante la fase beta.

Unity engine desarrollo de videojuegos

Hola bienvenido/a un nuevo post, en el día de hoy hablaré de algo que no acostumbro, pero me puse a pensar que hay muchas personas como tú que no saben desarrollar videojuegos, tal vez ni siquiera sepas que es un motor de videojuegos, o estés agobiado por la elección de tantos que hay en el mercado.

Antes que nada quisiera presentarme, mi nombre es Danilo Giardina y soy programador de videojuegos. Hoy te explicare todos los aspectos sobre el desarrollo de videojuegos para que comiences sin temor alguno.

¿Qué es un motor de videojuegos?

Es un software que nos facilita las tareas para desarrollar un videojuego. Si tuviéramos que hacer estas tareas en código base, solo podrían desarrollar los expertos en la materia. Esto te permite a ti , a mi y a cualquier persona poder desarrollar un videojuego.

¿Cuál es el mejor?

Si bien ya sabemos lo que es un engine , pero no sabemos cual elegir entre tanta variedad y todos parecen ser espectaculares. Te diré la verdad, es cierto, la mayoría de los engine que tu consideras como opción (asumo que serán los más reconocidos como Unreal, Unity, Cryengine, Construct2, GameMaker, etc), todos son fabulosos. Muchos te dirán que cada uno tiene pro y contras según que juego quieras hacer, seguramente me estarás preguntando ¿tengo que aprender todos los engines? No, en absoluto. Mi recomendación es que busques un engine genérico en donde puedas desarrollar casi cualquier videojuegos, porque digo casi; porque hay algunos tipos de juegos que requieren engines especializados, por ejemplo los MMO. No es que con los genéricos no se pueda hacer; pero no están orientado a eso por lo que es un poco más laborioso hacerlo.

Unity engine desarrollo de videojuegos

Los líderes en motores de videojuego genéricos son Unity y Unreal. Bien, pero ¿cual es mejor? hay muchísimo contenido de personas intentando comparar y deducir cual es mejor. En mi opinion van a tener que buscar eternamente porque no existe un ganador entre estos 2, es más para mi deberían unirse pero son empresas rivales. Lo que puedes hacer en uno , lo puedes hacer en otro , mas fácil o difícil pero se puede hacer. Como habrás notado nosotros somos partidarios de Unity pero no estamos en contra de Unreal, los 2 motores son excelentes.

Bueno quería dejarte algunas características que tiene el nuevo Unity para ver si te puedo convencer a que consideres usar este hermoso engine. Insertaré información oficial desde su web.

 

Unity 2017.1 en pocas palabras

Unity 2017.1 incluye una tonelada de nuevas características y mejoras. Pero yo sólo te mostrare alguna de ellas para no aburrirte.

 

Artistas y diseñadores: nuevas herramientas para contar historias y secuencias en el juego:

Unity 2017.1 introduce nuevas formas en lo que artistas y diseñadores pueden crear impresionantes contenidos cinematográficos, componer tomas fotográficas artísticas y contar mejores historias visuales con las herramientas Timeline, Cinemachine y Post-Processing Stack.

La línea de tiempo es una poderosa herramienta visual que te permite crear contenido cinematográfico como cintas y trailers, secuencias de juego y mucho más.

Cinemachine es un avanzado sistema de cámaras que te permite componer tus planos como un director de cine dentro de Unity, sin ningún código, y abre la puerta a la era de la cinematografía procedimental.

La pila de postprocesamiento le permite aplicar filtros realistas a escenas utilizando la terminología, los controles y los formatos de espacio de color de la industria cinematográfica para crear efectos visuales de alta calidad con apariencia más realista y dramática, de modo que pueda contar una mejor historia visual.

 

Eficiencia: colaboración, análisis de las operaciones en vivo y más herramientas

Estamos anunciando Unity Teams, un conjunto de características y soluciones que simplifican la forma en que los creadores trabajan juntos, que incluye Collaborate (ahora fuera de beta) y Cloud Build.

Nuestros analíticos de live-ops introducen nuevas formas más fáciles de entender a sus usuarios y reaccionar y ajustar dinámicamente sus juegos sin tener que volver a implementarlos.

Además, hay muchas actualizaciones de productividad para el editor, incluyendo mejoras a la importación de FBX, flujos de trabajo de animación, funcionalidad 2D, trabajo con paquetes de activos e integración con Visual Studio.

 

Gráficos y plataformas: mejoras en general

Hay una serie de avances en las áreas de Particle Systems y el Progressive Lightmapper que ofrece más opciones para lograr su visión artística y el rendimiento de control. Varias plataformas obtienen opciones de optimización de procesamiento con Rendimiento Diferido en iOS y NVIDIA VRWorks en PC.

Este es un pequeño resumen de lo que viene, ahora te paso a explicar detalladamente algunas de estas características.

 

¿Qué hay de nuevo en Unity 2017.1?

Herramientas de artista para la narración: introducción de la línea de tiempo y Cinemachine

Como diseñador, artista o animador, ahora puede crear secuencias de contenido cinematográfico y de juego por su cuenta, sin depender de los programadores, con nuevas herramientas de narración integrada. Eso significa más tiempo haciendo, y menos tiempo haciendo cola para todos.

Timeline es una potente herramienta visual que te permite crear contenido cinematográfico (como el cortometraje Adam). Puede usarlo para crear escenas, crear secuencias de juego y mucho más, orquestando sus objetos de juego, animaciones, sonidos y escenas. Con Timeline, puede centrarse en la narración de cuentos y cinemáticas, no en la codificación.

La herramienta de secuenciación basada en la pista de Timeline aplica un enfoque de «arrastrar y soltar» para coreografiar animaciones, sonidos, eventos, videos y más, para una creación más rápida de bellas escenas y contenido de procedimiento. Timeline tiene características para animación y audio, auto-keying y una interfaz de múltiples pistas con la capacidad de bloquear y silenciar pistas. Timeline es extensible a través de la Playable API y le ofrece la posibilidad de crear sus propias pistas para conducir cualquier sistema que tenga en su juego. Puede crear un clip de Timeline para representar prácticamente cualquier cosa, y hacer que los clips se repitan, escalen y se mezclen, aprovechando al máximo la interfaz de la línea de tiempo.

Cinemachine es el resultado de más de una década de construcción de videojuegos y cámaras cinematográficas. Ahora pone las conductas de cámara líder de la industria en manos de todos y abre la puerta a la era de la cinematografía procedimental.

Es un conjunto de cámaras inteligentes que activan dinámicamente las mejores tomas en el mejor momento basándose en la composición de la escena y la interacción. Esto elimina innumerables horas de animación manual, programación de cámara y revisión.

La función Cinemachine está disponible a través de la tienda de activos, agregue a su proyecto ahora.

Desde un shooter en primera persona hasta una aventura de acción en tercera persona, puedes revolucionar tus cámaras en el juego con Cinemachine. Usted puede fácilmente:

  • Controle secuencias como un director de cine con herramientas avanzadas de la cámara, incluyendo la configuración de la cámara del mundo real.
  • Componga fotos con un enfoque en la dirección artística, no detalles de la implementación. Dé a Cinemachine cámaras inteligentes instrucciones sencillas, como seguir la cabeza del personaje, y si la animación cambia, su disparo se actualizará automáticamente y seguirá funcionando correctamente.

Con Unity 2017.1, hemos añadido muchas nuevas capacidades a Cinemachine como:

  • Objetos múltiples de destino: Destine varios objetos y establezca la ponderación entre ellos. Crea un grupo lógico, basado en cualquier número de sujetos, que se posiciona según la posición de sus miembros. Puede utilizarse como un objetivo LookAt y Follow al realizar el seguimiento de un grupo de objetos. Genial para 2D también.
  • Encuadre de forma dinámica varios objetos: Automáticamente se enmarca automáticamente un grupo de blancos en función de sus posiciones. Si los objetos se separan, Cinemachine ajustará el FOV o Dolly (o ambos) dependiendo de un conjunto de reglas que cree.
    Nueva API totalmente abierta: Cree fácilmente Cinemachine para obtener exactamente el comportamiento de la cámara que necesita su proyecto.
  • Pista de Dolly: Cree imágenes de pista de Dolly como película y haga que su cámara se mueva suavemente a través de sus mundos. Ideal para secuencias cinematográficas o cámaras de juego donde desea que la cámara siga al sujeto por un conjunto de rieles.
  • Disparo claro: El disparo claro elegirá dinámicamente la mejor cámara basada en la prioridad de tiro y lo bueno que es el disparo. ¿Algo se movió en el marco que arruina el tiro? No hay problema, Cinemachine se cortará a la mejor cámara siguiente. Increíble para repeticiones o cualquier otra secuencia cinematográfica de un escenario variable.
  • Cámara impulsada por el estado: Permite la vinculación sin código de cámaras y estados de animación. Accione fácilmente diferentes comportamientos de cámara a partir de animaciones.

Usted puede llevar su narración al siguiente nivel combinando Timeline y Cinemachine juntos. Vaya aún más utilizando la pila de postprocesamiento para crear efectos y añada humor y drama a sus escenas.

Unity Teams

Unity Collaborate está fuera de beta y se une a Cloud Build como parte de una nueva oferta llamada Unity Teams, una solución única con un conjunto de características que le ayudará a crear juntos, más rápido. Para celebrar, los Equipos de Unidad son gratuitos para que todos puedan probar hasta octubre de 2017.

Obtenga más información sobre la oferta de lanzamiento de Unity Teams.

Para Colaborar, el trabajo que priorizamos para su primera versión de producción en 2017.1 refleja la retroalimentación proporcionada por los usuarios Beta. Además de las mejoras en el rendimiento, la estabilidad y las correcciones de errores, hemos añadido un nuevo conjunto de características: push selectivo, mejor integración del navegador de recursos y una nueva característica «In Progress», que indica en tiempo real cuándo un compañero de equipo tiene funciones locales, Cambios no publicados en una escena o prefab.

Obtenga más información sobre los equipos de Unity.

Análisis de Live-Ops

Con Unity 2017.1, usted tiene acceso a las operaciones en vivo basadas en datos que colocan análisis analíticos a su alcance. Sumérjase y vea cómo su audiencia está interactuando con sus creaciones y luego realice ajustes en tiempo real que se adapten a sus hábitos; Todo ello sin reubicar una nueva versión. Unity 2017 le da el poder de servir mejor a su audiencia a medida que descubre formas inteligentes de optimizar las experiencias de juego.

Obtenga información de manera más eficiente con los Eventos estándar (actualmente en versión beta), que proporcionan un conjunto de eventos predefinidos que ayudan a descubrir sus conocimientos específicos del juego. Con el nuevo Analytics Event Tracker, puede implementarlos sin escribir una sola línea de código.

Cambie su juego en un instante, sin redistribución, con la nueva función de Configuración remota, que se ha agregado a Unity Analytics.

Obtenga más información sobre Analytics.

Mejoras 2D

En Unity 5.6, lanzamos grandes mejoras a las herramientas y flujos de trabajo para creadores de juegos 2D.

En Unity 2017.1 estamos introduciendo 2D Sprite Atlas, un nuevo activo que reemplazará al Sprite Packer. Con él se producen flujos de trabajo nuevos y mejorados que le proporcionan más control para el embalaje de sprites y su uso en tiempo de ejecución. Los atlas son una parte importante de los flujos de trabajo 2D en Unity, y el Sprite Atlas proporciona una creación y gestión de atlas más simples, así como una API de secuencias de comandos para un mayor control y versatilidad.

Sprite Las máscaras se usan para ocultar o revelar partes de un Sprite o grupo de Sprites en el espacio mundial. La máscara Sprite sólo afecta a los objetos utilizando el componente Sprite Renderer, así como los sistemas de partículas.

En 2017.1, también estamos añadiendo una Sprite Physics Shape al editor Sprite. Esto le permite configurar una forma predeterminada personalizada en un Sprite para generar formas de collider con un PolygonCollider2D.

Mejoras de animación

Hemos revisado las ventanas de animación para mejorar el flujo de trabajo de imágenes clave, hacer que la animación se sienta más cómoda y familiar, y permitir la interacción con las máquinas de estado del animador. La grabación del funcionamiento se proporciona como característica experimental.

El nuevo flujo de trabajo de fotogramas clave le permite decidir de forma explícita qué es la clave cuando, y todos los valores de propiedad modificados sin clave se descartan cuando la animación es reevaluada / vista previa. Hemos cambiado el comportamiento predeterminado de la edición de clips en la ventana de animación (nuevo modo de vista previa predeterminada), retroalimentación visual y teclas de acceso rápido globales. El objetivo de estos cambios es permitir un flujo de trabajo suave para fotogramas clave fuera de la ventana de animación, además de permitirle previsualizar clips sin tener que estar en un modo de autokey / rec.

Statemachinebehaviour ahora también se puede depurar en modo de juego en el editor.

También estamos introduciendo GameObjectRecorder, una nueva función de editor experimental, que le permite grabar cualquier propiedad en un GameObject y sus hijos. De esta forma, puede crear fácilmente animaciones guardando todo lo que se ha grabado en un clip de animación.

Mejoras progresivas de Lightmapper

En 2017.1, hemos añadido soporte para LODs en el Progressive Lightmapper. La diferencia principal entre el Iluminar y el Lightmapper progresivo al baking LODs es que con el Progressive Lightmapper, no es necesario autor de Light Probes alrededor de los LODs para obtener luz rebotada sobre ellos. Tener la iluminación indirecta en la resolución completa al bake llevará a Lightmaps mejorados para LODs, y usted puede evitar el proceso tedioso de la creación de los Lightprobes para ellos. (Esto también estará disponible en 5.6.)

También añadimos soporte para materiales de doble cara en el Progressive Lightmapper añadiendo un nuevo ajuste de material que hace que la iluminación interactúe con los backfaces. Cuando se habilita, ambos lados de la geometría se contabilizan al calcular la iluminación global. Los backfaces no se consideran inválidos cuando se ven desde otros objetos. El renderizado de la cara posterior no está controlado por este ajuste ni los backfaces serán representados en los mapas de luz. Backfaces rebotan la luz usando la misma emisión y albedo como frontfaces. (Esto también estará disponible en 5.6)

Mejoras en el Sistema de Partículas

Estamos introduciendo la integración de sprite, fuerzas de colisión de partículas (que pueden empujar colisionadores), un gran número de mejoras de forma, incluyendo un nuevo tipo de forma, y ​​adiciones al módulo de ruido, así como otras características y mejoras. Ahora es más fácil usar Partículas en 2D gracias a los nuevos controles y restricciones como alinear a la velocidad. Puede utilizar Particles para obtener más efectos y animaciones que nunca, incluyendo líneas y senderos iluminados.

Hemos añadido soporte para usar Sprites en el sistema de partículas, a través del módulo de animación de texturas. Esto permite un mejor atlasing y batching de sistemas de partículas, y también expone una serie de características de Sprite para su uso en sistemas de partículas, tales como marcos de animación de tamaños variables y puntos de pivote por marco.

El módulo de ruido viene con nuevas opciones para proporcionar un mayor control sobre cómo se aplica el ruido a sus partículas. En la implementación original en Unity 5.5, se aplicó ruido a las posiciones de las partículas. En 2017.1, será posible aplicar ruido a:

  • Posiciones
  • Rotaciones
  • Tamaños
  • Tus sombreadores que usan nuevas secuencias de vértices personalizadas (¡excelente para la distorsión UV!)

Estamos introduciendo una nueva forma de emisión de burbujas y modificando los modos para los planos del modo de colisión del sistema de partículas en el módulo de forma. Una transformación dentro del módulo le permite aplicar la posición personalizada, la rotación y la escala a la forma de emisión.

Otras mejoras incluyen la capacidad de alinear las partículas a su dirección de velocidad, y permitir que Emit over Distance se use para sistemas de espacio local. La emisión de bordes es ahora más flexible, lo que le permite elegir el grosor del borde utilizado para generar partículas.

Finalmente, las partículas pueden ahora aplicar fuerzas a los Colliders que golpean usando el módulo Collision.

Conclusión

Bien , como ya habrás notado este motor es sumamente completo , hermoso, flexible para lo que desees emprender. Se que no es una decision fácil para ti pero si tomas mi consejo y eliges Unity no te vas a arrepentir. ¿Porqué no te vas a arrepentir? No sólo te muestro la potencia que tiene sino que nosotros nos dedicamos a enseñar Unity, tanto online como presencial. Eso quiere decir que en tu camino de aprendizaje de este motor de videojuegos o en el camino del desarrollo de tu propio videojuego, estaremos acompañándote en todo momento para que en ningún punto te veas abrumado o pierdas tu rumbo.

Perfecto, pero ¿hay que comprar Unity? Te informo que con la versión gratuita de Unity puedes lograr esta misma calidad que te he presentado en el post. Entonces podemos decir que no tenemos que preocuparnos por el costo de Unity engine, pero ¿y mi ayuda qué? Bueno tenemos un canal de Youtube , cursos gratis , post de este mismo blog gratis. Aunque si quieres algo mejor ofrecemos también un servicio VIP, entérate de todas sus características aquí: enlace

Bueno hemos finalizado este post ayudandote a elegir tu engine de videojuegos, esperamos verte en nuestros siguientes post «como aprender a programar desde 0» y «Requisitos para desarrollar un videojuego». Espero que les haya servido, nos vemos. Hasta la próxima.

Aprende a desarrollar una IA para tus NPCs parte 5

inteligencia artificial Unity (IA)

Hola a todos, bienvenidos a una nueva edición de como desarrollar una IA para tu NPC en Unity. Como había prometido hoy vamos a ver como rotar y mover nuestro personaje para que siga a nuestro player o jugador.Bien lo primero que debemos hacer es borrar las paredes que teníamos puestas de la edición anterior, los sensores dentro del NPC los desactivamos. (Para desactivar un objeto se debe destildar el check que se encuentra al lado de su icono y nombre). Una vez hecho esto debemos crear un cubo y nombrarlo Player, este mismo lo colocamos en alguna parte del escenario.Ya teniendo listo el escenario, vamos a la pestaña de proyectos y creamos un nuevo C# script dentro de la carpeta scripts y colocamos el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateToTargetAndMove : MonoBehaviour {
    public GameObject target;
    public float speedCharacter = 8.0f;

	void Update () {
        Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

        float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia:" + distance);

        Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        if (Input.GetKey(KeyCode.Mouse0))
        {
            transform.LookAt(pointB);
            gameObject.transform.position += gameObject.transform.forward * 
            speedCharacter * Time.deltaTime; 
        }
	}
}

Como podrán ver es un código similar a las primeras ediciones, ahora vamos a pasar a explicar el código detalladamente.

inteligencia artificial Unity (IA)

 

Explicación del código

public GameObject target;
    public float speedCharacter = 8.0f;

La primer variable es la que ya habíamos creado en ediciones anteriores es para almacenar el objetivo del NPC, en este caso va a ser el Player, y la segunda variable determina con que velocidad se moverá el NPC.

Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

Ahora definimos las 3 variables típicas de las ediciones anteriores las cuales usamos para determinar la dirección.

float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia:" + distance);

Utilizamos nuevamente las variables declaradas anteriormente para determinar la distancia entre el NPC y el Player.

 

Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

Creamos un rayo a modo depuración para poder verlo en la pestaña de escena.

if (Input.GetKey(KeyCode.Mouse0))
        {
            transform.LookAt(pointB);
            gameObject.transform.position += gameObject.transform.forward * 
            speedCharacter * Time.deltaTime; 
        }

Este es el código nuevo, creamos un condicional que nos dice «si presionamos el click izquierdo del mouse…» nos rotamos en dirección al player (transform.LookAt(pointB)) y luego nos movemos en dirección a él con una velocidad determinada.Puesta en marcha Ahora borramos todos los scripts que estaban añadidos a nuestro NPC y agregamos el script que acabamos de crear. En la variable target debemos arrastrar el Player. Luego de eso estamos listo para probarlo.Bueno eso es todo espero que les haya gustado.
Nos vemos en la próxima edición en la cual les enseñare:

 «Como mejorar el movimiento del NPC». 

Si te gusto este post comenta y comparte.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 4

inteligencia artificial Unity (IA)

Hola a todos, bienvenidos a una nueva edición de como hacer una inteligencia artificial en Unity. Como había prometido hoy les traigo como desarrollar sensores para la detección de obstáculos en el entorno.Para comenzar vamos a ir a nuestra pestaña de proyectos, carpeta scripts, creamos un nuevo C# script y escribimos el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoordinatesSensors : MonoBehaviour {
    public GameObject sForward,sBackward, sRight, sLeft;
    private GameObject obstacle;
	
	void Update () {
        Forward();
        Backward();
        Left();
        Right();
	}
    void Forward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sForward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sForward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("adelante " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Backward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sBackward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sBackward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("atras " + h.transform.gameObject.name + " a distancia: "
               + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Right()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sRight.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sRight.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("derecha " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Left()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sLeft.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sLeft.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("izquierda " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
}

Bueno como podrán apreciar para los que están siguiendo esta saga, este código es muy similar al que ya habíamos visto en la edición anterior salvo algunos cambios. Básicamente lo que hicimos fue separarlo de alguna manera y lanzar un rayo en cada dirección.

Explicación del código

Ahora pasamos a explicar los cambios que hemos realizados en el código.

public GameObject sForward,sBackward, sRight, sLeft;

Lo que hemos hecho acá es dividir la variable target en 4 variables llamadas sensor+dirección, por ejemplo sIzquierda o en su traducción al ingles sLeft.

void Update () {
        Forward();
        Backward();
        Left();
        Right();
	}

Ya no tenemos escrito todo nuestro código en el método Update, sino que creamos 4 métodos individuales y los llamamos desde el Update.

void Forward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sForward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sForward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);
       //Continua...

Este es uno de los métodos individuales para cada dirección, en este caso es para la dirección hacia adelante. Lo único que modificamos en esto es cambiar la variable target por la variable correspondiente a la dirección del método en donde estamos.

inteligencia artificial Unity (IA)

 

Puesta en marcha

 

Bien, ya tenemos nuestro código listo pero aun no esta funcional, ya que debemos hacer algunos cambios en nuestra escena.Primero antes que nada tenemos que crear paredes a modo de obstáculos que servirán a nuestro NPC para detectar su entorno, pueden tener o no la misma forma que presentamos en la imagen.Segundo debemos crear 4 cubos dentro de nuestro NPC, a estos cubos le debemos sacar la colisión, desactivar el mesh renderer para que no se vean y colocarlo a 4 unidades de distancia desde el NPC. Es decir que debemos tener estos 4 cubos como hijo de nuestro NPC.Para colocarlo en 4 unidades seria de esta manera cuboDerecha (x=4), cuboIzquierda (x=-4), cuboAdelante(z=4), cuboAtrás(z=-4).Tercero para poder visualizar los sensores solo en la vista de escena, debemos cambiarle el icono a cada uno de ellos, esto se hace haciendo click en el cubo celeste que esta junto al nombre del objeto en la pestaña inspector.Y por último debemos borrar nuestro antiguo script de nuestro NPC, agregar este script y asignarle los 4 cubos según correspondan a sus direcciones.
Bueno eso seria todo espero que les haya gustado, nos veremos en la siguiente edición. Si te ha gustado el post no te olvides de comentarlo y compartir.
Siguiente edición Como rotar y mover nuestro NPC hacia el waypoint.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 3

inteligencia artificial Unity (IA)

Hola a todos bienvenido nuevamente a una nueva edición de como desarrollar una inteligencia artificial en Unity. Como lo prometido es deber, hoy vamos a ver como detectar obstáculos entre el NPC y el waypoint. Lo primero que tenemos que hacer es ir a nuestra pestaña de proyectos , ir a la carpeta de scripts y crear un nuevo C# script. Luego de eso escribimos el siguiente código:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RaycastArrayObstacles : MonoBehaviour {
    public GameObject target;
    private GameObject obstacle;
	
	// Update is called once per frame
	void Update () {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = target.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, target.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle= posObstacle -  point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("Primer obstaculo " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
	}
}

Como podrán ver el código no es muy distinto al anterior, si se habrán dado cuenta que es una simple modificación del código de la edición numero 2. Es por lo cual antes de continuar debemos sacar el antiguo script de nuestro NPC y agregarle el que acabamos de crear.

Explicación del código

RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

Declaramos un array de variables de tipo RaycastHit con el nombre de hit. En dicho array almacenamos todas las colisiones que pueda tener nuestro antiguo rayo de detección llamado ray.

if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle= posObstacle -  point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("Primer obstaculo " + h.transform.gameObject.name +
                " a distancia: " + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }

inteligencia artificial Unity (IA)

Comprobamos si existen al menos una colisión que nos impida avanzar en la dirección de nuestro rayo. Si eso es cierto, recorremos a través de un foreach (estructura repetitiva similar a for) todas las colisiones almacenadas en nuestro array hit. Como a nosotros no nos interesan todas las colisiones vamos a trabajar únicamente con la primera que nos está obstruyendo el paso.A la variable obstáculo le asignamos el objeto que contiene la primer colisión. Creamos una variable de tipo Vector3 para almacenar la posición del obstáculo, también otra variable del mismo tipo para almacenar la dirección del mismo.Declaramos una variable de tipo flotante que almacene la distancia entre el NPC y el obstáculo, luego de eso imprimimos en consola el nombre del objeto obstáculo y su distancia ,para luego dibujar el rayo correspondiente a esa acción en la pestaña escena. Por ultimo y no por eso menos importante un break , el cual sirve para detener la búsqueda de colisiones una vez encontrada la primer colisión.

Bueno mis queridos seguidores eso es todo por hoy, en la próxima edición veremos:

«Sensores cardinales».

No se olviden de comentar y compartir si les ha gustado esta edición.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 2

inteligencia artificial Unity (IA)

Hola a todos bienvenidos nuevamente a la segunda edición este emocionante saga sobre inteligencia artificial aplicada a videojuegos. Como había prometido hoy vamos a ver como calcular la distancia y dirección entre el NPC y su respectivo waypoint. Lo primero que debemos hacer es crear un nuevo C# script en la pestaña de proyectos (Nota: si tienes una carpeta para scripts o programación debes crearlo ahí dentro.)Luego escribimos este código:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RaycastPointToPoint : MonoBehaviour {
    public GameObject target;
	
	void Update () {
        Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

        float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia: " + distance);

        Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);
        
	}
}

Como podrán apreciar este código es mas corto que el de la edición pasada. Recuerden, una vez escrito este código debe ser asignado su NPC (nota: si no tienen un NPC, creen una esfera para hacer la prueba).Lo que debe hacer este código es calcular la distancia y dirección entre ambos, y lanzar una linea de depuración para que veamos su comportamiento.

inteligencia artificial Unity (IA)

 

Explicación del código

Antes que nada les recuerdo que el nombre del archivo debe coincidir con el nombre de la clase principal.

 public GameObject target;

Dicho esto, lo primero que hacemos es crear una variable publica de tipo GameObject llamada target, en esta variable se almacenará el waypoint actual.

Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

Declaramos 3 variables locales dentro del método Update de tipo Vector3 , este tipo almacena 3 valores flotantes etiquetados como x,y,z. A la primer variable le asignamos la posición de nuestro NPC ,a la segunda variable la posición de nuestro waypoint y por último a la tercer variable le asignamos la dirección. Para calcular la dirección entre 2 vectores basta con restar el primer vector al segundo.

 float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia: " + distance);

Ahora creamos una variable local de tipo flotante llamada distancia a la cual le asignamos la distancia entre el NPC y el waypoint. Para hacer este calculo nos ayudamos de un método que nos provee Unity el cual pueden apreciar en el código. Luego de esto mostramos en consola el mensaje «Distancia: el valor de la variable».

Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

Antes de finalizar este script creamos una variable de tipo rayo llamada ray, en la cual decimos que este rayo sea desde el NPC hasta el waypoint. Después de eso, dibujamos este rayo en la pestaña de escena con un color rojo. Para dibujar este rayo lo primero que debemos hacer es decirle su origen, hacia donde se dirige y en que color va a estar representado.
Eso seria todo por hoy espero que les haya gustado y servido. Por el momento no estamos detectando nuevos waypoint ni obstáculos solo lo estamos calculando para luego utilizarlos en la siguiente edición.No te olvides de comentar y compartir.

En la próxima edición se verá la detección de obstáculos.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 1

inteligencia artificial Unity (IA)

Hola a todos bienvenidos a nuestra primer edición sobre inteligencia artificial para videojuegos. En esta guía mostraremos a modo de ejemplo como se realiza una IA en Unity. Si bien hay varias técnicas que se pueden utilizar en este motor, como el sistema de navigation que trae incluido el engine , pero en este caso vamos a hacer una programación basada en waypoint (puntos de camino).

Creación de WayPoints

Lo primero que debemos hacer es crear un nuevo proyecto en Unity. Crear un nuevo C# script en la pestaña de proyectos. (Recuerden tener su pestaña de proyecto bien organizada con carpetas de scripts, prefabs, scenes, entre otras). Una vez creado vamos a escribir el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NavPointCreator : MonoBehaviour {
    public int id;
    GameObject wp;
	
	
	void Update () {
        if (Input.GetKeyUp(KeyCode.Space))
            CreateTarget();
	}
    void CreateTarget()
    {
        if (wp != null)
            Destroy(wp);
        GameObject waypoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
        waypoint.transform.position = new Vector3(Random.Range(7.0f, -7.0f), 0.03f, 
        Random.Range(7.0f, -7.0f));
        waypoint.name = "Waypoint " + id;
        id++;
        waypoint.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        //waypoint.GetComponent<MeshRenderer>().enabled = false;
        wp = waypoint;
    }
}

Explicación del código C#

Para resumir lo que hace este código es simplemente crear un cubo en un punto aleatorio dentro de un rango, si el cubo esta creado lo destruye y crea otro en otra posición. Esto sirve para crear los destinos u objetivos para nuestro NPC, lo que le dará un comportamiento más natural a comparación de un comportamiento lineal o por animación.Ahora pasamos a una explicación mas detalla del código.
«`public int id;GameObject wp;«`Declaramos una variable publica de tipo entero llamado id, la cual usaremos para identificar cada waypoint. También declaramos una variable privada de tipo GameObject nombrada wp, la cual contendrá al objeto cubo que representa al waypoint.

void Update () {
        if (Input.GetKeyUp(KeyCode.Space))
            CreateTarget();
	}

Si tocamos la tecla espacio llamará al método de crear objetivo.

void CreateTarget()
    {
        if (wp != null)
            Destroy(wp);
        GameObject waypoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
        waypoint.transform.position = new Vector3(Random.Range(7.0f, -7.0f), 0.03f, 
        Random.Range(7.0f, -7.0f));
        waypoint.name = "Waypoint " + id;
        id++;
        waypoint.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        //waypoint.GetComponent<MeshRenderer>().enabled = false;
        wp = waypoint;
    }

Por último tenemos el método crear objetivo. Primero se comprueba si wp no esta vacio , en ese caso se destruye el wp existente, luego se crea un cubo nuevo en una posicion aleatoria dentro de un rango , se le asigna un nombre incluyendo en él su id, se le asigna un tamaño de 0.5 y luego se guarda el nuevo waypoint en la variable wp.Existe un código comentado que sirve para ocultar la parte visible del cubo, ya que a fines prácticos nosotros no queremos ver los waypoints de nuestros NPC’s.
Bien eso sería todo, espero que les guste, no se olviden de comentar y compartir si les gusto el post.

En la siguiente edición como detectar la distancia y dirección para que el NPC se dirija al waypoint.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.