Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

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. }