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.

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.

Tips y buenas practicas sobre Unity (Parte 2)

unity tips

11.Si arrastramos un objeto encima de otro en la vista de jerarquía (Hierarchy) esto establece un vinculo. Si un objeto esta vinculado a otro significa que es el padre o el hijo de ese objeto. El objeto arrastrado siempre quedará como hijo. Cuando un objeto es movido , rotado o escalado también sus hijos sufren estas modificaciones.

Podemos arrastrar un hijo y dejarlo arriba en la vista de jerarquía para desvincular este objeto.

12.Podemos organizar nuestra vista de jerarquía con objetos vacíos (empty gameObjects) como si fueran carpetas, colocamos una serie de objetos dentro de estos objetos , lo cual provocará una serie de hijos para este objeto vacío, esto nos permite colapsarlo en la vista de jerarquía. Recuerde cuando un objeto se convierte en hijo de otro sus transformaciones están sujetas a las del padre. Es por lo cual se recomienda poner el objeto vacío en posición 0,0,0.

Es una muy buena práctica organizar nuestra jerarquía, sobre todo cuando hay muchos objetos en la escena.

13.Las variables publicas son expuestas en el inspector, en donde podrás ajustar el valor en su propio componente después de haberlo agregado a un objeto. Esto se conoce como serializar el valor porque Unity guarda el estado modificado de la variable.

Si una variable es pública también puede ser accedida por otros scripts.

14.Un vector es un almacenamiento de multiples valores como una unidad.Por ejemplo un vector3 son 3 números flotantes (etiquetados x,y,z). Esto permite manejarlo como una única variable en vez de utilizar una variable para cada valor.

Algo similar ocurre con la utilización de arrays.

15.Es común colocar los controles de teclado y mouse en un mismo script, esto resulta más cómodo pero no es para nada flexible. Unity tiene un maravilloso sistema de componentes que debería aprovecharse. Para aprovechar la flexibilidad de este sistema debemos tratar de hacer scripts separados.

Al utilizar scripts separados podemos otorgar o denegar un determinado comportamiento a un objeto mediante el sistema de componentes.

16.Un ray es una imaginaria o invisible línea en la escena que comienza en un punto de origen y se extiende en una determinada dirección.

Esto se utiliza cuando utilizamos el Raycast u otros métodos similares.

17.Coroutines es la forma de ejecutar tareas sin que el programa espere hasta que estas sean finalizadas. Es decir se ejecuta el programa principal y la coroutina en simultáneo.

Esto seria como poner una tarea en segundo plano.

18.Render es la acción de la computadora que dibuja los píxeles de una escena 3D. Nuestro monitor es 2D es decir tiene x,y , pero lo que muestra es en 3D, lo que quiere decir que tiene x,y,z. Cuando el algoritmo que hace posible esto se está ejecutando , a esa acción se denomina rendering.

19.Finite State Machine (maquina de estado finito) es una estructura de código en la cual el estado actual de un objeto es seguido. Existen transiciones bien definidas entre los estados , y el código se comporta de manera diferente en base al estado.

Esto lo usamos en el sistema de animaciones Mecanim.

20.Un asset es cualquier archivo que se puede mostrar en la vista de proyecto; estos pueden ser imágenes 2D , modelos 3D, archivos de código, escenas y mucho más.

De ahi el nombre de su tienda Asset Store.

Si aún no has visto la edición anterior de esta saga has click aquí.

¿Buscas aprender más sobre desarrollo de videojuegos con Unity?

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

Tips y buenas practicas sobre Unity (Parte 1)

unity tips

1.Muchos desarrolladores se centran demasiado en el editor visual ; pero Unity tiene una limitación con este editor , ya que no permite editar código. Aunque Unity permite la conexión a cualquier IDE Externo como Monodevelop, Eclipse , Visual Studio, entro otros.

Personalmente como siempre trabajo con C#, utilizo Visual Studio.

 

2.Un objeto malla es un objeto visual en 3D. Las visuales en 3D son construidas por lineas y caras que forman a una maya. Para poder unir las lineas con las caras se utilizan vértices , los cuales contienen información sobre la posición , normales , UV , entre otras cosas.

Aclaración la líneas no pueden ser formadas sin vértices , y las caras no pueden ser formadas sin líneas, pero toda la información esta guardada en los vértices.

 

3.Unity permite que al darle “Play” en el editor el juego se ejecute , en realidad esto es un sistema de debug para que veamos si posee fallos nuestro trabajo , no solo que podemos ejecutarlo y probarlo ,sino también podemos ir a la pestaña de escena (scene) , seleccionar cualquier objeto de la escena y mirar en el inspector el comportamiento que esta teniendo en tiempo real.

Advertencia, todos los cambios realizados en la escena mientras estas en modo Play, no serán guardados.

 

4.La dificultad con los sistemas de control de versión (Tales como Subversion, Git y Mercurial) solían ser una debilidad importante, pero con la versión más reciente de Unity, eso ya no es problema. Es posible encontrar recursos de hace tiempo atrás, diciendo que Unity no funciona con control de versiones, pero los recursos más nuevos mencionan a los archivos de metadatos (Son el mecanismo que Unity introdujo para trabajar con sistemas de control de versión) y a cuales carpetas del proyecto se debe o no incluir en el repositorio.

Si no están familiarizados con los comandos de Git pueden usar un software llamado SourceTree. En mi caso yo utilizo los repositorios de Bitbucket.

 

5.Unity permite utilizar los 3 botones del mouse para un manejo mas fluido en la pestaña de escena (scene) , el primer botón se utiliza para seleccionar un objeto , el segundo se utiliza para orbitar en la escena y el botón central activa la herramienta “Pan”(Mano). Ademas en la pestaña de jerarquía (hierarchy) y proyecto (project) se utiliza el primer botón para seleccionar y el segundo para abrir opciones como si fuera Windows.

Además, con q,w,e,r ,t puedes cambiar el tipo de herramienta entre selección , traslación , rotación , escala , herramienta 2D.

 

6.En la pestaña de proyecto (project) existen carpetas y recursos que visualizamos. Estos archivos están directamente vinculados a la carpeta Assets de nuestro proyecto en el disco duro , por lo cual si agregamos archivos a esta carpeta Unity los sincronizara y si borramos también los borrara. Tener mucho cuidado de no borrar o mover esta carpeta porque su proyecto se puede quedar inutilizable.

Es común sincronizar esta carpeta assets para hacer los backups de tu proyecto.

 

7.Un frame es un solo ciclo del bucle principal del juego. Casi todos los videojuegos son construidos en base a un bucle en el núcleo del videojuego , en donde el código es ejecutado en ciclos mientras el juego corre. Cada ciclo incluye el dibujado de la pantalla.

FPS significa frames por segundo.

 

8.Monodevelop organiza los archivos en grupos llamado soluciones y genera una solución donde están todos los scripts ; usualmente no tienen que preocuparse por ello.

Esto mismo sucede con el IDE Visual Studio.

 

9.Los números de posición pueden ser cualquier unidad que desee. Siempre y cuando sean compatibles en toda la escena. La elección mas común para las unidades son metros y es lo que generalmente se escoje; pero aveces se suele usar “pies” como unidad, aunque hay muchos que también usan las “pulgadas”.

Tener en cuenta la unidad de medida ya que afecta directamente a la física del juego.

 

10.Siempre que perdemos de vista un objeto en la pestaña de escena (scene) , para encontrarlos debemos seleccionar nuestro objeto en jerarquía (hierarchy) y luego colocamos el mouse encima de la pestaña de escena (scene) y pulsamos “F” (focus) . Lo que hará es llevar nuestra vista de escena hacia el objeto que estamos buscando.

En caso de no encontrarlo en la vista de jerarquía tenemos un buscador en esta vista.

 

¿Buscas aprender más sobre desarrollo de videojuegos con Unity?

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

Taller de videojuegos (Material para profesores)

hola a todos hoy damos el comienzo a un taller de programación de videojuegos. Cabe destacar que este taller esta orientado para adolescentes a partir de los 14 años. Aunque esto no limita que si deseas hacerlo puedas hacerlo teniendo una edad inferior a la establecida. Esta esta edad se impone para dar entender al publico de el porqué de la manera de enseñar los contenidos.
Sin mas vueltas vamos a nuestra primera presentación.

Taller de programación de videojuegos

Bueno una vez que ya hayan visto las 6 presentaciones , que por cierto son bastante cortas. Les explico que el objetivo de subir este material es facilitarle un poco la teoría a los profesores de Unity. Anteriormente establezco que el material esta diseñado para alumnos menores de edad, por lo cual el material es rápido , al grano y explicado de la manera mas coloquial posible.

Espero que les sirva , en caso de que no seas profesor y lo hayas leído ten en cuenta que el material no se explica por si solo , es tan solo un apoyo teórico para que los alumnos puedan recordad ciertos temas explicados en clases. Saludos y hasta la próxima.
¿Buscas un curso sobre cómo aprender a desarrollar videojuegos con Unity?

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

Scripting C# : Properties

Hola a todos hoy les voy a enseñar como utilizar Properties en C#.
Los properties te permiten acceder a una variable privada de otro script , definiendo si solo quieres que sea leída o si también puede ser modificada desde un script externo.

Primero creamos un script C# con el nombre de “PJ”, luego escribimos lo siguiente:

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

public class PJ {
    int health = 5;

    public int vida {
        get
        {
            //Debug.Log("internal: "+ health);
            return health;
        }
        set
        {
            health = value;
        }
    }
}

Ahora creamos otros script con el nombre de “GameController” y copiamos lo siguiente:

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

public class GameController : MonoBehaviour {
    PJ player = new PJ();
    int health=10;
	// Use this for initialization
	void Start () {
        Debug.Log("gameController:"+health);
        Debug.Log("Pj:" + player.vida);
        player.vida = health;// set
        health = player.vida/2;// get
        Debug.Log("gameController:" + health);
        Debug.Log("Pj:" + player.vida);

    }
}

Bien , lo que deben hacer ahora es arrastras el GameController a un objeto vacío en una escena nueva. Al darle play veran en la consola algo como esto:

  • gameController:10
  • Pj:5
  • gameController:5
  • Pj:10

Como podran ven el valor de gameController se inverte con el de Pj. Para entender esto vamos a explicar que hicimos paso por paso.


Comencemos por el script Pj:

  • Borramos el MonoBehaviour de la clase
  • Creamos una variable privada de tipo entera con el nombre de health ,con un valor asignado de 5.
  • Creamos el properties ( public int vida) significa que es publico , devuelve un entero y su nombre es vida.
  • Recuerden que un properties es una variable por lo cual debe ir en minúsculas y no debe llevar paréntesis.
  • Abrimos y cerramos llaves , dentro de estas definimos el get y set . Cada uno de ellos con sus llaves correspondientes.
  • Dentro de get debe ir el return que es el valor que tiene que devolver, como ya lo habíamos definido arriba debe ser un valor entero , es por eso que devolvemos la variable entera (int) health.
  • Dentro de set debe ir la variable privada a la que estamos accediendo y le asignamos “value” donde esta el valor que fue asignado a vida.

Seguimos por el script GameController:

  • Creamos una variable de tipo Pj (nombre del otro script) con el nombre player y le asignamos una nueva instancia del mismo. Es decir creamos un Pj dentro de la clase GameController. Aunque les recomiendo saber sobre instancias antes de mirar este tutorial.
  • Creamos una variable privada de tipo entera con el nombre de health y le asignamos el valor de 10.
  • En el método Start imprimimos varios mensajes en consola con la sentencia Debug.Log.
  • Asignamos en la linea 12 al properties vida el valor de health de GameController, que en este caso es 10.
  • En la linea 13 asignamos a la variable health de GameController el valor del properties vida dividido 2 , ya que en la linea anterior habíamos cambiado su valor a 10.

Bueno espero que hayan entendido pronto actualizare este post con mas ejemplos de properties , así que no dejen ve verlo.

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

Unity Ads: Como colocar publicidad a tu videojuego

Unity Ads: Como colocar publicidad a tu videojuego

hola a todos hoy les traigo un pequeño tutorial sobre como agregar publicidad a tu videojuego para Android o IOS. El proceso es bastante sencillo.
Paso 1:
Dirigirse a la Unity Ads Service  , y entrar en el botón “Comienza a monetizar ahora”. Te dirigirá al inicio de sesión de unity service, solo debes iniciar sesión o si aun no tienes cuenta debes crearte una. (Se inicia con la cuenta de Unity).

Ads Unity publicidad

Paso 2:

Una vez iniciado sesión , te aparecerán los proyectos ya existentes que tienes. En caso de no tener ninguno , debes crearte uno y seguir las instrucciones. (Este paso no lo explico ya que es muy sencillo). Luego , cuando te muestre tu proyecto en la pestaña “projects”, entras en el proyecto haciendo click sobre él.

Ads Unity publicidad

Paso 3:

A estas alturas estarás en una pantalla en donde se encuentras 4 pestañas , plataforma , estadísticas, ajustes e instrucciones.(Como se muestra en la captura)

Ads Unity publicidad

Paso 4:

Ahora nos dirigimos a la pestaña instrucciones. En esta pantalla , hay 2 apartados , integración fuera de Unity o integración dentro de Unity. En este tutorial enseñaremos como hacer al integración dentro de Unity.

  1. Descargar el Assets de Unity Ads ( enlace )
  2. Copiar tu ID de juego, que lo encontramos en la pantalla anterior en la pestaña plataformas.

Ads Unity publicidad

 

Nota: Dentro del proyecto de Unity , debería quedarle algo mas o menos similar a la captura.

Ads Unity publicidad

 

Paso 5:

En este ultimo paso , debemos crear un script dentro de Unity para poder utilizar el plug in de Unity Ads. En este tutorial mostraremos un ejemplo en C#. Donde se encuentra “0000000”, usted deberá poner su ID de juego.

using UnityEngine;
using UnityEngine.Advertisements;
using System.Collections;

public class SystemAds : MonoBehaviour
{
    bool _startAds = false;
    void Start()
    {
        #if UNITY_IOS || UNITY_ANDROID
            Advertisement.Initialize("0000000", false);                          
        #endif
        
    }
    void Update()
    {
        #if UNITY_IOS || UNITY_ANDROID
        if (UnityAds.isShowing==false && _startAds==true)
        {
            _startAds = false;
        }
        #endif
    }

    public void ShowAds() // metodo externo para llamar a las ads
    {
        #if UNITY_IOS || UNITY_ANDROID
        StartCoroutine(ShowAdWhenReady());
        #endif
    }
    IEnumerator ShowAdWhenReady()
    {
        while (!Advertisement.IsReady())
            yield return null;

        Advertisement.Show();
        _startAds = true;
        
    }
}

Nota: Para poder probar las ads antes de publicar el juego , ir a la pestaña de ajustes y habilitar el modo prueba. Luego de comprobar que todo funcione correctamente , desactivarlo. Tenga en cuenta que demora en activarse los verdaderos anuncios y es probable que por unas horas no tengan ningún anuncio funcionando.

Bueno espero que les haya gustado este pequeño tutorial. Espero que les sirva. Nos vemos y hasta la próxima.

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

Como hacer un buen marketing para tu videojuego

Hola a todos , bienvenidos y gracias por visitarnos. En  el día de hoy les presentamos una guía sobre como hacer un buen marketing , aunque se que hay muchísima información respecto a esto; el enfoque que vamos a tener en este post es muy poco encontrado en otras webs, al menos en español.

Al hablar de marketing todos piensan en ventas , en imágenes y videos vistosos , en mucho dinero para invertir en ads de redes sociales , etc. Pero realmente ¿eso es lo que queremos lograr? ¿Nos da el resultado que nosotros estamos buscando? Es muy probable que no. Pero ¿porqué?, si estoy haciendo todo lo que dicen las paginas de marketing y los grandes líderes del sector publicitario. Es sencillo , vender un videojuego , es muy distinto a vender un curso, un auto , o cualquier servicio. ¿Cual es la diferencia? si las conceptos se pueden aplicar a cualquier producto (eso es lo que te venden todos los marketers).

Un videojuego tanto sea para android , ios , web , pc o cualquier consola , su objetivo no es vender el juego en si , sino es atrapar al cliente dentro del juego. ¿Te parece loco? No , no lo es. No nos sirve a nosotros tener 10 mil descargas si solo de esas 50 permanecen instaladas. Pero ¿qué paso acá?, ¿mi juego es tan malo? Hay dos motivos generales por lo cual pasa ese acontecimiento tan triste. El primero es que tu juego no tiene calidad suficiente como para atraer a la gente. El segundo tu juego si tiene la calidad , pero has llegado al publico equivocado. Es como querer venderle unos guantes de boxeo a un futbolista. Ese va a ser tu margen de ventas.

¿Porqué he llegado al publico equivocado? Por lo general el sistema de ads , para los que son nuevos, te trae gente equivocada. Para utilizar correctamente los ads , se tiene que ser lo mas especifico posible, no importa que salga un poco mas caro o llegues a menos publico, mientras ese publico sea el correcto. Aunque este post no se trata de enseñar como utilizar correctamente las ads, para eso hay mucho material y me parece innecesario hacerlo. Solo tengan en cuenta ese detalle antes de invertir en su campaña de ads.

 

Conceptos generales

Bien vamos a repasar los conceptos generales , conceptos que podemos encontrar en cualquier web.

marketing oranfy
Imagen de nuestro juego

Titulo: De tener un titulo seo o un titulo aso para móviles. Esto es todo lo que nos dicen , con eso prometen explicar la clave del éxito , aunque la mayoría de nosotros no sabe hacer un titulo seo eficiente o aso. Todos nos ponemos a investigar sobre seo que la mayoría de las técnicas son para webs no para juegos, o investigar aso , que en si te dices una cosa y otra, pero al menos en mi persona veo que todos hablan de lo mismo.

Imágenes: Las imágenes tienen que ser “promocionales” , con una calidad estupenda , llamativas , que resalte lo mejor de tu juego. Pero si pones una captura real de tu juego eso no vende , necesita hacer “marketing” , para que sientan el deseo de jugar al juego. Entonces , ¿les estoy vendiendo algo que no es? No , para nada (dicen ellos) solo les despertas el deseo por probar tu juego una vez dentro del juego ya los tienes. En realidad cuando están a dentro del juego si les has vendido algo muy fascinante y por dentro no lo es; en 2 segundos el cliente eliminará el juego y te dejara un comentario horrible.

Ahí esta su gran estrategia de marketing para vender. Están en lo cierto de que no se debe vender con capturas únicamente,  porque no llaman demasiado la atención del cliente, pero si deben haber algunas para que el cliente sepa como es el juego antes de descargarlo o comprarlo. Dirán , puff esto es algo muy básico y muy visto por internet, si pero he visto muchísimos juegos que únicamente tienen imágenes promocionales de diferentes características de su juego y no muestran como es el juego real.

Videos: Con un super video promocional que te cuesta un par de miles de dolares , le vendes a dios y a la madre santísima. Si , es cierto . El video promocional es uno de los que mas venden y los que mas despiertan esa necesidad por querer jugar a tu juego. Nuevamente repito que debe haber un gameplay real, ya que en la actualidad todos los usuarios saben de este truco publicitario y no se dejan guiar únicamente por el trailer.

Bueno me imagino que todos estos conceptos ya los habías leído antes en otras webs, esta repleto de copias de estos mismos métodos. Al igual que los métodos de monetización tanto sea compra , pago dentro del juego o por publicidad. En fin , no vine a hablar sobre eso, después de dar este pequeño pantallazo vamos a comenzar con el post.

 

Como hacer un correcto maketing para tu videojuego

Indagando por internet he encontrado muchísimos métodos , algunos mas efectivos que otros; pero comencé a combinarlos y poco a poco pude armarme un especie de mapa de marketing que se los describiré a continuación. (Nota: Es probable que muchas de lo que voy a decirles ya lo sepan)

Marketing de videojuegos: Se divide en varias partes.

  • Juego.
  • Tienda.
  • Herramientas.
  • Periodicidad de publicación.
  • Material necesario.
  • Plan de marketing.
  • Tips de tienda.
  • Comunicaciones.

Como podrán apreciar son 8 ramas en donde vamos a explicar en cada una de que trata y que hay que hacer en ella.

Juego: Este es el mas sencillo de todo , es la ficha técnica de nuestro juego.

  1. Localización (idioma).
  2. Analítica de juego ( como analizar a la competencia).
  3. Análisis de respuesta ( como analizar nuestro avance).
  4. Analítica de ventas ( como analizar nuestras ganancias).
  5. Enlaces sociales ( como analizar nuestra presencia en redes sociales).

Tienda: Es tan sencillo como saber a que plataforma/s va a estar destinado nuestro juego.

  1. App Store (iOS , TvOS).
  2. Google Play.
  3. Steam.
  4. Windows Store.
  5. Xbox.
  6. PlayStation.
  7. Facebook.
  8. Web.

Si bien hay muchas mas plataformas que esas , pero esas son las principales.

Herramientas:

  1. MailChimp ( newsletters automatizado).
  2. AppAnine ( monitorizar apps).
  3. Trello ( administrador de proyecto).
  4. Analitycs.
  5. Gameconfs (Eventos).
  6. Keywords ( KeywordPlanner , google trends , keywordtool, sensortower.com, appcodes.com , searchman.com , searchads.apple, onelook , apptweak).
  7. Hootsuite (planificador de publicaciones).

Como estas herramientas podrías listas muchas mas , para diversas actividades pero no quiero que se extienda aun más este post.

marketing redes sociales

 

Periodicidad de publicación:

  1. Una vez a la semana ( Blog personal , Linkedin, Forums, Twitch , Reddit).
  2. Dos o mas veces a la semana (Facebook, Twitter , Google plus, Instagram).

Antes de pasar al siguiente punto me gustaría hacer un apartado para facebook y twitter , así están mas orientado en lo que deben hacer. Tuve en cuenta de que la mayoría de los juegos actuales son en ingles o tiene la posibilidad de cambiar su idioma a ingles. Sabiendo esto , vamos a la lista.

Facebook:

  • Fanpage.
  • Grupos indies (indie groups) “Estos se detallas a continuación”.
  • Indie Game dev (#screenshotsaturday)
  • Promote your indie game
  • Indie game players ad developer
  • UnityIndieDevs
  • Indie game developers – game marketers
  • indiegamedevelopersunshine
  • Unity 3D
  • Indiedevhangout
  • Indie Game Dev Discussion
  • indiegamesmarketing
  • Indie Game Promotions (#ScreenShotSaturday)
  • Independent Game Developers
  • Unity3Dgame developers

Estos son algunos de los grupos que yo publicaría si necesito difundir mi juego.

Twitter:

  • #indieDevHour  (Miércoles 7 pm, UK time)
  • #ScreenShotSaturday
  • #MadeWithUnity (Viernes)
  • #IndieGame
  • #unity3d
  • #gamedev
  • #Indiedev
  • #IndieFeatureFriday
  • #UnityTips (Martes)
  • #IndieGameDev
  • #EpicFriday

Bueno estos son algunos de las hashtag que se utilizan para difundir en twitter, espero que les sirva.

Material necesario:

  • Trailer ( duración máxima 1.30 min , el logo de la compañia al final , resaltar los primeros 15 segundos).
  • Gif (Concentrarse en una cosa, corto y bonito , el bucle gif debe ser perfecto).
  • Imágenes ( Capturar solo el núcleo del juego).
  • Sitio web.
  • Kit de prensa.
  • Fanpage.
  • Twitter.
  • Indie DB ( base de datos).
  • Blog.
  • Engine Blog (MadeWithUnity).
  • Un slogan clave en la imagen clave / obras de arte.
  • Lista de deseos de periodistas.
  • Construye las 5 mejores características de tu juego.
  • Encuentre el punto de venta ( compare su mejor característica con la de su competidor para identificar el punto de venta único).
  • Resuma su juego en una oración.
  • Personalizar la línea de asunto (email).

Estos son algunos de los materiales más importantes a la hora de difundir tu videojuego.

Plan de marketing:

  • AMMA en reddit el día del lanzamiento.
  • Calendario de publicación.
  • Crear una línea de tiempo.
  • Modelo de negocio.
  • Medición.
  • Presupuesto.
  • Geografía.
  • Plataformas / Tiendas.
  • Audiencia objetivo (Sexo , Edad).
  • Competidor ( Quien es mi competidor  / Qué de valor ya está sirviendo mi competidor).
  • Cliente (Quién encontraría valor en el juego / Qué clientes no satisfecho vienen de mi competidor / Qué te llamaría la atención / Por qué descarga tu juego y no otro).

Este es un pequeño plan de marketing muy general , como para que tengas una guía de por donde empezar.

Tips de tienda:

  • Titulo localizado.
  • Descripción localizada ( Qué genero es / Como funciona el juego / Cuáles son las mejores características / Donde está el reto / Por qué es mejor que otro juego / La primera o segunda oración son las más importantes que escribirás).
  • Imagen localizada.
  • Metadatos y palabras clave localizados.
  • Encuentre las palabras clave adecuadas ( Relación / Competencia / En lugar de “carta de amor” o “carta a escribir”, utilice el amor, la carta, la escritura /  No es necesario usar plural / Búsqueda de hashtags relacionados con tu juego / Siga los perfiles de sus competidores en las redes sociales y lea lo que dicen sus seguidores / Siguiendo otros grandes perfiles relacionados con su nicho y viendo lo que sus seguidores están diciendo).

Algunos pequeños tips nunca están de mas y sobre todo cuando se trata de las tiendas.

Comunicaciones:

  • Días para enviar correos ( Martes y Miércoles).
  • Tenga en cuenta las zonas horarias.
  • Venda su historia tanto como el juego.
  • Contenido del correo ( Descripción corta / Enlace al trailer / Enlace al kit de prensa / Enlace al juego /No olvide incluir su punto de venta único / Personalizar la línea de asunto / Pedir comentarios).

El email marketing es muy importante , es muy común dejarlo en el olvido. Por eso les recuerdo usarlo , si se sabe usarlo puede ser una herramienta muy poderosa.

marketing
PD: Así he terminado después de hacer este post.

Bueno eso es todo por hoy , espero que les haya gustado . Un saludo y hasta la próxima.

¿Te gustaría aprender a desarrollar videojuegos con Unity?

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

Tip: Maximizar vista previa del inspector

Tip: Maximizar vista previa del inspector

Hola a todos , en el día de hoy les traigo un nuevo tip. En donde explica como maximizar la ventana de pre-visualización. Que nos muestra unity en el inspector cuando seleccionamos un modelo , material o animación. Esto puede resultar muy útil cuando son modelos o animaciones detalladas. Y necesitamos verlos mas grande para poder apreciar el detalle. También, necesitamos comprobar si esta o no correcto antes de importarlo a nuestra escena de Unity.

Si les gusta esta serie de tips y no han logrado verlos todos , le dejare el enlace de la lista de reproducion.

¿Te gustaría aprender más sobre Unity?

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

Tutorial “Realtime GI” parte 2

Resolución en tiempo real

Hola a todos aquí les traigo en español el tutorial oficial de Unity sobre “ realtime resolution”. Espero que les guste. De antemano les pido disculpa si en alguna ocasión la traducción no se entiende o es errónea. Si más para decir , vamos al tutorial:
(Para versión: 5.5 – Dificultad: Intermedio)

Se requiere haber leído la parte 1 de este tutorial : enlace

Cuando se configura una escena para la iluminación mediante “Precomputed Realtime GI”.Una de las primeras decisiones que se deben tomar. Es determinar la resolución en tiempo real predeterminada de su escena. Resolución en tiempo real es el número de texels de mapa de luz real (píxeles de textura) en tiempo real utilizados por el mundo de Unity.

Resolución en tiempo real se puede observar o establecer en la ventana de iluminación, de la siguiente manera:

  • Abra la ventana Iluminación (Window > Lighting) y, a continuación, seleccione la pestaña Scene.
  • Asegúrese de que la “Precomputed Realtime GI” esté activada marcando su casilla de verificación.
  • Observe la propiedad “Realtime Resolution” debajo de la casilla de verificación Precomputed Realtime GI.

Realtime GI

Ventana de iluminación de Unity que muestra la configuración global de la resolución en tiempo real de escenas.

 

Elegir una resolución en tiempo real adecuada

Al configurar una escena es importante tener alguna idea de la escala de unidad que su proyecto necesitará. Podría ser que en su proyecto una unidad es un metro, un pie o un centímetro. Las unidades Unity no tienen una equivalencia por defecto en la escala del mundo real. Por lo que depende del usuario decidir qué representa una unidad.
En nuestro proyecto de ejemplo hemos decidido que una unidad es equivalente a 1 metro. Ciertos conceptos de física asumen lo mismo. Por ejemplo, la gravedad se representa en unidades por segundo como un valor predeterminado en Unity. Suponiendo que una unidad es equivalente a 1 metro . Es por lo tanto una buena configuración para un escenario de juego del mundo real.

A menudo la resolución en tiempo real de tu escena puede determinarse a partir de la escala de tu mundo de juego. Por ejemplo, ¿es su escena pequeña, pero el interior ricamente poblado con un montón de variación en “bounced lighting”?. En este caso, las resoluciones de mapa de luz es más alta, como 2-3 texels por unidad .Podrían justificarse para capturar esta iluminación más detallada o de “alta frecuencia”.

Tal vez su escena es un gran ambiente al aire libre. Donde la escala mundial es considerablemente más grande. Usted puede tener superficies que son cientos o incluso miles de unidades en el área con poca variación para modificar el color de la “bounced lighting”. En casos como estos, una resolución que sea apropiada para capturar los detalles de iluminación presentes en una escena interior. Sería un desperdicio cuando se aplicara a través de las extensiones grandes y menos destacadas de un entorno al aire libre.

Estaríamos desperdiciando valioso tiempo de CPU y memoria disponible por tener que almacenar y actualizar texels de mapa de luz que no están contribuyendo mucho a la apariencia general de la escena. Lo que es más importante, para los propósitos de este tutorial, estaríamos aumentando el número de texels de mapa de luz que deben ser considerados durante el precomputo de iluminación. Esto puede tener un impacto enorme en tiempos precomputación.

En el caso de un entorno exterior, una resolución de mapa de luz apropiada puede estar entre 0.5 -1 texels por unidad para objetos grandes dentro de la escena, o 0.1 – 0.5 texels para el terreno.

 

Resolución GI en tiempo real  vs. mapas de luz tradicionales

Los valores de resolución en tiempo real requeridos por el “Precomputed Realtime GI” de Unity . Son órdenes de magnitud menores que las densidades de texels tradicionales de mapa de luz. Esto se debe a que sólo estamos captando la iluminación indirecta en estos mapas de luz. Y esto tiende a ser muy suave o “baja frecuencia”. Cuando se utiliza la “Precomputed Realtime GI”, las sombras nítidas normalmente se proporcionan por sombras en tiempo real en lugar de mapas de luz de alta resolución.
El uso de valores que parezcan apropiados en las técnicas tradicionales de lightmapping – digamos 30 texels por unidad – probablemente resultará fallos o de otra manera no completado. Los valores más adecuados son alrededor de 2 – 3 texels por unidad para escenas interiores, y 0.5 – 1 para ambientes al aire libre. Esto es suponiendo que estamos trabajando con una escena escala humana. Con un tamaño de unidad de 1 unidad = 1 metro. Si la escala mundial fuera sustancialmente diferente, estos valores tendrían que ser ajustados en consecuencia.

Scenario Realtime Resolution
Interiores 2 – 3 texels por unidad
Exteriores 0.5 – 1 texels por unidad
Terrenos 0.1 – 0.5 texels por unidad

Valores apropiados suponiendo un mundo de escala humana con 1 unidad que representa 1 metro.

Al configurar inicialmente la resolución en tiempo real de nuestra escena, estamos especificando la resolución predeterminada, para objetos estáticos dentro de nuestra escena. El nuevo GameObjects con un MeshRenderer marcado como Lightmap Static en la parte superior del Inspector. Usará este valor hasta que se modifique de otra manera.

Además de elegir la resolución en tiempo real para toda la escena. También tenemos la opción de cambiar la resolución del mapa de luz por objeto. En los casos en que necesitamos la fidelidad adicional ofrecida por resoluciones más altas, podemos aumentar selectivamente este valor. En general, es menos trabajo establecer la resolución más común como predeterminado de escena. Y, a continuación, aumentar manualmente la resolución en aquellos objetos que necesitan más detalles de iluminación. Discutiremos los enfoques para modificar la resolución por objeto más adelante en el tutorial.

 

Configuración de la resolución en tiempo real de nuestra escena

Si desea seguir adelante, estaremos trabajando en la escena LightingTutorialStart incluida con el Tutorial de optimización de iluminación vinculado en la parte superior de esta página.
En nuestro escenario de ejemplo, tenemos un ambiente al aire libre con un terreno de tamaño medio de un color razonablemente constante. Para ello, una baja resolución en tiempo real de 0,5 texels por unidad. Esto sería suficiente para capturar la iluminación rebotada de otros objetos en la escena.

Sin embargo, también hay una serie de casas de madera. Estos son mucho más detallados. Como hay muchas más casas que objetos de terreno en la escena, debemos establecer la resolución en tiempo real para que sea apropiada para las casas. Podemos entonces modificar la resolución utilizada por los objetos del terreno individualmente. Esto reducirá la cantidad de trabajo necesario al preparar nuestra escena. Con esto en mente, vamos a utilizar un valor de 1 texel por unidad mundial para nuestra resolución por defecto en tiempo real.

  • Abra la ventana Iluminación (Window > Lighting) y seleccione la pestaña Scene.
  • Establezca el valor de  “Realtime Resolution” en 1.

Teniendo en cuenta que hemos decidido que la escala de nuestra escena sea 1 unidad = 1 metro, esto significa que un único texel de mapa de luz creado por el “Precomputed Realtime GI” de Unity equivaldrá a 1x1m de tamaño. Esto puede parecer muy bajo, pero recuerde que sólo estamos captando la luz indirecta. Sombras nítidas y especularidad de la iluminación directa serán proporcionados por luces en tiempo real en la escena.

Bueno , eso seria todo por el día de hoy , si te ha gustado este tutorial no olvides subscribirte (aquí) para ser notificado por correo cuando publiquemos la siguiente parte de este tutorial. (Se publicará una parte por semana).
¿Te gustaría aprender más sobre Unity?

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