Unreal Engine 4 Mobile. Crear proyecto de Android + DLC





Unreal Engine 4 proporciona suficiente funcionalidad para el desarrollo de juegos completo para plataformas móviles. Desafortunadamente, el tema no está bien cubierto y el proceso de construcción de la aplicación en sí está lleno de errores. Decidí resumir la información que es relevante en este momento y compartir mi propia experiencia de superar este difícil camino. Este tutorial cubre los siguientes procesos en detalle:





  • Configurar un proyecto para desarrollar una aplicación móvil





  • Crear una versión de lanzamiento de la aplicación





  • Creación de DLC y su conexión con el proyecto





  • Descarga de DLC del servidor









Necesitaremos:





  • Unreal Engine 4.25.1





  • Python 3





  • Node.js (opcional)





  • Dispositivo Android con un puerto USB que funcione





Creación de proyectos y preparación de contenidos

Si ya tiene un proyecto terminado, puede omitir esta etapa.





Crea un proyecto de C ++ vacío





Cree una estructura de carpetas en el directorio de contenido





Agregar tarjetas

  • Guardar el nivel de arranque a un MapRelease carpeta llamada Release_Map





  • Crear un nuevo nivel a través de Archivo-> Nueva Nivel-> defecto y la guarda en el MapDLC carpeta llamada DLC_Map





Crear contenido de prueba

Crear un actor para probar el trabajo del contenido
  1. Abrir Release_Map





  2. Cree Blueprint Actor en la carpeta MapRelease y nombre ReleaseCube





  3. En la misma carpeta, cree Material, asígnele el nombre m_cube y establezca cualquier color para él





  4. ReleaseCube Static Mesh Component





  5. Details Static Mesh None





  6. View Options, Show Engine Content





  7. None Cube





  8.  Material (m_cube)





  9. ReleaseCube Release_Map









Level Blueprint





DLC_Map. Blueprint Actor DLCSphere m_sphere MapDLC. DLCSphere DLC_Map .





Edit->Plugins. .   , .





  • Android Runtime Permission





  • Online Subsystem





  • Online Subsystem Null





  • Online Subsystem Utils





  • TCP Messaging





  • UDP Messaging





  • Mobile Patching Utilities





  • GooglePAD





  • Online Subsystem Google Play









  • Actor Layer Utilities





  • Actor Sequence





  • Alembic Importer





  • Apple Image Utils





  • Apple Movie Player





  • Audio Capture





  • Cable Component





  • Camera Shake Previewer





  • Chaos Cloth





  • Chaos Cloth Editor





  • Cahos Niagara





  • Cahos Solver





  • CahosEditro





  • CharacterAI





  • Custom Mesh Component





  • Editable Mesh





  • Facial Animation Bulk Importer





  • Level Sequencer Editor





  • LigthPropogationVolume





  • Magic Leap





  • Magic Leap Light Estimation





  • Magic Leap Media Player





  • Magic Leap Passable World





  • Mesh Painting





  • Niagara





  • Oculus VR





  • Online Subsystem iOS





  • Paper2D





  • PhysX Vehicles





  • Procedural Mesh Component





  • Steam VR









Edit-> Project Settings.





Target Hardware Mobile/Tablet





Game Default Map





Packaging .





Packaging

Share Material Shader Code. DLC .





Packaging
Haga clic para expandir el cuadro de configuración avanzada
,

:





  • Create compressed cooked packages — 





  • List of maps to include in a packaged build —  ( ), .









Project
  • Full Rebuild





  • , For Distribution . (gradle)









Rendering

Rendering , —  Bloom. .









. . , . Support Atmospheric Fog, Atmospheric Fog  World Outliner. Sky Sphere . .





Android SDK —  . SDKConfig.





SDKConfig





(com.YourCompany.[PROJECT]). . aBigCompany YourCompany MyProject (AndroidDLC). . My Project with DLC.





APK Packaging








  • Target SDK Version: 29  Google Play





  • Store Version. , Google Play. 1





:





  • Package game data inside .apk —  APK . , Google Play APK (100 mb). APK Android App Bundle,





  • Use ExternalFilesDir for UE4Game files —  . SaveGame Object , . , ,





  • Orientation —  . . — 









arm64 servirá en la mayoría de los casos
arm64





Windows. :





keytool -genkey -v -keystore MyProjectKey.keystore -alias MyProjKey -keyalg RSA -keysize 2048 -validity 10000
      
      



. .









C:\User\(Current user) MyProjectKey.keystore.





  Build Folder (…\AndroidDLC\Build\Android) .









().





Project Launcher

Window->Project Launcher.





Crear APK mínimo de Android + DLC
Minimal Android APK + DLC
Cree una carpeta para almacenar los archivos recibidos y crear perfiles
Perfiles creados
Carpetas generadas









, . - .





Any Project :





Google Play APK DLC Shipping . Development .





Android APK

Android APK.





. :





, :





:









APK

:





Done Project Launcher.





, . , ...\AndroidDLC\Saved\Cooked\Android_ETC2.





EngineMaterials

, DefaultBloomKernel.uexp. Bloom , *.pak , , .





DLC

DLC Unreal Engine 4 . *.pak , .





, . . , , ( ).  





DLC

Edit -> Plugins.





  1. New Plugin





  2. —  Content Only





  3. (DLC1)





  4. Create Plugin





.





Android DLC

Android DLC.





, DLC, , Android APK. :





:





…/Android_Release/HTTPchunks DLC1.0 DLC.





Browse DLC:





:





, DLC:









DLC

DLC:





:





- *.mainfest:





, . …\Android_Release\HTTPchunks\DLC1\Android_ETC2. :





DLC1\AndroidDLC\ *.pak . AndroidDLC\Plugins\DLC1\Saved\Cooked\Android_ETC2





CloudDir .





.





Android_Release\App\1.0\Android_ETC2.









Install_AndroidDLC-arm64.bat . , .





My Project with DLC . Release_Map. 10 DLC_Map, .





DLC Mobile Patching Utilities

Android, .





Level Blueprint Release_Map.





blueprint .





Request Content DLC :

:





  • Remote Manifest URL —  yourserver.com/manifest_name.manifest





  • Cloud URL —  yourserver.com/[folder_with_ChunksV3_folder]





  • Install Directory —  ( —  DLC)









ChunksV3 CloudDir:





ChunksV3 *.pak DLC, .





Install Directory , , :





*.pak Mount:
  • Pak Order — 





  • Mount Point  —  .









, . Node.js.





:





http-server "F:\Unreal Projects\AndroidDLC\Android_Release\HTTPchunks\DLC1\Android_ETC2\CloudDir"
      
      



Servidor iniciado





Level Blueprint
  • Remote Manifest  —  http://127.0.0.1:8080/AndroidDLC_AndroidDLCDLC1.manifest





  • Cloud URL —  http://127.0.0.1:8080









Play, Release_Map. ...\AndroidDLC\PersistentDownloadDir\DLC *pak , .









DLC

DLC .  , *.pak .





Level Blueprint





Android APP .   AndroidDLC-Android_ETC2.pak AndroidDLC_AndroidDLCDLC1.manifest APK.





APK





Install_AndroidDLC-arm64.bat . :





%ADB% %DEVICE% shell rm -r %STORAGE%/Android/data/com.aBigCompany.MyProject/files/DLC

%ADB% %DEVICE% push AndroidDLC_AndroidDLCDLC1.manifest %STORAGE%/Android/data/com.aBigCompany.MyProject/files/DLC/AndroidDLC_AndroidDLCDLC1.manifest
%ADB% %DEVICE% push AndroidDLC-Android_ETC2.pak %STORAGE%/Android/data/com.aBigCompany.MyProject/files/DLC/AndroidDLC-Android_ETC2.pak

      
      







. .  , DLC .





DLC





DLC

*.pak . . . -. 





.





FTP , FileZilla.





Site Manager





  1. New Site





  2. (FTP Port : 21)





  3. Connect









DLC

app-content. DLC.









. :





func.php
<?php

function generateLink($link){
    return '<a href="'.$link.'">'.$link.'</a>';
}
 
function genFileStructCurrentDir($root_dir){
    if (is_dir($root_dir)){
        $files = opendir($root_dir); {
            if ($files){
                while (($item = readdir($files)) !== FALSE){
                    if ($item != '.' && $item != '..' && $item != 'index.php'){
                        echo generateLink($item) . " <br>";
                    }
                }
            }
        }
    }
}
 
 
?>
      
      







index.php
<?php
include '/var/www/uXXXXX/data/www/[YOUR_DOMAIN]/func.php';
?>
 
<html>
<head></head>
<body>
<?
$full_dir =  __DIR__;
genFileStructCurrentDir($full_dir);
?>
</body>
</html>
      
      







include:





include '/var/www/uXXXXX/data/www/[YOUR_DOMAIN]/func.php';
      
      



:

web-file-gen.py - Python index.php DCL1.





web-file-gen.py
import os
import shutil

path_to_index = 'index.php'

def copy_file_to_directory(destination:str, path_to_file:str):
    if os.path.isdir(destination):
        shutil.copy(path_to_file,destination)
    

def get_subdirectories(root_dir:str):
    out_list = []
    if os.path.isdir(root_dir):
        for item in os.listdir(root_dir):
            rel_pth = f'{root_dir}/{item}'
            if os.path.isdir(rel_pth):
                out_list.append(rel_pth)
                out_list += get_subdirectories(rel_pth)
    return out_list


def copy_file_to_dirs(dir_list:list, path_to_file:str):
    for folder in dir_list:
        if os.path.isdir(folder):
            copy_file_to_directory(folder, path_to_file)
        
dir_list = get_subdirectories(os.getcwd())
copy_file_to_dirs(dir_list,path_to_index)

input("Done")

      
      







.../www/your_domain func.php.





.../app-content index.php DLC1.





http://your_domain/app-content/DLC1/ChunksV3/





Si ve la estructura de carpetas, lo más probable es que todo esté hecho correctamente.
Si ve la estructura de carpetas, lo más probable es que todo esté hecho correctamente.









Editar el plano de nivel





Cambie la URL para descargar archivos, reconstruya y reinstale el proyecto en su dispositivo móvil.





El DLC ahora se está descargando e instalando.





Conclusión

Le recomiendo que piense en la organización de los archivos en su aplicación con anticipación. Intente mantener todo el código y los activos utilizados en diferentes DLC en el ensamblado principal. Este enfoque eliminará los archivos duplicados y reducirá el peso total de la aplicación.





Espero que este material ayude a ahorrar tiempo a alguien.








All Articles