メインコンテンツへスキップ

検索

SimpleBundle (Optimization and Fix for Build Time)

コメント

6件のコメント

  • 正式なコメント
    GGG-Support コミュニティマネージャー

    Thank you for your fantastic add-on!

  • FFF1969

    The build time for Sample project using SimpleBundle from beginning to the very end.

    Only 3.5mins. The original build took 40mins on my machine.

    This is the output build folders,  Original vs SimpleBundle:

    RMU generate several files/folder for each tile. It will create lots of small files and Unity Addressable Assets (AA) want to resolve dependencies in them which is time-consuming. Just use AssetBundle, it is good enough for RMU in most scenarios.

    1
  • FFF1969

    To answer the question from Twitter regarding security concerns: (sorry, I don't have a Twitter account but someone in Discord told me there are people ask questions on Twitter)

    This patch is very simple, which is why it's called 'SimpleBundle'.

    It uses AssetBundle (the traditional way to load assets in Unity), instead of the Addressable Asset (AA).

    In RMU, the AA is simply used for path mapping. If you want to load an asset, it helps you convert the path from something like '01/battlebacks1_fort_001.png' to the full path like 'Assets\RPGMaker\Storage\Images\Background\Battle\01\battlebacks1_fort_001.png'.

    But AA doesn't handle 20k+ files well in this scenario. There might be some setting tweaks that could solve the performance issues in aa, but I don't know because I don't like this package at all – it's too complex to set up and use.

    SimpleBundle stores this mapping data in a ScriptableObject (SimpleBundleData) and puts it in an AssetBundle (simplebundle.unity3d). Then, it packs all data separately into different AssetBundle files, which is good for patching or future updates for each game.

    Before loading, the mapping is loaded first, and then all AssetBundles are loaded. The Load.LoadAssetSync queries the path and bundle, then loads the file.

    Even in RMU, it uses AA.LoadAssetAsync, which is not truly asynchronous loading because the code waits for it to finish before returning. Basically, it's still synchronous loading. There's no performance impact in SimpleBundle.

    Feel free to ask questions here and I'm happy to answer them.

    And if you already built your data before using SimpleBundle, the data created by AA is still there and it will be copied to your build. You need to delete them first, from 'Library\com.unity.addressables\aa' folder.

    I guess it could be slower on machine without SSD, there are still too many small files to pack. An SSD will help performance for game development by Unity and RMU a lot.

    === Translated by ChatGPT ===
    Twitterに関するセキュリティの懸念についての質問に答えます:  
    (申し訳ありませんが、私はTwitterアカウントを持っていませんが、Discordで誰かがTwitterで質問をしていると教えてくれました)

    このパッチは非常にシンプルなので、「SimpleBundle」と呼ばれています。

    Unityでアセットをロードする伝統的な方法であるAssetBundleを使用し、Addressable Asset(AA)ではありません。

    RMUでは、AAは単にパスマッピングに使用されます。アセットをロードする場合、'01/battlebacks1_fort_001.png'のようなパスを'Assets\RPGMaker\Storage\Images\Background\Battle\01\battlebacks1_fort_001.png'のような完全なパスに変換するのに役立ちます。

    しかし、このシナリオではAAは20k以上のファイルをうまく扱うことができません。AAのパフォーマンス問題を解決できる設定の調整があるかもしれませんが、私はそのパッケージが一切好きではないのでわかりません - 設定や使用が複雑すぎます。

    SimpleBundleはこのマッピングデータをScriptableObject(SimpleBundleData)に格納し、AssetBundle(simplebundle.unity3d)に入れます。その後、すべてのデータを別々のAssetBundleファイルにパックし、それぞれのゲームのパッチや将来の更新に適しています。

    ロードする前に、まずマッピングがロードされ、次にすべてのAssetBundlesがロードされます。Load.LoadAssetSyncはパスとバンドルを問い合わせ、ファイルをロードします。

    RMUでも、AA.LoadAssetAsyncは本当に非同期的なロードではなく、コードはそれが終わるのを待つので、基本的には同期的なロードです。SimpleBundleではパフォーマンスに影響はありません。

    ここで自由に質問していただければ、喜んでお答えします。

    そして、SimpleBundleを使う前にすでにデータをビルドしていた場合、AAによって作成されたデータはまだ存在し、ビルドにコピーされます。それらを最初に削除する必要があります。'Library\com.unity.addressables\aa'フォルダからです。

    SSDがないマシンでは遅くなる可能性があります、パックするにはまだ小さなファイルがたくさんあります。SSDはUnityとRMUによるゲーム開発のパフォーマンスを大幅に向上げるのに役立ちます。

    1
  • 紫苑もみじ

    もしかしたら、私がそのTwitterユーザーかもしれません。とても良いコードをありがとうございます。

    私はC#とUnityを初めて1週間程度の初心者なので、SimpleBundleを完全には理解できていませんが、あなたの詳細な説明で大まかには理解しました。

    コードを読み進めるうちにまた質問をするかもしれませんが、現時点で抱えていた疑問は解けました。 本当にありがとうございます。

     

    === Translated by ChatGPT ===

    I might be the Twitter user you mentioned. Thank you very much for the excellent code.

    As a beginner in C# and Unity, having started just about a week ago, I don't fully understand SimpleBundle, but I have a rough understanding thanks to your detailed explanation.

    As I continue to read through the code, I might have more questions in the future, but for now, you have resolved the doubts I had. Thank you so much.

    0
  • hellno 2015

    Tried it out and works a charm! Reduced the export time from 50 mins to 15 mins for me and made the game itself load WAY faster when starting it! Thank you SOOOOO much for this!

    0
  • Figgs Neughton

    God bless you sir.

    0

サインインしてコメントを残してください。