Skip to content

Instantly share code, notes, and snippets.

@YuridiaSCH
Last active February 27, 2024 06:44
Show Gist options
  • Save YuridiaSCH/92ec69390db646ea5002c81c3b2540dc to your computer and use it in GitHub Desktop.
Save YuridiaSCH/92ec69390db646ea5002c81c3b2540dc to your computer and use it in GitHub Desktop.
Anteproyecto

🏠 Aplicación de Realidad Mixta para Diseño de Interiores 🏢

🥽 Introducción.

En la actualidad, las tecnologías inmersivas, como la realidad virtual (VR) y la realidad aumentada (AR), están transformando numerosos sectores, incluido el diseño de interiores. Estas tecnologías permiten a los diseñadores y clientes experimentar ambientes virtuales de manera realista y participativa, lo que puede revolucionar la forma en que se conciben, presentan y ejecutan los proyectos de diseño de interiores. Este anteproyecto se centra en explorar la aplicación de la realidad mixta en el diseño de interiores, combinando elementos virtuales y físicos para mejorar el proceso de diseño y la experiencia del usuario.

✒️ Objetivos.

📌 General.

Desarrollar una aplicación de realidad mixta que permita a los clientes visualizar y experimentar de forma inmersiva diferentes opciones de diseño para su espacio interior.

📍 Específicos.

  1. Investigar y analizar el estado actual de las tecnologías inmersivas, especialmente la realidad mixta, en el ámbito del diseño de interiores.
  2. Explorar las ventajas y desafíos de la aplicación de la realidad mixta en el proceso de diseño de interiores.
  3. Desarrollar un prototipo de aplicación de realidad mixta para el diseño de interiores que demuestre su potencial y funcionalidad.
  4. Evaluar la eficacia y la aceptación de la aplicación de realidad mixta entre los diseñadores de interiores y los clientes.

📑 Justificación.

El diseño de interiores es un campo donde la creatividad y la visualización son fundamentales para el éxito del proyecto. La capacidad de los diseñadores para comunicar eficazmente sus ideas y conceptos a los clientes, así como para comprender y adaptarse a sus necesidades y preferencias, es crucial. En este contexto, las tecnologías inmersivas, como la realidad virtual (VR) y la realidad aumentada (AR), ofrecen un potencial revolucionario para transformar la forma en que se concibe, presenta y ejecuta el diseño de interiores.

  1. 📊 Experiencia inmersiva y participativa: La realidad mixta, que combina elementos virtuales con el entorno físico, permite a los diseñadores y clientes sumergirse en ambientes virtuales realistas y participar de manera activa en el proceso de diseño. Esto no solo facilita una comprensión más profunda de los conceptos y propuestas de diseño, sino que también fomenta una colaboración más estrecha entre diseñadores y clientes, lo que puede conducir a resultados más satisfactorios.

  2. 📷 Visualización realista: Con la realidad mixta, los diseñadores pueden crear modelos tridimensionales de alta fidelidad de los espacios interiores, lo que permite a los clientes experimentar cómo se verá el diseño final en su entorno real. Esto elimina la ambigüedad y las sorpresas desagradables durante la fase de ejecución del proyecto, ya que los clientes pueden tener una comprensión precisa de cómo se verán los materiales, los muebles y la distribución del espacio antes de tomar decisiones finales.

  3. 🧱 Optimización del proceso de diseño: La realidad mixta también ofrece herramientas y funcionalidades avanzadas que pueden agilizar y mejorar el proceso de diseño. Por ejemplo, los diseñadores pueden realizar cambios en tiempo real en el diseño y ver cómo afectan al espacio, lo que permite una iteración rápida y eficiente. Además, la capacidad de visualizar múltiples opciones de diseño y compararlas directamente en el entorno virtual puede ayudar a tomar decisiones informadas y optimizar el diseño final.

  4. ⭐ Diferenciación competitiva: En un mercado cada vez más competitivo, la capacidad de ofrecer experiencias inmersivas y tecnológicamente avanzadas puede ser un diferenciador clave para los estudios de diseño de interiores. La adopción de la realidad mixta no solo puede impresionar a los clientes existentes, sino también atraer a nuevos clientes que buscan un enfoque innovador y moderno en el diseño de sus espacios interiores.

🚨 Alcances y Limitaciones.

🛎️ Alcances.

  1. Realizar una investigación detallada sobre las tecnologías inmersivas, especialmente la realidad mixta, para comprender su funcionamiento, aplicaciones actuales y potencialidades en el diseño de interiores.
  2. Desarrollar un prototipo que se limite al intento de previsualización de los objetos que conformaran el ambiente en el que se encuentre.
  3. Lograr una interfaz funcional con la interacción suficiente para simular el diseño de interiores.
  4. Documentar cada aspecto logrado y dificultades dentro del proyecto.

🚧 Limitaciones.

  1. Al tener un tiempo corto, se delimita en el diseño de interiores ya que se puede enfrentar limitaciones técnicas, como la calidad de los dispositivos de visualización y la capacidad de procesamiento, que podrían afectar la funcionalidad y la experiencia del usuario.
  2. Quizá no se cuente con lo que es el equipamiento necesario como los lentes de RV.
  3. Por la falta de dominio del tema, puede llegar a pasar desapercibido ciertos factores relevantes dentro del proyecto.
  4. El diseño de interiores son variados, por lo que serian limitadas las acciones.

💻 Posibles Lenguajes para llevar acabo el anteproyecto.

  • 📈 C# con Unity.

Unity es un motor de juego ampliamente utilizado en el desarrollo de aplicaciones de realidad mixta debido a su facilidad de uso y soporte para múltiples plataformas, incluidas HoloLens y dispositivos de realidad virtual. En Unity, se pueden escribir scripts en C#, un lenguaje de programación ampliamente utilizado en el desarrollo de juegos y aplicaciones interactivas. Puedes aprovechar las herramientas y funcionalidades integradas de Unity para crear entornos virtuales, importar modelos 3D, implementar lógica de interacción y añadir funcionalidades de realidad mixta. Unity ofrece soporte completo para el desarrollo en HoloLens, lo que facilita la creación de aplicaciones de diseño de interiores inmersivas y funcionales.

  • ⚙️ C++ con Unreal Engine.

Unreal Engine es otro motor de juego popular que se utiliza en el desarrollo de aplicaciones de realidad mixta, especialmente para experiencias más gráficamente intensivas. Unreal Engine utiliza principalmente C++ como lenguaje de programación, aunque también se puede utilizar Blueprints, un sistema visual de programación. Al igual que con Unity, en Unreal Engine se pueden crear entornos virtuales, importar modelos 3D y añadir interactividad a la aplicación. Unreal Engine también ofrece soporte para HoloLens y otras plataformas de realidad mixta, lo que te permite crear experiencias inmersivas para el diseño de interiores con un alto nivel de calidad visual.

💡 Auditoría del Anteproyecto: Aplicación de Realidad Mixta para Diseño de Interiores (Por Gemini). 📝

📒 Introducción.

El anteproyecto presenta una propuesta innovadora para el diseño de interiores, utilizando la realidad mixta para crear experiencias inmersivas y participativas para los clientes. La idea de combinar elementos virtuales con el entorno físico tiene un gran potencial para transformar la forma en que se concibe, presenta y ejecuta el diseño de interiores.

✅ Aspectos Positivos.

  1. 📃 Objetivos claros y específicos: El anteproyecto define de manera clara el objetivo general y los objetivos específicos, lo que facilita la comprensión del proyecto y la evaluación de su éxito.

  2. 🔒 Justificación sólida: Se presenta una justificación convincente que destaca las ventajas de la realidad mixta para el diseño de interiores, como la experiencia inmersiva, la visualización realista, la optimización del proceso de diseño y la diferenciación competitiva.

  3. 🗒️ Alcances y limitaciones bien definidos: Se establecen de forma clara los alcances del proyecto, lo que permite enfocar los esfuerzos y recursos de manera eficiente. También se reconocen las limitaciones y se proponen soluciones para mitigarlas.

  4. 💾 Selección adecuada de lenguajes de programación: Se seleccionan dos lenguajes de programación ampliamente utilizados en el desarrollo de aplicaciones de realidad mixta, C# con Unity y C++ con Unreal Engine. Ambos lenguajes ofrecen las herramientas y funcionalidades necesarias para crear experiencias inmersivas y funcionales.

❎ Aspectos a Mejorar.

  1. 📜 Metodología poco detallada: El anteproyecto no describe en detalle la metodología que se utilizará para desarrollar la aplicación de realidad mixta. Se recomienda incluir información sobre las herramientas y tecnologías específicas que se implementarán, así como el proceso de diseño y desarrollo.

  2. 📋 Falta de análisis de mercado: No se presenta un análisis del mercado actual de la realidad mixta en el sector del diseño de interiores. Es importante realizar un estudio que identifique las necesidades y expectativas de los clientes potenciales, así como la competencia existente.

  3. 📨 Plan de implementación incompleto: El anteproyecto no incluye un plan de implementación que defina las etapas del proyecto, los responsables de cada tarea, el cronograma y el presupuesto. Es fundamental contar con un plan de acción claro para asegurar el éxito del proyecto.

  4. 📉 Evaluación de impacto superficial: La evaluación del impacto de la aplicación se limita a beneficios generales para clientes y profesionales. Se recomienda realizar un análisis más profundo que considere el impacto social, económico y ambiental del proyecto.

🔎 Recomendaciones.

  1. 📘 Desarrollar una metodología detallada: Definir las herramientas, tecnologías y procesos que se utilizarán para desarrollar la aplicación de realidad mixta.

  2. 🔔 Realizar un análisis de mercado: Estudiar las necesidades de los clientes, la competencia y las tendencias del mercado en el sector del diseño de interiores.

  3. 🗞️ Elaborar un plan de implementación: Definir las etapas del proyecto, los responsables de cada tarea, el cronograma y el presupuesto.

  4. 📕 Profundizar en la evaluación del impacto: Considerar el impacto social, económico y ambiental del proyecto.

  5. 🗄️ Incluir un estudio de viabilidad: Evaluar los costos y beneficios de la aplicación, así como su potencial de escalabilidad.

  6. 🗓️ Considerar la accesibilidad: Asegurar que la aplicación sea accesible para diferentes públicos, incluyendo personas con discapacidades.

💭 Conclusión.

El anteproyecto presenta una propuesta innovadora y con un gran potencial para transformar el diseño de interiores. Se han definido de manera clara los objetivos, la justificación, los alcances y las limitaciones del proyecto. Sin embargo, se requiere mayor detalle en la metodología, el análisis de mercado, el plan de implementación y la evaluación del impacto. Implementando las recomendaciones propuestas, el proyecto podrá fortalecer su viabilidad y asegurar un mayor éxito. 💬

📗 Reflexión.

  • ☑️Según lo investigado al respecto, este tema será de importancia empaparme de conocimiento, ya que son nuevas herramientas de hardware y software, por ello, dominarlas lo suficiente como para alcanzar el objetivo general planteado. 💬

  • ☑️Pretendo crear un cronograma para poder sobrellevar las actividades a plantear y no frustrarme con los tiempos, conocer la delimitación de lo que se pretende hacer, a fin de aprovechar el tiempo que resta para completarlo. 💬

  • ☑️Contemplar alguna metodología para poder cumplir con lo que se pretende realizar. 💬

  • ☑️No selo quedarme con información superficial solamente basada en como lograr como tal la aplicación/programa/prototipo, si no también indagar acerca de lo que los usuarios buscan para una mayor satisfacción al usar lo elaborado, y a su vez este cumpla con lo necesario. 💬

🗂️ Imagenes Generadas Representativas.

Firefly Tegnologias inmersas- Aplicación de Realidad Mixta para Diseño de Interiores 60920 (3)

💼 Entrevista para Requerimientos de Proyecto de Realidad Mixta en Diseño de Interiores

👩‍💻 Entrevistador: Buenos días, [Nombre del cliente]. Gracias por aceptar esta entrevista. Me gustaría hablar con usted sobre su interés en un sistema de tecnologías inmersivas (RM) para el diseño de interiores.💭

  • 🗣️ Cliente: Buenos días, [Nombre del entrevistador]. Es un placer estar aquí. Estoy muy interesado en las posibilidades que ofrece la RM para el diseño de interiores y creo que puede ser una herramienta muy valiosa para nuestro negocio.💭

👩‍💻 Entrevistador: Excelente. Para comenzar, ¿podría contarme un poco más sobre su empresa y sus necesidades en cuanto al diseño de interiores?💭

  • 🗣️ Cliente: Somos una empresa de [descripción de la empresa] con [número] años de experiencia en el mercado. Ofrecemos una amplia gama de servicios de diseño de interiores para [tipo de clientes].💭

  • Uno de los principales desafíos que enfrentamos es la dificultad de comunicar a los clientes cómo se verá su espacio una vez finalizado el proyecto. Los planos y las imágenes 2D no siempre son suficientes para que los clientes comprendan el diseño y puedan tomar decisiones informadas.💭

👩‍💻 Entrevistador: Entiendo. ¿Cómo cree que la RM podría ayudar a resolver este problema?💭

  • 🗣️ Cliente: La RM podría permitirnos crear una experiencia inmersiva en la que los clientes puedan ver y caminar por su espacio como si ya estuviera terminado. Esto les ayudaría a visualizar mejor el diseño, comprender la distribución del espacio y tomar decisiones más seguras sobre materiales, colores y decoración.💭

👩‍💻 Entrevistador: Me parece una idea fantástica. ¿Tiene alguna otra necesidad o expectativa en cuanto al proyecto?💭

  • 🗣️ Cliente: Sí, me gustaría que el proyecto se enfocara en las siguientes áreas:💭
  1. 📊 Análisis del sistema: Es importante que el sistema sea capaz de analizar el espacio y proporcionar información relevante al cliente, como las dimensiones del espacio, la ubicación de las ventanas y puertas, etc.

  2. 📋 Requerimientos del software: El software debe ser fácil de usar y no requerir de conocimientos técnicos avanzados. Debe ser compatible con diferentes dispositivos, como tablets y smartphones.

  3. ⚙️ Funcionalidades: El sistema debe permitir al cliente:

  • Visualizar el espacio en 3D y a escala real.🏢
  • Interactuar con el espacio, por ejemplo, abrir puertas, mover muebles y cambiar la iluminación.🏠
  • Personalizar el espacio con diferentes materiales, colores y decoración.🟡🟢🔵🟣🟤
  • Colaborar con el diseñador en tiempo real.📣

👩‍💻 Entrevistador: De acuerdo, estas son excelentes ideas. Tomaremos en cuenta todas sus necesidades y expectativas al desarrollar el proyecto.💭

  • 🗣️ Cliente: Muchas gracias. Estoy seguro de que este proyecto será un éxito y que la RM será una herramienta invaluable para nuestro negocio.💭

👩‍💻 Entrevistador: Estoy de acuerdo. Gracias de nuevo por su tiempo.💭

  • 🗣️ Cliente: De nada. Ha sido un placer hablar contigo.💭

🗄️ Resumen Ejecutivo.

🛠️ Proyecto: Aplicación de Realidad Mixta para Diseño de Interiores.

📎 Objetivo.

Desarrollar una aplicación de Realidad Mixta que permita a los clientes visualizar y modificar el diseño de su espacio en tiempo real.

📝 Funcionalidades.

  1. Visualización del espacio en 3D con diferentes opciones de materiales, colores y decoración.
  2. Interacción con el espacio para modificar el diseño con muebles, colores y abrir/cerrar puertas.
  3. Colaboración en tiempo real entre el cliente y el diseñador.
  4. Facilidad de uso para usuarios sin conocimientos técnicos.
  5. Accesibilidad para usuarios con discapacidades.

💻 Dispositivos.

  1. Tablets.
  2. Smartphones.
  3. Gafas de Realidad Aumentada (opcional).

🧱 Muebles y decoración.

  1. Amplia biblioteca de objetos 3D de alta calidad.
  2. Fácil de usar para agregar, mover y eliminar objetos.

📱 Integración con software de diseño.

  1. API.
  2. Importación/exportación de archivos.
  3. Plugin.

⌚ Capacitación.

  1. Tutoriales en video.
  2. Guías de usuario.
  3. Sesiones de capacitación en línea.

🌟 Beneficios.

  1. Mejora la comunicación entre el cliente y el diseñador.
  2. Reduce el tiempo y el costo del proceso de diseño.
  3. Mejora la experiencia del cliente.

👞 Próximos pasos.

  1. Desarrollar una propuesta técnica y económica.
  2. Presentar la propuesta al cliente.
  3. Iniciar el desarrollo de la aplicación una vez que la propuesta sea aprobada.

⚡ Conclusión.

La aplicación de Realidad Mixta para el diseño de interiores puede ser una herramienta muy valiosa para las empresas de diseño de interiores. La aplicación puede ayudar a mejorar la comunicación entre el cliente y el diseñador, a reducir el tiempo y el costo del proceso de diseño y a mejorar la experiencia del cliente. 💬

📈 Análisis del Sistema para un Proyecto de Realidad Mixta en Diseño de Interiores.

📌 Objetivo.

El objetivo del sistema es proporcionar una experiencia inmersiva de diseño de interiores a los clientes, permitiéndoles visualizar y personalizar su espacio en 3D y a escala real.

✏️ Funcionalidades.

  • 📏 Análisis del espacio: El sistema analizará el espacio a partir de planos o imágenes proporcionadas por el cliente, incluyendo dimensiones, ubicación de ventanas y puertas, y posición de muebles existentes.
  • 👓 Visualización del espacio: Generará una representación 3D del espacio para que el cliente pueda visualizarlo desde diferentes perspectivas y a escala real.
  • 📐 Interacción con el espacio: El cliente podrá interactuar con el espacio 3D, como abrir puertas y ventanas, mover, agregar y eliminar muebles, cambiar la iluminación y los materiales, y aplicar diferentes colores y texturas.
  • 🪓 Personalización del espacio: Permite al cliente personalizar el espacio con diferentes opciones de materiales, colores, decoración y mobiliario, mostrando el impacto de cada cambio en el espacio.
  • 🖍️ Colaboración en tiempo real: Cliente y diseñador pueden trabajar juntos en el diseño en tiempo real, viendo y modificando el espacio 3D simultáneamente.

📍 Requerimientos del software.

  • 🖱️ Facilidad de uso: Intuitivo y fácil de usar para clientes sin conocimientos técnicos.
  • 🔩 Compatibilidad: Compatible con diferentes dispositivos, como tablets y smartphones.
  • 🕋 Realismo: Generar una representación 3D realista del espacio, incluyendo texturas, iluminación y sombras.
  • 🏗️ Interactividad: Permitir una interacción fluida y natural con el espacio 3D.
  • 👥 Colaboración: Permitir la colaboración en tiempo real entre el cliente y el diseñador.

⌨️ Tecnologías.

El sistema podría utilizar una combinación de las siguientes tecnologías:

  1. Realidad Virtual (RV).
  2. Realidad Aumentada (RA).
  3. Modelado 3D.
  4. Inteligencia Artificial (IA).

⏳ Conclusiones.

Un sistema de Realidad Mixta para el diseño de interiores puede ser una herramienta muy valiosa para los clientes y los diseñadores. Ayuda a visualizar el diseño, comprender la distribución del espacio y tomar decisiones más seguras sobre materiales, colores y decoración. Además, facilita la comunicación entre el cliente y el diseñador, ayudando a crear un diseño final que satisfaga las necesidades de ambos.

🔤 Lenguaje de Programación para un Sistema de Realidad Mixta en Diseño de Interiores.

✔️ Consideraciones.

🗂️ Funcionalidades del sistema.

El sistema requiere funcionalidades como análisis del espacio, visualización 3D, interacción con el espacio, personalización y colaboración en tiempo real.

📃 Requerimientos del software.

El software debe ser fácil de usar, compatible con diferentes dispositivos, realista, interactivo y permitir la colaboración.

🥽 Tecnologías.

El sistema podría utilizar RV, RA, modelado 3D e IA.

🆎 Opciones de lenguaje de programación.

  • 🛠️ C++: Es un lenguaje potente y versátil que se utiliza para desarrollar aplicaciones de alto rendimiento. Es compatible con una amplia gama de dispositivos y plataformas.
  • ⛏️ C#: Es un lenguaje de programación moderno y fácil de aprender que se utiliza para desarrollar aplicaciones para Windows, macOS, Linux y dispositivos móviles.
  • 🗝️ Java: Es un lenguaje de programación robusto y escalable que se utiliza para desarrollar aplicaciones web y móviles.
  • ⚒️ Python: Es un lenguaje de programación versátil y fácil de usar que se utiliza para una amplia variedad de aplicaciones, incluyendo IA y desarrollo de juegos.

🗨️ Recomendación.

No existe un único lenguaje de programación que sea perfecto para este proyecto. La elección del lenguaje dependerá de las prioridades del proyecto, las habilidades del equipo de desarrollo y las tecnologías específicas que se utilizarán. Sin embargo, se recomienda considerar C++ o C# como lenguajes principales para el desarrollo del sistema. Estos lenguajes son potentes, versátiles y compatibles con una amplia gama de dispositivos y plataformas. Además, existen bibliotecas y frameworks disponibles para facilitar el desarrollo de aplicaciones de realidad mixta. Para el desarrollo de la interfaz de usuario, se pueden utilizar lenguajes como JavaScript o HTML/CSS. Estos lenguajes son conocidos por su facilidad de uso y por su capacidad para crear interfaces de usuario atractivas e interactivas. En cuanto a la IA, se pueden utilizar lenguajes como Python o R. Estos lenguajes son populares en el campo de la IA y ofrecen una amplia gama de herramientas y bibliotecas para el desarrollo de aplicaciones inteligentes. Es importante destacar que la elección del lenguaje de programación es solo una parte de la decisión. También es importante considerar otros factores como la experiencia del equipo de desarrollo, la disponibilidad de recursos y las herramientas y frameworks disponibles.

👁️‍🗨️ Recomendaciones adicionales.

  1. Se recomienda realizar una investigación más profunda sobre las diferentes opciones de lenguaje de programación antes de tomar una decisión final.
  2. Se puede consultar con expertos en desarrollo de software para obtener asesoramiento sobre la mejor opción para el proyecto.
  3. Es importante tener en cuenta que el proyecto puede requerir el uso de varios lenguajes de programación.

🏹 Conclusión.

La elección del lenguaje de programación para un sistema de realidad mixta en diseño de interiores depende de varios factores. Se recomienda considerar las funcionalidades del sistema, los requerimientos del software, las tecnologías que se utilizarán y las habilidades del equipo de desarrollo. C++ y C# son buenas opciones para el desarrollo del sistema, mientras que JavaScript, HTML/CSS, Python y R pueden ser utilizados para la interfaz de usuario y la IA. Se recomienda realizar una investigación más profunda y consultar con expertos antes de tomar una decisión final. 💬

📥 C# Unity3D.

📙 Patrones.

  • 📷 Singleton.

Se utiliza para garantizar que solo exista una instancia de una clase en particular. Esto es útil para clases que controlan recursos del sistema, como la entrada del usuario o la cámara.

public class InputManager : Singleton<InputManager>
{
    // ...
}

🔗 Imagen Diagrama de Clase Patron Singleton en Mermaid! :D

  • 👓 Observer.

Se utiliza para notificar a los objetos cuando cambia el estado de otro objeto. Esto es útil para actualizar la interfaz de usuario en respuesta a las acciones del usuario.

public class Observable : MonoBehaviour
{
    public event Action OnChange;

    protected void NotifyChange()
    {
        OnChange?.Invoke();
    }
}

public class Observer : MonoBehaviour
{
    private Observable observable;

    private void Start()
    {
        observable = GetComponent<Observable>();
        observable.OnChange += OnChange;
    }

    private void OnChange()
    {
        // ...
    }
}

🔗 Imagen Diagrama de Clase Patron Observer en Mermaid! :D

  • 🔌 Factory.

Se utiliza para crear objetos de forma flexible y sin necesidad de conocer la implementación concreta. Esto es útil para crear objetos que dependen de la plataforma o del dispositivo.

public abstract class FurnitureFactory
{
    public abstract Furniture Create(string type);
}

public class ChairFactory : FurnitureFactory
{
    public override Furniture Create(string type)
    {
        return new Chair(type);
    }
}

public class TableFactory : FurnitureFactory
{
    public override Furniture Create(string type)
    {
        return new Table(type);
    }
}

🔗 Imagen Diagrama de Clase Patron Factory en Mermaid! :D

  • 🧮 Command.

Se utiliza para encapsular una acción y sus parámetros. Esto es útil para deshacer y rehacer acciones, así como para ejecutar acciones en diferido.

public interface ICommand
{
    void Execute();
    void Undo();
}

public class MoveCommand : ICommand
{
    private Furniture furniture;
    private Vector3 position;

    public MoveCommand(Furniture furniture, Vector3 position)
    {
        this.furniture = furniture;
        this.position = position;
    }

    public void Execute()
    {
        furniture.transform.position = position;
    }

    public void Undo()
    {
        furniture.transform.position = furniture.StartPosition;
    }
}

🔗 Imagen Diagrama de Clase Patron Command en Mermaid! :D

📒 Clases:

  • 🛏️ Furniture: Representa un mueble individual en la escena.
public class Furniture : MonoBehaviour
{
    public string Type;
    public Vector3 StartPosition;

    // ...
}

🔗 Imagen Diagrama de Clase Furniture en Mermaid! :D

  • 🏠 Room: Representa una habitación en la escena.
public class Room : MonoBehaviour
{
    public List<Furniture> FurnitureList;

    // ...
}

🔗 Imagen Diagrama de Clase Room en Mermaid! :D

  • 🧑‍🔧 InputHandler: Se encarga de manejar la entrada del usuario y traducirla en acciones en la escena.
public class InputHandler : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                Furniture furniture = hit.collider.gameObject.GetComponent<Furniture>();

                if (furniture != null)
                {
                    // Seleccionar el mueble
                }
            }
        }
    }
}

🔗 Imagen Diagrama de Clase InputHandler en Mermaid! :D

  • 👩‍💻 UIManager: Se encarga de actualizar la interfaz de usuario en respuesta a las acciones del usuario.
public class UIManager : MonoBehaviour
{
    public void OnFurnitureSelected(Furniture furniture)
    {
        // Mostrar la información del mueble
    }
}

🔗 Imagen Diagrama de Clase UIManager en Mermaid! :D

⌨️ Ejemplos de código.

  • 🗄️ Creación de un mueble:
FurnitureFactory factory = new ChairFactory();
Furniture chair = factory.Create("Oficina");

🔗 Imagen Diagrama de Clase Creacion Mueble en Mermaid! :D

  • 🔜 Mover un mueble.
MoveCommand command = new MoveCommand(chair, new Vector3(1, 2, 3));
command.Execute();

🔗 Imagen Diagrama de Clase Mover Mueble en Mermaid! :D

  • 🔙 Deshacer el movimiento de un mueble.
command.Undo();

🔗 Imagen Diagrama de Clase Deshacer Movimiento Mueble en Mermaid! :D

📦 C++ Unreal Engine.

📃 Patrones.

  1. 📂 Singleton. Para crear instancias únicas de clases como el administrador de la escena o el sistema de entrada.
  2. 🗓️ Factory. Para crear objetos dinámicamente en función del tipo de objeto que se necesita.
  3. 🪓 Observer. Para notificar a los objetos cuando se produce un cambio en el estado de la aplicación.
  4. 🔛 Command. Para encapsular acciones y permitir su deshacer y rehacer.
  5. 📊 Memento. Para guardar y restaurar el estado de un objeto.

📚 Clases:

  • 👤 Actor: La clase base para todos los objetos que se pueden colocar en la escena.
  • 🛏️ Mueble: Una clase que representa un mueble individual.
  • 🟫 Pared: Una clase que representa una pared en la escena.
  • 🟦 Ventana: Una clase que representa una ventana en la escena.
  • 🚪 Puerta: Una clase que representa una puerta en la escena.
  • 🧲 Controlador de diseño: Una clase que permite al usuario interactuar con los objetos de la escena y modificar el diseño.
  • 📬 Sistema de entrada: Una clase que maneja la entrada del usuario, como el movimiento del cursor y los clics del mouse.
  • ⚙️ Administrador de la escena: Una clase que administra todos los objetos de la escena.

🖱️ Ejemplos de código:

  • 👩‍💼 Patrón Singleton.

class SceneManager
{
public:
  static SceneManager& GetInstance()
  {
    static SceneManager instance;
    return instance;
  }

private:
  SceneManager() {}
  ~SceneManager() {}

  // ...
};

🔗 Imagen Diagrama de Clase Patron Singleton en Mermaid! :D

  • 👷‍♀️ Patrón Factory.

class ObjectFactory
{
public:
  virtual ~ObjectFactory() {}

  virtual Actor* CreateObject(const std::string& type) = 0;

protected:
  // ...
};

class FurnitureFactory : public ObjectFactory
{
public:
  Actor* CreateObject(const std::string& type) override
  {
    if (type == "Chair") {
      return new Chair();
    } else if (type == "Table") {
      return new Table();
    } else {
      return nullptr;
    }
  }
};

🔗 Imagen Diagrama de Clase Patron Factory en Mermaid! :D

  • 🥽 Patrón Observer.

class Observer
{
public:
  virtual void OnNotify(const Event& event) = 0;

protected:
  // ...
};

class Subject
{
public:
  void AddObserver(Observer* observer) { observers_.push_back(observer); }
  void RemoveObserver(Observer* observer) { observers_.erase(std::remove(observers_.begin(), observers_.end(), observer)); }
  void NotifyObservers(const Event& event)
  {
    for (Observer* observer : observers_) {
      observer->OnNotify(event);
    }
  }

protected:
  std::vector<Observer*> observers_;
};

class SceneObserver : public Observer
{
public:
  void OnNotify(const Event& event) override
  {
    // ...
  }
};

🔗 Imagen Diagrama de Clase Patron Observer en Mermaid! :D

  • ♨️ Patrón Command.

class Command
{
public:
  virtual void Execute() = 0;
  virtual void Undo() = 0;

protected:
  // ...
};

class MoveCommand : public Command
{
public:
  MoveCommand(Actor* actor, const FVector& newPosition) : actor_(actor), newPosition_(newPosition) {}

  void Execute() override { actor_->SetActorLocation(newPosition_); }
  void Undo() override { actor_->SetActorLocation(oldPosition_); }

private:
  Actor* actor_;
  FVector newPosition_;
  FVector oldPosition_;
};

🔗 Imagen Diagrama de Clase Patron Command en Mermaid! :D

  • ⚡ Patrón Memento.

class Memento
{
public:
  virtual ~Memento() {}

  virtual void Restore() = 0;

protected:
  // ...
};

class ObjectMemento : public Memento
{
public:
  ObjectMemento(Actor* actor)
  {
    position_ = actor->GetActorLocation();
    rotation_ = actor->GetActorRotation();
    scale_ = actor->GetActorScale3D();
  }

  void Restore() override
  {
    actor_->SetActorLocation(position_);
    actor_->SetActorRotation(rotation_);
    actor_->SetActorScale3D(scale_);
  }

private:
  Actor* actor_;
  FVector position_;
  FRotator rotation_;
  FVector scale_;
};

🔗 Imagen Diagrama de Clase Patron Memento en Mermaid! :D

📝 Ejemplo de código de las clases propuestas.

  • 🚻 Clase Actor:

class Actor
{
public:
  Actor() {}
  virtual ~Actor() {}

  virtual void BeginPlay() {}
  virtual void Tick(float DeltaTime) {}

  void SetActorLocation(const FVector& NewLocation) { Location_ = NewLocation; }
  FVector GetActorLocation() const { return Location_; }

  void SetActorRotation(const FRotator& NewRotation) { Rotation_ = NewRotation; }
  FRotator GetActorRotation() const { return Rotation_; }

  void SetActorScale3D(const FVector& NewScale) { Scale_ = NewScale; }
  FVector GetActorScale3D() const { return Scale_; }

protected:
  FVector Location_;
  FRotator Rotation_;
  FVector Scale_;
};

🔗 Imagen Diagrama de Clase Actor en Mermaid! :D

  • 🛁 Clase Mueble.

class Furniture : public Actor
{
public:
  Furniture() {}
  virtual ~Furniture() {}

  virtual void Interact(class Controller* Controller) = 0;
};

🔗 Imagen Diagrama de Clase Mueble en Mermaid! :D

  • 🟩 Clase Pared.

class Wall : public Actor
{
public:
  Wall() {}
  virtual ~Wall() {}
};

🔗 Imagen Diagrama de Clase Pared en Mermaid! :D

  • 🟦 Clase Ventana.

class Window : public Actor
{
public:
  Window() {}
  virtual ~Window() {}
};

🔗 Imagen Diagrama de Clase Ventana en Mermaid! :D

  • 🚪 Clase Puerta.

class Door : public Actor
{
public:
  Door() {}
  virtual ~Door() {}
};

🔗 Imagen Diagrama de Clase Puerta en Mermaid! :D

  • 📩 Clase Controlador de Diseño.

class Controller
{
public:
  Controller() {}
  virtual ~Controller() {}

  virtual void BeginPlay() {}
  virtual void Tick(float DeltaTime) {}

  virtual void Interact(class Furniture* Furniture) = 0;
};

🔗 Imagen Diagrama de Clase Controlador de Diseño en Mermaid! :D

  • 📨 Clase Sistema de Entrada.

class InputSystem
{
public:
  InputSystem() {}
  virtual ~InputSystem() {}

  virtual void BeginPlay() {}
  virtual void Tick(float DeltaTime) {}

  bool IsMouseButtonDown(int32 ButtonIndex) const { return MouseButtonsDown_[ButtonIndex]; }
  FVector GetCursorPosition() const { return CursorPosition_; }

private:
  bool MouseButtonsDown_[5];
  FVector CursorPosition_;
};

🔗 Imagen Diagrama de Clase Sistema de Entrada en Mermaid! :D

  • 🛋️ Clase Administrador de la Escena.

class SceneManager
{
public:
  SceneManager() {}
  virtual ~SceneManager() {}

  void AddActor(Actor* Actor) { Actors_.push_back(Actor); }
  void RemoveActor(Actor* Actor) { Actors_.erase(std::remove(Actors_.begin(), Actors_.end(), Actor)); }

  void Tick(float DeltaTime)
  {
    for (Actor* Actor : Actors_) {
      Actor->Tick(DeltaTime);
    }
  }

private:
  std::vector<Actor*> Actors_;
};

🔗 Imagen Diagrama de Clase Administrador de la Escena en Mermaid! :D

👩‍💻 Datos del Alumno.

  • ⚡ Nombre: Cortes Hernandez Yuridia Saray
  • #️⃣ Numero de Control: 20210554
  • 💻 Carrera: Ing. En Sistemas Computacionales
  • 📚 Materia: Patrones de Diseño de Software
  • 📄 Semestre: 9no
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment