{"id":1021,"date":"2026-03-12T09:00:22","date_gmt":"2026-03-12T09:00:22","guid":{"rendered":"https:\/\/salvador.mata.com.mx\/blog\/?p=1021"},"modified":"2026-03-19T22:50:18","modified_gmt":"2026-03-19T22:50:18","slug":"descargar-escenas-externas-en-range-upbge-y-guardarlas-en-appdata","status":"publish","type":"post","link":"https:\/\/salvador.mata.com.mx\/blog\/2026\/03\/12\/descargar-escenas-externas-en-range-upbge-y-guardarlas-en-appdata\/","title":{"rendered":"\ud83d\udce5 C\u00f3mo descargar escenas externas en Range y guardarlas en AppData"},"content":{"rendered":"<h2 style=\"text-align: left;\" data-section-id=\"1uaekfm\" data-start=\"5\" data-end=\"33\"><span style=\"color: #339966;\">\ud83c\udfaf Objetivo del tutorial<\/span><\/h2>\n<p data-start=\"35\" data-end=\"215\">El objetivo de este tutorial es ense\u00f1arte c\u00f3mo descargar y gestionar escenas externas en <span style=\"color: #339966;\"><strong>Range<\/strong><\/span>, almacen\u00e1ndolas correctamente en <span style=\"color: #339966;\"><strong>AppData<\/strong> <\/span>para su uso dentro de tus proyectos.<\/p>\n<p data-start=\"217\" data-end=\"598\">A lo largo del proceso, aprender\u00e1s a integrar recursos externos de forma organizada, optimizando la reutilizaci\u00f3n de contenido y mejorando el flujo de trabajo en el desarrollo de tus juegos o aplicaciones interactivas. Adem\u00e1s, comprender\u00e1s la importancia de manejar correctamente las rutas y la persistencia de archivos, evitando errores comunes al trabajar con contenido din\u00e1mico.<\/p>\n<p data-start=\"600\" data-end=\"735\" data-is-last-node=\"\" data-is-only-node=\"\">Al finalizar, tendr\u00e1s la capacidad de implementar sistemas m\u00e1s flexibles y escalables que aprovechen recursos externos dentro de Range.<\/p>\n<hr \/>\n<h2 data-section-id=\"1uaekfm\" data-start=\"5\" data-end=\"33\">\ud83c\udfafIntroducci\u00f3n<\/h2>\n<p data-start=\"231\" data-end=\"414\">Cuando desarrollamos un juego en <strong data-start=\"264\" data-end=\"273\">Range o UPBGE<\/strong>, especialmente proyectos con <strong data-start=\"303\" data-end=\"340\">muchas escenas o contenido pesado<\/strong>, puede ser una buena idea separar esos archivos del ejecutable principal.<\/p>\n<p data-start=\"416\" data-end=\"524\">Esto permite crear juegos m\u00e1s <strong data-start=\"446\" data-end=\"459\">modulares<\/strong>, donde algunos recursos se descargan solo cuando son necesarios.<\/p>\n<p data-start=\"526\" data-end=\"551\">Con este enfoque podemos:<\/p>\n<ul data-start=\"553\" data-end=\"763\">\n<li data-section-id=\"1004onm\" data-start=\"553\" data-end=\"588\">\n<p data-start=\"555\" data-end=\"588\"><span style=\"color: #339966;\">Mantener el ejecutable ligero \u26a1<\/span><\/p>\n<\/li>\n<li data-section-id=\"1t1mg3l\" data-start=\"589\" data-end=\"643\">\n<p data-start=\"591\" data-end=\"643\"><span style=\"color: #339966;\">Descargar contenido cuando el juego lo necesite \ud83c\udf10<\/span><\/p>\n<\/li>\n<li data-section-id=\"v69v1a\" data-start=\"644\" data-end=\"698\">\n<p data-start=\"646\" data-end=\"698\"><span style=\"color: #339966;\">Actualizar niveles sin recompilar todo el juego \ud83d\udd04<\/span><\/p>\n<\/li>\n<li data-section-id=\"1qzkqzm\" data-start=\"699\" data-end=\"763\">\n<p data-start=\"701\" data-end=\"763\"><span style=\"color: #339966;\">Guardar datos del juego en una carpeta propia del sistema \ud83d\udcbe<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"765\" data-end=\"795\">En este tutorial veremos c\u00f3mo:<\/p>\n<p data-start=\"797\" data-end=\"981\">1\ufe0f\u20e3 Crear una carpeta del juego dentro de <strong data-start=\"839\" data-end=\"850\">AppData<\/strong><br data-start=\"850\" data-end=\"853\" \/>2\ufe0f\u20e3 Descargar archivos <code data-start=\"876\" data-end=\"884\">.range<\/code> desde internet<br data-start=\"899\" data-end=\"902\" \/>3\ufe0f\u20e3 Guardarlos localmente<br data-start=\"927\" data-end=\"930\" \/>4\ufe0f\u20e3 Cargar escenas din\u00e1micamente dentro del juego<\/p>\n<hr data-start=\"983\" data-end=\"986\" \/>\n<h1 data-section-id=\"1m0bhce\" data-start=\"988\" data-end=\"1034\">\ud83d\udcc2 1. Crear una carpeta del juego en AppData<\/h1>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1022\" src=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post002-e1773247270397.jpg\" alt=\"\" width=\"639\" height=\"330\" \/><\/p>\n<p data-start=\"1036\" data-end=\"1126\">En Windows, <strong data-start=\"1048\" data-end=\"1059\">AppData<\/strong> es la ubicaci\u00f3n est\u00e1ndar donde las aplicaciones guardan sus datos.<\/p>\n<p data-start=\"1128\" data-end=\"1194\">Podemos obtener esa ruta desde Python usando variables de entorno.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span style=\"color: #339966;\"><span class=\"\u037cn\">import<\/span> <span class=\"\u037ct\">os<\/span><\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037cn\">import<\/span> <span class=\"\u037ct\">pathlib <\/span><\/span><\/div>\n<div class=\"cm-content q9tKkq_readonly\"><span class=\"\u037cl\" style=\"color: #99cc00;\">#Crear ruta a la carpeta del juego dentro de AppData<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">pathGameData<\/span> <span class=\"\u037cn\">=<\/span> <span class=\"\u037ct\">pathlib<\/span><span class=\"\u037cn\">.<\/span>Path(<span class=\"\u037ct\">os<\/span><span class=\"\u037cn\">.<\/span>environ[<span class=\"\u037cr\">&#8220;APPDATA&#8221;<\/span>] <span class=\"\u037cn\">+<\/span> <span class=\"\u037cr\">&#8220;\/My Game Folder&#8221;<\/span>) <\/span><span class=\"\u037cl\" style=\"color: #99cc00;\">#Crear carpeta si no existe<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037cn\">if<\/span> <span class=\"\u037cn\">not<\/span> <span class=\"\u037ct\">pathGameData<\/span><span class=\"\u037cn\">.<\/span>exists():<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 pathGameData<\/span><span class=\"\u037cn\">.<\/span>mkdir()<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1447\" data-end=\"1481\">Esto crear\u00e1 una carpeta como esta:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><\/div>\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span style=\"color: #99cc00;\">C:\\Users\\Usuario\\AppData\\Roaming\\My Game Folder<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1540\" data-end=\"1562\">Aqu\u00ed podremos guardar:<\/p>\n<ul data-start=\"1564\" data-end=\"1657\">\n<li data-section-id=\"1iu294m\" data-start=\"1564\" data-end=\"1585\">\n<p data-start=\"1566\" data-end=\"1585\"><span style=\"color: #339966;\">escenas descargadas<\/span><\/p>\n<\/li>\n<li data-section-id=\"1vm8l5\" data-start=\"1586\" data-end=\"1603\">\n<p data-start=\"1588\" data-end=\"1603\"><span style=\"color: #339966;\">configuraciones<\/span><\/p>\n<\/li>\n<li data-section-id=\"1p96yhe\" data-start=\"1604\" data-end=\"1624\">\n<p data-start=\"1606\" data-end=\"1624\"><span style=\"color: #339966;\">partidas guardadas<\/span><\/p>\n<\/li>\n<li data-section-id=\"1o9uhav\" data-start=\"1625\" data-end=\"1657\">\n<p data-start=\"1627\" data-end=\"1657\"><span style=\"color: #339966;\">recursos adicionales del juego<\/span><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"1659\" data-end=\"1662\" \/>\n<h1 data-section-id=\"5wao6z\" data-start=\"1664\" data-end=\"1707\">\ud83c\udf10 2. Descargar un archivo desde internet<\/h1>\n<p data-start=\"1709\" data-end=\"1775\">Python incluye herramientas para descargar archivos desde una URL.<\/p>\n<p data-start=\"1777\" data-end=\"1836\">Podemos usar <strong data-start=\"1790\" data-end=\"1800\">urllib<\/strong> para descargar un archivo <code data-start=\"1827\" data-end=\"1835\">.range<\/code>.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\">\n<p><span style=\"color: #339966;\"><span class=\"\u037cn\">from<\/span> <span class=\"\u037ct\">urllib<\/span><span class=\"\u037cn\">.<\/span><span class=\"\u037ct\">request<\/span> <span class=\"\u037cn\">import<\/span> <span class=\"\u037ct\">urlopen<\/span><\/span><\/p>\n<p><span class=\"\u037cl\" style=\"color: #99cc00;\">#Descargar archivo desde internet<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">fileData<\/span> <span class=\"\u037cn\">=<\/span> <span class=\"\u037ct\">urlopen<\/span>(<span class=\"\u037cr\">&#8220;https:\/\/github.com\/bgempire\/TedTheFrog\/raw\/master\/Ted%20The%20Frog.blend&#8221;<\/span>)<\/span><\/p>\n<p><span class=\"\u037cl\" style=\"color: #99cc00;\">#Leer el archivo en memoria como bytes<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">fileData<\/span> <span class=\"\u037cn\">=<\/span> <span class=\"\u037ct\">fileData<\/span><span class=\"\u037cn\">.<\/span>read()<\/span><\/p>\n<\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2087\" data-end=\"2166\">Despu\u00e9s de ejecutar esto, <strong data-start=\"2113\" data-end=\"2165\">fileData contiene el archivo completo en memoria<\/strong>.<\/p>\n<hr data-start=\"2168\" data-end=\"2171\" \/>\n<h1 data-section-id=\"1qmd334\" data-start=\"2173\" data-end=\"2210\">\ud83d\udcbe 3. Guardar el archivo descargado<\/h1>\n<p data-start=\"2212\" data-end=\"2276\">Si queremos guardar el archivo <code data-start=\"2243\" data-end=\"2251\">.blend<\/code> en la carpeta del juego:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span class=\"\u037cl\" style=\"color: #99cc00;\">#Ruta del archivo que se guardar\u00e1<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">resultingBlendFile<\/span> <span class=\"\u037cn\">=<\/span> <span class=\"\u037ct\">pathGameData<\/span> <span class=\"\u037cn\">\/<\/span> <span class=\"\u037cr\">&#8220;DownloadedBlendFile.blend&#8221; <\/span><\/span><span class=\"\u037cl\" style=\"color: #99cc00;\">#Guardar archivo<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037cn\">with<\/span> <span class=\"\u037ct\">open<\/span>(<span class=\"\u037ct\">resultingBlendFile<\/span><span class=\"\u037cn\">.<\/span>as_posix(), <span class=\"\u037cr\">&#8220;wb&#8221;<\/span>) <span class=\"\u037cn\">as<\/span> <span class=\"\u037ct\">openedFile<\/span>:<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0openedFile<\/span><span class=\"\u037cn\">.<\/span>write(<span class=\"\u037ct\">fileData<\/span>)<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2504\" data-end=\"2553\">Ahora el archivo descargado estar\u00e1 disponible en:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<blockquote>\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><\/div>\n<\/blockquote>\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span style=\"color: #339966;\">AppData\/My Game Folder\/DownloadedBlendFile.blend<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2613\" data-end=\"2678\">Despu\u00e9s podemos cargarlo usando funciones normales de Range como:<\/p>\n<ul data-start=\"2680\" data-end=\"2729\">\n<li data-section-id=\"oxl355\" data-start=\"2680\" data-end=\"2705\">\n<p data-start=\"2682\" data-end=\"2705\"><span style=\"color: #00ff00;\"><code data-start=\"2682\" data-end=\"2705\">Range.logic.startGame()<\/code><\/span><\/p>\n<\/li>\n<li data-section-id=\"ql04yu\" data-start=\"2706\" data-end=\"2729\">\n<p data-start=\"2708\" data-end=\"2729\"><code data-start=\"2708\" data-end=\"2729\"><span style=\"color: #339966;\">Range.logic.LibLoad()<\/span><\/code><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"2731\" data-end=\"2734\" \/>\n<h1 data-section-id=\"jdz7u5\" data-start=\"2736\" data-end=\"2784\">\u26a1 4. Cargar escenas directamente desde memoria<\/h1>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1023\" src=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post003-e1773247328250.jpg\" alt=\"\" width=\"1024\" height=\"546\" srcset=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post003-e1773247328250.jpg 1024w, https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post003-e1773247328250-300x160.jpg 300w, https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post003-e1773247328250-768x410.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p data-start=\"2786\" data-end=\"2898\">Range o UPBGE tambi\u00e9n permite <strong data-start=\"2808\" data-end=\"2851\">cargar datos directamente desde memoria<\/strong>, sin necesidad de guardar el archivo en disco.<\/p>\n<p data-start=\"2900\" data-end=\"2933\">Esto puede hacerse con <code data-start=\"2923\" data-end=\"2932\">LibLoad<\/code>.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<blockquote>\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\">\n<p><span style=\"color: #339966;\"><span class=\"\u037cn\">import<\/span> <span class=\"\u037ct\">bge<\/span><\/span><\/p>\n<p><span class=\"\u037cl\" style=\"color: #99cc00;\"># Cargar escena desde datos en memoria<\/span><br \/>\n<span style=\"color: #339966;\"><span class=\"\u037ct\">bge<\/span><span class=\"\u037cn\">.<\/span>logic<span class=\"\u037cn\">.<\/span>LibLoad(<span class=\"\u037cr\">&#8220;DownloadedLib&#8221;<\/span>, <span class=\"\u037cr\">&#8220;Scene&#8221;<\/span>, <span class=\"\u037ct\">fileData<\/span>)<\/span><\/p>\n<\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3055\" data-end=\"3080\">Par\u00e1metros de la funci\u00f3n:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><\/div>\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span style=\"color: #339966;\">LibLoad(nombreBiblioteca, tipo, datosBytes)<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3135\" data-end=\"3143\">Ejemplo:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse\/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1\"><\/div>\n<div class=\"pt-3\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037ck \u037cy\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<blockquote>\n<div class=\"cm-content q9tKkq_readonly\"><span style=\"color: #339966;\">LibLoad(&#8220;DownloadedLib&#8221;, &#8220;Scene&#8221;, fileData)<\/span><\/div>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3198\" data-end=\"3262\">Esto cargar\u00e1 la escena contenida dentro del <code data-start=\"3242\" data-end=\"3250\">.blend<\/code> descargado.<\/p>\n<hr data-start=\"3264\" data-end=\"3267\" \/>\n<h1 data-section-id=\"5jvvw9\" data-start=\"3269\" data-end=\"3297\">\ud83d\ude80 Ventajas de este m\u00e9todo<\/h1>\n<p data-start=\"3299\" data-end=\"3376\">Usar este sistema permite construir juegos con una arquitectura m\u00e1s flexible.<\/p>\n<p data-start=\"3378\" data-end=\"3399\">Algunas ventajas son:<\/p>\n<ul data-start=\"3401\" data-end=\"3566\">\n<li data-section-id=\"11tlani\" data-start=\"3401\" data-end=\"3430\">\n<p data-start=\"3403\" data-end=\"3430\"><span style=\"color: #339966;\">Ejecutables m\u00e1s ligeros \u26a1<\/span><\/p>\n<\/li>\n<li data-section-id=\"l810en\" data-start=\"3431\" data-end=\"3470\">\n<p data-start=\"3433\" data-end=\"3470\"><span style=\"color: #339966;\">Descarga de niveles bajo demanda \ud83c\udf10<\/span><\/p>\n<\/li>\n<li data-section-id=\"1uo4v1e\" data-start=\"3471\" data-end=\"3528\">\n<p data-start=\"3473\" data-end=\"3528\"><span style=\"color: #339966;\">Actualizaci\u00f3n de contenido sin reinstalar el juego \ud83d\udd04<\/span><\/p>\n<\/li>\n<li data-section-id=\"bubuea\" data-start=\"3529\" data-end=\"3566\">\n<p data-start=\"3531\" data-end=\"3566\"><span style=\"color: #339966;\">Soporte para contenido modular \ud83d\udce6<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"3568\" data-end=\"3708\">Tambi\u00e9n puede ayudar a mantener ciertos recursos fuera del ejecutable para evitar que el jugador modifique f\u00e1cilmente las escenas del juego.<\/p>\n<hr data-start=\"3710\" data-end=\"3713\" \/>\n<h1 data-section-id=\"pysjqx\" data-start=\"3715\" data-end=\"3743\">\ud83c\udfae Posibles usos en juegos<\/h1>\n<p data-start=\"3745\" data-end=\"3838\">Este sistema puede utilizarse para implementar diferentes caracter\u00edsticas dentro de un juego:<\/p>\n<ul data-start=\"3840\" data-end=\"3985\">\n<li data-section-id=\"ak3s1w\" data-start=\"3840\" data-end=\"3870\">\n<p data-start=\"3842\" data-end=\"3870\"><span style=\"color: #339966;\">Descargar <strong data-start=\"3852\" data-end=\"3870\">nuevos niveles<\/strong><\/span><\/p>\n<\/li>\n<li data-section-id=\"cv997p\" data-start=\"3871\" data-end=\"3894\">\n<p data-start=\"3873\" data-end=\"3894\"><span style=\"color: #339966;\">Actualizar <strong data-start=\"3884\" data-end=\"3894\">assets<\/strong><\/span><\/p>\n<\/li>\n<li data-section-id=\"pm5on7\" data-start=\"3895\" data-end=\"3914\">\n<p data-start=\"3897\" data-end=\"3914\"><span style=\"color: #339966;\">Instalar <strong data-start=\"3906\" data-end=\"3914\">mods<\/strong><\/span><\/p>\n<\/li>\n<li data-section-id=\"ldxn05\" data-start=\"3915\" data-end=\"3934\">\n<p data-start=\"3917\" data-end=\"3934\"><span style=\"color: #339966;\">Descargar <strong data-start=\"3927\" data-end=\"3934\">DLC<\/strong><\/span><\/p>\n<\/li>\n<li data-section-id=\"1kwmhk4\" data-start=\"3935\" data-end=\"3985\">\n<p data-start=\"3937\" data-end=\"3985\"><span style=\"color: #339966;\">Cargar <strong data-start=\"3944\" data-end=\"3985\">escenarios generados por la comunidad<\/strong><\/span><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"3987\" data-end=\"3990\" \/>\n<h1 data-section-id=\"1br8yh3\" data-start=\"3992\" data-end=\"4007\">\ud83e\udde0 Conclusi\u00f3n<\/h1>\n<p data-start=\"4009\" data-end=\"4164\">La posibilidad de <strong data-start=\"4027\" data-end=\"4081\">descargar y cargar archivos <code data-start=\"4057\" data-end=\"4065\">.range<\/code> din\u00e1micamente<\/strong> abre muchas posibilidades interesantes para proyectos desarrollados con <strong data-start=\"4154\" data-end=\"4163\">Range \/ UPBGE<\/strong>.<\/p>\n<p data-start=\"4166\" data-end=\"4375\">En lugar de empaquetar todo el contenido dentro del ejecutable, es posible construir juegos m\u00e1s <strong data-start=\"4262\" data-end=\"4287\">modulares y flexibles<\/strong>, donde los niveles, escenas o recursos pueden descargarse cuando el juego los necesita.<\/p>\n<p data-start=\"4377\" data-end=\"4406\">Este enfoque tambi\u00e9n permite:<\/p>\n<ul data-start=\"4408\" data-end=\"4620\">\n<li data-section-id=\"15p6aim\" data-start=\"4408\" data-end=\"4455\">\n<p data-start=\"4410\" data-end=\"4455\"><span style=\"color: #339966;\">mantener el ejecutable principal m\u00e1s ligero<\/span><\/p>\n<\/li>\n<li data-section-id=\"391yh2\" data-start=\"4456\" data-end=\"4504\">\n<p data-start=\"4458\" data-end=\"4504\"><span style=\"color: #339966;\">actualizar contenido sin recompilar el juego<\/span><\/p>\n<\/li>\n<li data-section-id=\"12szj5v\" data-start=\"4505\" data-end=\"4558\">\n<p data-start=\"4507\" data-end=\"4558\"><span style=\"color: #339966;\">distribuir nuevos niveles despu\u00e9s del lanzamiento<\/span><\/p>\n<\/li>\n<li data-section-id=\"1xrxd4k\" data-start=\"4559\" data-end=\"4620\">\n<p data-start=\"4561\" data-end=\"4620\"><span style=\"color: #339966;\">experimentar con sistemas de contenido descargable o mods<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"4622\" data-end=\"4870\">Aunque este tipo de sistemas requiere una planificaci\u00f3n adecuada de los recursos y las rutas de archivos, puede convertirse en una herramienta muy buena para proyectos que est\u00e9n planeados crecer con el tiempo o bien que desean distribuir contenido de forma din\u00e1mica.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfaf Objetivo del tutorial El objetivo de este tutorial es ense\u00f1arte c\u00f3mo descargar y gestionar escenas externas en Range, almacen\u00e1ndolas correctamente en AppData para su uso dentro de tus proyectos. A lo largo del proceso, aprender\u00e1s a integrar recursos externos de forma organizada, optimizando la reutilizaci\u00f3n de contenido y mejorando el flujo de trabajo en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1024,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[136],"tags":[180,181,84,83],"class_list":["post-1021","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-appdata","tag-python","tag-range","tag-upbge"],"jetpack_featured_media_url":"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/post001-e1773246456559.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1021"}],"version-history":[{"count":17,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1021\/revisions"}],"predecessor-version":[{"id":1093,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1021\/revisions\/1093"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/media\/1024"}],"wp:attachment":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}