Search Unity

Question Error about ContentCatalogBuildUtility.BuildContentArchives

Discussion in 'Entity Component System' started by Laugh123, Feb 23, 2023.

  1. Laugh123

    Laugh123

    Joined:
    Jun 27, 2017
    Posts:
    3
    When I tested the example from Content management | Entities | 1.0.0-pre.44 (unity3d.com), I got an error as follows:

    InvalidOperationException: ContentCatalogBuildUtility.BuildContentArchives failed with status 'Error'.
    Unity.Scenes.Editor.EntitySceneBuildUtility.BuildContent (UnityEditor.BuildTarget target, System.Collections.Generic.HashSet`1[T] weakAssetRefs, System.Collections.Generic.List`1[T] customContent, System.Action`2[T1,T2] RegisterFileCopy, System.Func`4[T1,T2,T3,TResult] objIdToRTId, System.Func`2[T,TResult] idRemapFunc, System.Int32 numberOfSubScenesInBuild, System.Int32& numberOfAssetsInSubScenes) (at ./Library/PackageCache/com.unity.entities@1.0.0-pre.44/Unity.Scenes.Editor/EntitySceneBuildUtility.cs:676)
    Unity.Scenes.Editor.EntitySceneBuildUtility.PrepareAdditionalFiles (Unity.Entities.Hash128 playerGuid, Unity.Entities.Hash128[] sceneGuids, UnityEditor.Experimental.ArtifactKey[] entitySceneArtifacts, UnityEditor.BuildTarget target, System.Action`2[T1,T2] RegisterFileCopy) (at ./Library/PackageCache/com.unity.entities@1.0.0-pre.44/Unity.Scenes.Editor/EntitySceneBuildUtility.cs:310)
    Unity.Entities.Content.RemoteContentCatalogBuildUtility.BuildContent (System.Collections.Generic.HashSet`1[T] subScenes, Unity.Entities.Hash128 playerGUID, UnityEditor.BuildTarget target, System.String buildFolder) (at ./Library/PackageCache/com.unity.entities@1.0.0-pre.44/Unity.Scenes.Editor/Build/RemoteContentCatalogBuildUtility.cs:117)
    Unity.Scenes.Editor.DotsAssetBuilder.CreateContentUpdate () (at Assets/Editor/DotsAssetBuilder.cs:52)

    Code (CSharp):
    1. using System;
    2. using System.Collections.Generic;
    3. using System.IO;
    4. using UnityEngine;
    5. using UnityEditor;
    6. using Unity.Entities.Build;
    7. using Unity.Entities.Content;
    8. using Unity.Scenes.Editor;
    9.  
    10. static class BuildUtilities
    11. {
    12.     //prepares the content files for publish.  The original files can be deleted or retained during this process by changing the last parameter of the PublishContent call.
    13.     static void PublishExistingBuild()
    14.     {
    15.         var buildFolder = EditorUtility.OpenFolderPanel("Select Build To Publish",
    16.                             Path.GetDirectoryName(Application.dataPath), "Builds");
    17.         if (!string.IsNullOrEmpty(buildFolder))
    18.         {
    19.             var streamingAssetsPath = $"{buildFolder}/{PlayerSettings.productName}_Data/StreamingAssets";
    20.             //the content sets are defined by the functor passed in here.
    21.             RemoteContentCatalogBuildUtility.PublishContent(streamingAssetsPath,
    22.                 $"{buildFolder}-RemoteContent",
    23.                 f => new string[] { "all" }, true);
    24.         }
    25.     }
    26.  
    27.     //This method is somewhat complicated because it will build the scenes from a player build but without fully building the player.
    28.     static void CreateContentUpdate()
    29.     {
    30.         var buildFolder = EditorUtility.OpenFolderPanel("Select Build To Publish",
    31.                      Path.GetDirectoryName(Application.dataPath), "Builds");
    32.         if (!string.IsNullOrEmpty(buildFolder))
    33.         {
    34.             var buildTarget = EditorUserBuildSettings.activeBuildTarget;
    35.             var tmpBuildFolder = Path.Combine(Path.GetDirectoryName(Application.dataPath),
    36.                         $"/Library/ContentUpdateBuildDir/{PlayerSettings.productName}");
    37.  
    38.             var instance = DotsGlobalSettings.Instance;
    39.             var playerGuid = instance.GetPlayerType() == DotsGlobalSettings.PlayerType.Client ? instance.GetClientGUID() : instance.GetServerGUID();
    40.             if (!playerGuid.IsValid)
    41.                 throw new Exception("Invalid Player GUID");
    42.  
    43.             var subSceneGuids = new HashSet<Unity.Entities.Hash128>();
    44.             for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
    45.             {
    46.                 var ssGuids = EditorEntityScenes.GetSubScenes(EditorBuildSettings.scenes[i].guid);
    47.                 foreach (var ss in ssGuids)
    48.                     subSceneGuids.Add(ss);
    49.             }
    50.  
    51.             RemoteContentCatalogBuildUtility.BuildContent(subSceneGuids, playerGuid, buildTarget, tmpBuildFolder);
    52.  
    53.             var publishFolder = Path.Combine(Path.GetDirectoryName(Application.dataPath), "Builds", $"{buildFolder}-RemoteContent");
    54.             RemoteContentCatalogBuildUtility.PublishContent(tmpBuildFolder, publishFolder, f => new string[] { "all" });
    55.         }
    56.     }
    57. }