Soluciones para cada Reto de Unity de Mayo 2024

Soluciones para cada Reto de Unity de Mayo 2024

María Santos María Santos
6 minutos

Leer el artículo
Audio generated by DropInBlog's Blog Voice AI™ may have slight pronunciation nuances. Learn more

Reto 01 (05 / 04 / 2024)

Enunciado

El primer reto del mes consiste en crear una función para redirigir a una URL y asígnalselo a un botón.

Solución

Una posible función que resuelve el problema es la siguiente:

public void GoToURL(string url)
{
    Application.OpenURL(url);
}

En este caso, como es una función que vamos a asignar a un botón, tiene que ser pública y no devolver nada (que el tipo de output sea void). Luego, para poder aprovechar la función en múltiples botones, hacemos que la url pueda ser variable creando un parámetro de tipo string, que será la url a la que queramos que redirija el botón.

Finalmente, utilizamos la función Application.OpenURL() que es la que, dada una url, nos llevará al sitio web que le hayamos indicado.

Reto 02 (12 / 05/ 2024)

Enunciado

Crea una función para para generar un vector de 3 dimensiones aleatorio.

Solución

Una posible función para resolver el problema de generar un vector aleatorio de 3 dimensiones sería la siguiente:

private Vector3 RandomVector3(float min, float max)
{
    float x = Random.Range(min, max);
    float y= Random.Range(min, max);
    float z = Random.Range(min, max);

    return new Vector3(x, y, z);
}

En esta función hemos optado porque las 3 coordenadas tengan los mismos mínimos y máximos, de modo que se está generando un vector aleatorio dentro de un cubo, ya que cada coordenada se mueve dentro del mismo intervalo [min, max].

En caso de querer establecer diferentes límites para cada una de las coordenadas, se tendrían que indicar un mínimo y un máximo para cada una de ellas.

Luego, la función tiene un output de tipo Vector3 para poder devolver el vector aleatorio de 3 coordenadas que ha sido generado.

En cuanto al modificador de acceso de la función, hemos indicado que la función sea privada, aunque en caso de necesitar tener acceso a la función desde cualquier otro script del proyecto, necesitaríamos cambiarlo a public.

Aprovechamos también para recordar que la función Random.Range cambia ligeramente si le pasamos un mínimo y un máximo de tipo int o de tipo float. ¿Lo sabías? De no ser así, échale un vistazo a la documentación.

Reto 03 (19 / 05/ 2024)

Enunciado

Crea una función para controlar el estado de Mute de una componente Audio Source mediante un Toggle

Solución

Una posible función para resolver el problema sería la siguiente:

[SerializeField] private AudioSource _audioSource;

public void Mute(bool muted)
{
    _audioSource.mute = muted;
}

No hay que olvidarse de asignar una componente Audio Source a la variable. Por ejemplo, podría tratarse de la componente Audio Source encargada de la música de fondo de nuestro videojuego.

En este caso, al haber utilizado el atributo SerializeField, tendremos que realizar la asignación de la componente Audio Source correspondiente desde inspector.

¿Y cómo funciona esta función? Pues muy sencillo: si la variable _audioSource ha sido correctamente referenciada, entonces se accede a la propiedad mute, que es de tipo bool y se le asigna el valor que le entre por parámetro. Entonces, si muted vale true, entonces haremos que _audioSource.mute valga true, muteando así la componente Audio Source. En caso contrario, muted vale false, por lo que haremos que _audioSource.mute también valga false, indicando así que no queremos que la componente esté muteada.

La función es pública y no tiene output porque va a ser asignada a un Toggle. Además, el único parámetro de la función (no puede tener más), debe ser de tipo bool para que así la componente Toggle pase el valor true o false dinámicamente (si vale true es que tenemos el check activado y si no, es que está desactivado y por parámetro recibiremos un false).

Reto 04 (26 / 05/ 2024)

Enunciado

Crea una función para invertir la gravedad mediante un Toggle.

Solución

Una posible función que resuelve el problema es la siguiente:

public void InvertGravity(bool gravityInverted)
{
    Physics.gravity *= gravityInverted ? -1 : 1;
}

Aquí lo que hacemos es aprovechar el parámetro de tipo bool (ya que esta función va a ser asignada a un Toggle) y con un operador ternario determinar si multiplicamos el vector de la gravedad por -1 o por 1. Si gravityInverted vale true, entonces la condición es cierta y multiplicamos por -1. En caso contrario, gravityInverted valdrá false, la condición no será cumplida y caeremos en el caso de multiplicar por 1, lo que implica dejar el vector de la gravedad tal cual.

Tal y como ocurría en la solución del reto anterior, la función es pública y no tiene output porque va a ser asignada a un Toggle. Además, el único parámetro de la función (no puede tener más), debe ser de tipo bool para que así la componente Toggle pase el valor true o false dinámicamente (si vale true es que tenemos el check activado y si no, es que está desactivado y por parámetro recibiremos un false).

Comparte tus Soluciones con Nosotros

¿Has conseguido resolver todos los retos? ¿Has encontrado una solución diferente a las propuestas? Pues no dudes en compartir esas soluciones con nosotros. Puedes hacerlo comentando este mismo post o respondiendo a cualquier publicación de nuestras redes sociales.

¡Anímate!

Aprende Unity con Frogames Formación

¿Se te ha complicado algún reto? ¿No sabes exactamente cómo enfocar la solución? ¿No acabas de entender alguna línea de código de las soluciones propuestas?

Si quieres ser capaz de resolver todos estos retos, quieres iniciarte en el mundo del desarrollo de videojuegos con Unity o bien quieres mejorar tus habilidades en este mundillo, entonces visita la Ruta de Desarrollo de Videojuegos donde tenemos toda una parte dedicada al desarrollo de videojuegos con Unity.

En cada curso aprenderás a desarrollar nuevas mecánicas y diferentes tipos de videojuegos. Hay un poco de todo: videojuegos 2D, videojuegos 3D, juegos en primera persona, juegos en tercera persona, shooters, RPGs, clásicos retro...

Además, al inscribirte a alguno de nuestros cursos tendrás acceso a la comunidad de videojuegos para hacernos cualquier duda que te surja durante tu aprendizaje y, sobre todo, para compartir con nosotros y el resto de estudiantes tus avances y tus proyectos.

¿Te lo vas a perder? ¡Nos vemos en clase!

« Volver al Blog

Obtener mi regalo ahora