No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Unity: Scripting

Curso de Introducción a Unity: Scripting

Ruth Margarita García López

Ruth Margarita García López

Manipulando al componente Transform

8/24
Recursos

¿Cómo manipular transformaciones en videojuegos?

La manipulación de las propiedades de un componente transform en los videojuegos es esencial para posicionar, rotar y cambiar el tamaño de los objetos dentro del entorno virtual. Esta clase te guiará en el proceso de manipular estas transformaciones, aprovechando tus conocimientos previos sobre vectores.

¿Qué son los vectores y cómo se utilizan?

Los vectores son entidades matemáticas que nos ayudan a manejar posiciones, rotaciones y escalas dentro de un entorno 3D. No necesitas recordar cómo realizar las operaciones matemáticas manualmente; la programación nos facilita estas tareas. La clave está en interpretar correctamente el uso de los vectores. Por ejemplo:

  • Suma de vectores: indícase mover un objeto en una dirección determinada.
  • Resta de vectores: puede ayudar a calcular distancias o diferencias de posición.
  • Multiplicación por un escalar: cambia el tamaño del vector, útil para escalados.

¿Qué diferencia hay entre espacio local y global?

  • Espacio global: se refiere al mundo del videojuego. Las direcciones son absolutas; por ejemplo, el norte siempre será el norte, sin importar la orientación del objeto.
  • Espacio local: es relativo al objeto. La dirección "arriba" o "frente" puede variar según la orientación del objeto. Comprender esta diferencia es crucial para manipular correctamente los vectores direccionales, que pueden ser tanto globales como locales.

¿Cómo acceder y modificar el Transform de un objeto en Unity?

Para modificar el Transform, sigue estos pasos:

  1. Crear un script básico: Crea un script en C# llamado Movimiento.

  2. Acceder al componente Transform: Usa la propiedad transform con minúscula para acceder al objeto Transform de Unity, como se muestra aquí:

    Vector3 nuevaPosicion = new Vector3(4, 0, 0);
    transform.position = nuevaPosicion;
    
  3. Modificar la posición: Puesto que transform.position es solo de lectura, para modificarlo debemos primero guardar su valor, alterarlo y reasignarlo:

    Vector3 posicionActual = transform.position;
    posicionActual.x = 4;  // Cambiar la posición x
    transform.position = posicionActual;
    
  4. Crear una clase Utils: Para optimizar tu código, puedes crear una clase de utilidades:

    public static class Utils {
        public static Vector3 SetX(Vector3 vector, float nuevoX) {
            vector.x = nuevoX;
            return vector;
        }
    }
    

    Ahora puedes usarla en tu script Movimiento:

    transform.position = Utils.SetX(transform.position, 4);
    

¿Qué precauciones debo tomar al modificar propiedades del Transform?

Es vital recordar que algunas propiedades, como position, son de solo lectura directa. Sin embargo, puedes modificarlas indirectamente como se muestra con los vectores. Además, establecer las coordenadas adecuadamente es crucial para evitar valores incorrectos o comportamientos inesperados.

Adentrándonos en estos conceptos y prácticas, continuarás perfeccionando tus habilidades para crear entornos de juego dinámicos y atractivos. ¡Sigue practicando!

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Sería genial ver como tienes configurada tu editor de código para trabajar con Unity, yo uso VS pero se ven muy prácticos los atajos que tienes.

## Clase #08: Manipulando al componente Transform ### Espacio > El espacio global es el mundo, sus coordenadas son absolutas dentro de Unity. Un espacio local por el contrario, es relativo al espacio global y es propio de cada objeto de la escena. ### Vectores direccionales > Son vectores unitarios. Hay dos formas de interpretarlos, pueden ser globales: p.ejm: Vector3.front, que son respecto al mundo o pueden ser vectores direccionales locales y se encuentran en la instancia de la clase transform de cada GameObject. Las propiedades en C# siempre empiezan con minúscula. ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class Utils { public static Vector3 SetX (Vector3 v, float x) // SetX es el nombre del método estático { v.x = x; return v; } } ```Hacemos un script con una utilidad para usarla en el script de movimiento. Este script no hereda de MonoBehaviour y no es Serializable. ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movimiento : MonoBehaviour { // Start is called before the first frame update void Start() { // Por herencia no es necesario colocar this.transform... // Se crea una clase Utils para evitar reescribir todo el tiempo las 3 líneas de abajo /* Vector3 v = transform.position; v.x = 4; transform.position = v; */ // Para que se modifique transform debemos reasignarlo ya que es de solo lectura transform.position = Utils.SetX(transform.position, 4); } } ```Script de movimiento: para poner el cubo en determinada posición del mundo.
# Clase # 8 - **Manipulando al componente Transform** # Modificación del Componente Transform ## **Cómo no modificar el Transform** No podemos modificar directamente los componentes de **position** de esta manera: csharp Copiar código transform.position.x = 4; Esto genera errores porque `position.x` es una propiedad de solo lectura. ## **Forma Correcta de Modificar Transform** Debemos asignar los valores de forma correcta creando un nuevo **Vector3**: csharp Copiar código Vector3 a = transform.position; a.x = 4; transform.position = a; # **Vectores Direccionales** * Un **vector direccional** es un **vector unitario**. * Los vectores direccionales del componente **Transform** son **locales**, lo que significa que dependen de la orientación del objeto, no de un sistema global. # **Optimización del Código** Para ahorrar líneas de código, podemos crear un script con **métodos estáticos** que simplifiquen las operaciones con el componente **Transform**. ## Características: * No hereda de **MonoBehaviour**. * No es **serializable**. ### **Ejemplo**: csharp Copiar código public static class TransformUtils { public static void SetXPosition(Transform t, float x) { Vector3 pos = t.position; pos.x = x; t.position = pos; } } Este tipo de utilidad nos ayuda a evitar escribir el mismo código repetidamente.