Durante este curso, crearás una aplicación profesional de Realidad Aumentada llamada AR Furniture. Esta aplicación permite al usuario posicionar objetos en su entorno seleccionándolos desde un inventario. Una vez colocados, los objetos pueden ser seleccionados, movidos y rotados. Además, es posible tomar una foto del entorno con los objetos en AR y compartirla en redes sociales.
Demo.mp4
- 🐼 Discord
- 🐦 Twitter / X
Este curso ha sido desarrollado con Unity 2020.3.19f1 LTS, pero es compatible con:
- Unity 2020.3.x
- Unity 2021.3.x
- Unity 2022.3.x
Es importante que la versión de Unity que vayan a usar tenga los módulos de Android instalados. ¿Cómo saber si tienes los módulos de Android?
- Abre Unity Hub.
- Ve a Installs.
- Haz clic en el ícono ⚙️ de la versión.
- Selecciona Add Modules.
- Debes tener instalados:
- OpenJDK
- Android SDK & NDK Tools
- Si no los tienen instalados, simplemente selecciónalos e instalan.
![Hub](https://private-user-images.githubusercontent.com/93439826/358188753-b051eb56-22d3-4b8a-b5d5-a920e8833d34.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDE4ODIsIm5iZiI6MTczOTYwMTU4MiwicGF0aCI6Ii85MzQzOTgyNi8zNTgxODg3NTMtYjA1MWViNTYtMjJkMy00YjhhLWI1ZDUtYTkyMGU4ODMzZDM0LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2Mzk0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNmYjViNWI2MjY3ZDY2YmNhYmJiZTY1MDNmODk4ZmE5YjJjNjU5NjFlZTI3NTFjMGM3NzhlZjFjYmY1ZDljNDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wAReRTWTB7IpTSt9MLSc1x4VlvuitGX9JF69HWSCKKA)
Para este curso, el desarrollo del código se realiza con Visual Studio. Aunque no es obligatorio, se recomienda usarlo para seguir los videos de manera más efectiva. Puedes utilizar:
- Visual Studio Community 2019
- Visual Studio Community 2022
Visual Studio debe estar correctamente instalado y configurado, y debe estar enlazado con Unity. Para hacerlo:
- Abre el instalador de Visual Studio.
- Selecciona la versión de Visual Studio y haz clic en Modify.
- Añade Game Development with Unity.
- En el proyecto de Unity en el que vayas a trabajar, ve a Edit → Preferences → External Tools → External Script Editor y selecciona la versión de Visual Studio que vas a usar.
¡Ahora sí, estás listo para comenzar el curso! A continuación, encontrarás los capítulos y algunas consideraciones importantes a tener en cuenta.
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
- Deshabilitar Auto Graphics API (si no aparece la opción de eliminar Vulkan).
- Eliminar Vulkan.
- Minimum API Level → Android 8.0 'Oreo' (API Level 26).
- Scripting Backend → IL2CPP.
- API Compatibility Level → .NET 4.X o .NET Framework.
- Target Architecture → ARMv7 y ARM64 (si presenta errores, desactivar ARMv7).
La versión de AR Foundation y ARCore que aparecerá en el Package Manager dependerá de la versión de Unity que estén usando. Elijan la que aparezca.
Editor Version | AR Foundation Version |
---|---|
2022.3+ | 5.1 |
2021.3+ | 5.1 |
2020.3+ | 4.2 |
Notas:
1. ARCore XR Plugin es el mismo que Google ARCore XR Plugin.
2. En versiones recientes de Unity, ya no aparece el ícono en el script GameManager.
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
En versiones más recientes de Unity, existen dos tipos de elementos de la UI:
TextMeshPro Legacy Para las versiones recientes, este video emplea los elementos Legacy. Se pueden usar ambos tipos, pero si se usa TextMeshPro, se debe hacer un pequeño cambio más adelante en el código.
![Hub](https://private-user-images.githubusercontent.com/93439826/357481504-6d299d1a-ad54-4206-96ba-7b7a99ed4660.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDE4ODIsIm5iZiI6MTczOTYwMTU4MiwicGF0aCI6Ii85MzQzOTgyNi8zNTc0ODE1MDQtNmQyOTlkMWEtYWQ1NC00MjA2LTk2YmEtN2I3YTk5ZWQ0NjYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2Mzk0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI0NWU2NGU4OGI1ODBjN2JmYzI2MDZlMjM5NTk3MzNmMWZjMWVlMTA0YWYzNGYzYzMyNTVhNWM0YmI0YTAzOWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1NBDk5duo5dpiRRq_WYDobuuxGgm4zlNVF_r57yYYc8)
Nota: Si usan la misma versión del video, seleccionen la misma tal cual.
Para mejorar el scroll, seleccionen Scroll View → En Scroll Rect → Desactivar Vertical.
![Hub](https://private-user-images.githubusercontent.com/93439826/357484628-84f3066c-830b-4a56-87e5-38de5f4691ab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDE4ODIsIm5iZiI6MTczOTYwMTU4MiwicGF0aCI6Ii85MzQzOTgyNi8zNTc0ODQ2MjgtODRmMzA2NmMtODMwYi00YTU2LTg3ZTUtMzhkZTVmNDY5MWFiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2Mzk0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYxOTUwOTQyY2RhZmFhNGU3M2NhZWQwY2ZkM2M4MGM0MmYwY2Q1OWY2NzgwYWFjOGMzM2JmMjA2MmM0YzkyZTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.oLAsAE5XABQUgyhLMIRLN-FnMDcYjQpFc-IL9KN8j5U)
Link DOTween (HOTween v2) en Unity Asset Store
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
En las versiones recientes de ARFoundation se han cambiado algunos nombres:
- AR Session Origin → XR Origin
El video usa AR Session Origin, si no esta se debe usar XR Origin en su lugar, verificar que este GameObject se encuentre en la posicion (0,0,0)
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
- Verificar la escala del modelo; puede que tu modelo esté muy grande o muy pequeño. Para ello, usa el cubo de Unity como referencia; ese cubo tiene 1x1x1 metro.
- Asegurarse de que el modelo esté en la posición (0, 0, 0).
- Posicionar el pivote en el centro del modelo 3D.
- Pivote
- Modelo 3D
Respetar esta jerarquía: crea un empty object (pivote) y haz que el modelo 3D sea hijo de este GameObject. Luego, recuerda que es el modelo 3D el que debes mover para que quede posicionado correctamente respecto al pivote.
![Hub](https://private-user-images.githubusercontent.com/93439826/357554654-3b4089f8-8d09-451f-988c-70b402edf402.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDE4ODIsIm5iZiI6MTczOTYwMTU4MiwicGF0aCI6Ii85MzQzOTgyNi8zNTc1NTQ2NTQtM2I0MDg5ZjgtOGQwOS00NTFmLTk4OGMtNzBiNDAyZWRmNDAyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2Mzk0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYzYTk5NGIxMWNmZjk0ZGM0NjUwM2NiNDljMmUyYjZmZmVhNjczOWEwZmI0ODc5NGNiNzgxMzI4YjUzZTMzNGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.CrLZx1jJitKkh8cRuMN7-ICaHirSWb1Lw3erOzYTqs8)
Al definir el prefab del botón, es obligatorio seguir este orden de jerarquía:
- ButtonItemPrefab
- ItemName
- ItemImage
- ItemDescription
![Hub](https://private-user-images.githubusercontent.com/93439826/357558978-e7d4a52e-f122-49c8-a4e8-d5d8bcb1d771.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MDE4ODIsIm5iZiI6MTczOTYwMTU4MiwicGF0aCI6Ii85MzQzOTgyNi8zNTc1NTg5NzgtZTdkNGE1MmUtZjEyMi00OWM4LWE0ZTgtZDVkOGJjYjFkNzcxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA2Mzk0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThiYWZkYjE2MzA0OWFkMzVjMDliNjE4OWNkNjRjYjlkYmRhYzc3YjUzMjc1ODc5ZmFiNWExMDVkNTZlNzVmNmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vhg6vpmrG5otq5XEKaFmMrZba2Zt7eQp7Xi34RqRSjI)
¡Importante! En el capítulo 2 sobre la UI, mencioné que existen dos tipos de UI: TextMeshPro y Legacy. Dependiendo de cuál hayan elegido, el código cambiará.
-
Legacy o la misma del video:
El código funciona tal cual y no necesita cambios.
-
TextMeshPro:
Añadir el namespace:
using TMPro;
Cambiar esta parte de la función
Start
para que quede así:void Start() { transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = itemName; transform.GetChild(1).GetComponent<RawImage>().texture = itemImage.texture; transform.GetChild(2).GetComponent<TextMeshProUGUI>().text = itemDescription; var button = GetComponent<Button>(); button.onClick.AddListener(GameManager.Instance.ARPosition); button.onClick.AddListener(Create3DModel); }
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |
⬇️⬇️⬇️ Click en la imagen para ver el video 👇👇👇
![]() |