Unreal Engine4Mobile。Androidプロジェクト+ DLCをビルドする





Unreal Engine 4は、モバイルプラットフォーム向けのゲームを完全に開発するのに十分な機能を提供します。残念ながら、このトピックは十分にカバーされておらず、アプリケーション自体を構築するプロセスにはバグがたくさんあります。私は、現時点で関連する情報を要約し、この困難な道を克服した自分の経験を共有することにしました。このチュートリアルでは、次のプロセスについて詳しく説明します。





  • モバイルアプリケーションを開発するためのプロジェクトを設定する





  • アプリケーションのリリースバージョンの作成





  • DLCの作成とプロジェクトへの接続





  • サーバーからDLCをダウンロードする









必要なもの:





  • Unreal Engine 4.25.1





  • Python 3





  • Node.js(オプション)





  • USBポートが機能するAndroidデバイス





プロジェクトの作成とコンテンツの準備

すでに完成したプロジェクトがある場合は、この段階をスキップできます。





空のC ++プロジェクトを作成します





Contentディレクトリにフォルダ構造を作成します





カードを追加する

  • スタータレベル保存MapReleaseのフォルダと呼ばれるRelease_Map





  • [ファイル]-> [新しいレベル]-> [デフォルト]で新しいレベルを作成し、DLC_Mapという名前のMapDLCフォルダーに保存します





テストコンテンツを作成する

コンテンツの動作をテストするためのアクターの作成
  1. Release_Mapを開く





  2. MapReleaseフォルダーにBlueprintActorを作成し、ReleaseCubeという名前を付けます





  3. 同じフォルダでMaterialを作成し、m_cubeという名前を付けて、任意の色を設定します





  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
クリックして詳細設定ボックスを展開
,

:





  • 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はほとんどの場合機能します
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.





最小限のAndroidAPK + DLCを作成する
Minimal Android APK + DLC
受信したファイルを保存するフォルダを作成し、プロファイルを作成します
作成されたプロファイル
生成されたフォルダ









, . - .





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"
      
      



サーバーが起動しました





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/





フォルダ構造が表示されている場合は、おそらくすべてが正しく行われています。
フォルダ構造が表示されている場合は、おそらくすべてが正しく行われています。









レベルブループリントを編集する





ファイルをダウンロードするためのURLを変更し、プロジェクトを再構築してモバイルデバイスに再インストールします。





現在、DLCがダウンロードおよびインストールされています。





結論

アプリケーション内のファイルの編成について事前に検討することをお勧めします。メインアセンブリのさまざまなDLCで使用されるすべてのコードとアセットを保持するようにしてください。このアプローチにより、重複ファイルが排除され、アプリケーションの全体的な重量が軽減されます。





この資料が誰かの時間を節約するのに役立つことを願っています。








All Articles