Acceder Registrarme

BREVE INTRODUCCIÓN A LA PROGRAMACIÓN DE VIDEOJUEGOS CON UNITY 3D


En este artículo explicaremos un poco sobre la programación de videojuegos, específicamente con la tecnología de Unity 3D. Cabe mencionar que ésto ya se explicó en el meeting gratuito emitido por parte de Codideep; sin embargo, aquí cargaremos toda la información, scripts y demás que se usó en dicho meeting. Tendremos que entender los conceptos más básicos del entorno que usaremos y así desenvolvernos de mejor manera.

Autor: Kevin Arias (Ver todos sus post)

Unity 3D C# Videojuego

Fecha de publicación: 2018-12-02 15:14:31

Ayúdanos con el arduo trabajo que realizamos.
[ARTÍCULOS GENERALES] BREVE INTRODUCCIÓN A LA PROGRAMACIÓN DE VIDEOJUEGOS CON UNITY 3D

Antes de empezar con el desarrollo de la aplicación de nuestro videojuego; lo primero será entender algunos conceptos básicos por lo que primero revisemos la parte teórica del caso.

Unity

Unity es un motor de videojuegos que de forma sencilla nos permite programar interacción del usuario con un mundo virtual donde podemos escribir nuestro propio universo para el juego de computadora que deseemos desarrollar.

Entorno de Unity

Escena

La escena no es más que un ambiente donde se podrá incorporar todo el diseño, modelo, objetos e interacciones del jugador y el videojuego.

Cámara principal y luz direccional

La cámara principal y dirección de luz son dos componentes, siendo que posiblemente la primera de éstas sea la más importante en una escena, ya que la cámara nos permite movilizarnos visualmente en el entorno; así también la dirección de luz nos da una perspectiva de sombra para dar el efecto más adecuado a los objetos añadidos a la escena.

Assets

Éstos son recursos que podremos agregar a nuestro proyectos para dar interacción con el jugador.

Objetos primitivos

Existen diferentes tipos de objetos, pero para fines prácticos nosotros haremos uso de los objetos 3D de los cuales podremos ver que Unity nos ofrece ciertos componentes ya prediseñados como cubos, cilindros, esferas, etc.

Rigidbody

El rigidbody es una propiedad que aplica física a un objeto, con lo que podemos incorporar un comportamiento más real y acorde a la posible necesidad del tipo de videojuego que estemos desarrollando.

Collider

El collider es una propiedad que nos permite detectar colisiones en un objeto, con lo que podemos dar cierto evento "Reacción" a la interacción de un objeto con algún otro que pueda existir en nuestro entorno virtual.

Ahora que ya se explicó un poco de los conceptos más básicos de Unity, podemos pasar a desarrollar nuestro primero videojuego.

En el video de la parte inferior se encuentra los pasos a seguir para desarrolar nuestro primero videojuegos de naves, un ejemplo realmente sencillo pero funcional para nuestra primera experiencia con esta herramienta.

El video no tiene audio como tal por lo que sólo servirá para guiarse en el procedimiento que se debe realizar y aqui también incorporaremos todos los scripts empleados en ese video.

Avión.cs

En este script se encuentra todo los eventos y comportamiento que se le da a nuestro personaje.

using UnityEngine;

public class Avion : MonoBehaviour
{
    private bool _arrowPress;

    private void Start() { }

    private void Update()
    {
        _arrowPress = false;

        if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            GameObject p1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            GameObject p2 = GameObject.CreatePrimitive(PrimitiveType.Sphere);

            p1.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
            p2.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);

            float xTemp = transform.localPosition.x;
            float yTemp = transform.localPosition.y;
            float zTemp = transform.localPosition.z;

            p1.transform.localPosition = new Vector3(xTemp - 0.87f, yTemp - 0.5f, zTemp - 0.6f);
            p2.transform.localPosition = new Vector3(xTemp + 0.87f, yTemp - 0.5f, zTemp - 0.6f);

            p1.AddComponent();
            p2.AddComponent();
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            _arrowPress = true;

            if (transform.rotation.z < 0.25)
            {
                transform.Rotate(new Vector3(0, 0, 2));
            }

            if (transform.position.x > -10)
            {
                transform.position += new Vector3(-0.3f, 0, 0);
            }
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            _arrowPress = true;

            if (transform.rotation.z > -0.25)
            {
                transform.Rotate(new Vector3(0, 0, -2));
            }

            if (transform.position.x < 10)
            {
                transform.position += new Vector3(0.3f, 0, 0);
            }
        }

        if (!_arrowPress)
        {
            if (transform.rotation.z < 0)
            {
                transform.Rotate(new Vector3(0, 0, 2));
            }

            if (transform.rotation.z > 0)
            {
                transform.Rotate(new Vector3(0, 0, -2));
            }
        }
    }
}

Init.cs

Aquí inicializamos los obstáculos a los cuales habrá que destruir mediante disparos de nuestro avión.

using UnityEngine;

public class Init : MonoBehaviour
{
    private void Start()
    {
        for (int i = 0; i < 10; i++)
        {
            GameObject metor = GameObject.CreatePrimitive(PrimitiveType.Cube);

            metor.transform.localScale = new Vector3(1, 1, 1);
            metor.transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50));

            metor.AddComponent();
        }
    }

    private void Update() { }
}

Meteor.cs

Este script dará el comportamiento a los obstáculos que se han inicializado, de tal manera que aquí le damos movimiento, velocidad, giro y demás.

using UnityEngine;

public class Meteor : MonoBehaviour
{
    private float _speed;

    private void Start()
    {
        gameObject.AddComponent();
        gameObject.GetComponent().useGravity = false;
        gameObject.GetComponent().isTrigger = true;

        _speed = Random.Range(-0.25f, -0.1f);
    }

    private void Update()
    {
        transform.Rotate(new Vector3(Random.Range(1, 5), Random.Range(1, 5), Random.Range(1, 5)));

        if (transform.localPosition.z <= 0)
        {
            transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50));
        }

        transform.position += new Vector3(0, 0, _speed);
    }

    private void OnTriggerEnter(Collider other)
    {
        Destroy(gameObject);
        Destroy(other.gameObject);

        GameObject metor = GameObject.CreatePrimitive(PrimitiveType.Cube);

        metor.transform.localScale = new Vector3(1, 1, 1);
        metor.transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50));

        metor.AddComponent();
    }
}

Proyectil.cs

Finalmente incorporamos el script para el comportamiento del proyectil, el cual realmente ya se crea en el script de Avion.cs; sin embargo, aún no se dió niguna interacción en nuestro entorno con respecto a el/los proyectiles creados.

using UnityEngine;

public class Proyectil : MonoBehaviour
{
    private void Start()
    {
    }

    private void Update()
    {
        if (transform.localPosition.z > 50)
        {
            Destroy(gameObject);
        }

        transform.Translate(new Vector3(0, 0, 0.4f));
    }
}

De esta manera finalizamos con los script y para tener más detallado el proceso a llevar, Ud. puede revisar el video de la parte inferior.

Conclusión

Como podemos ver, el script incorporado y revisando aún mejor el video; sabremos que el trabajo con Unity 3D es realmente muy sencillo y de esta manera podemos crear nuestros mundos virtuales, simulaciones y mucho más. Todo dependerá de la creatividad que cada uno pueda tener.




INFORMACIÓN SOBRE EL AUTOR DEL ARTÍCULO
KEVIN ARNOLD ARIAS FIGUEROA (EXECUTIVE DIRECTOR - CODIDEEP E.I.R.L.): Soy una persona muy comprometida con lo que hago, realizo todas mis labores cumpliendo los objetivos que me haya planteado inicialmente; me interesa mucho aprender nuevas tecnologías y constantemente estoy actualizándome con respecto a los cambios de la misma transformación digital a nivel empresarial. Tengo muchos años de experiencia en desarrollo de software y dirección de equipos de trabajo, he ejercido roles de analista funcional, arquitecto de software y jefe de proyecto, por lo que me siento preparado para llevar la rienda de cualquier reto laboral relacionado a mi área.


  • Debes estar logueado para realizar comentarios