Hey Tertle! Much respect for your work and presence in the ECS community.
So here's what I'm using to try and build a single subscene. I have the target subscene as the only scene in my build settings.
[MenuItem("Aminal/Planets/Build Current Planet")]
private static void Build()
{
var buildTarget = EditorUserBuildSettings.activeBuildTarget;
var instance = DotsGlobalSettings.Instance;
var dataPath = Path.GetDirectoryName(Application.dataPath);
if (dataPath == null)
{
Debug.LogError("Data path is null");
return;
}
var tmpBuildFolder = Path.Combine(dataPath, $"/Library/content-staging/{buildTarget}/CelestialBodies");
var playerGuid = instance.GetPlayerType() == DotsGlobalSettings.PlayerType.Client
? instance.GetClientGUID()
: instance.GetServerGUID();
if (!playerGuid.IsValid)
{
Debug.LogError("Player GUID is invalid");
return;
}
var subsceneGuids = new HashSet<Hash128>();
for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
{
var scene = EditorBuildSettings.scenes[i];
var ssGuids = EditorEntityScenes.GetSubScenes(EditorBuildSettings.scenes[i].guid);
foreach (var ssGuid in ssGuids)
{
subsceneGuids.Add(ssGuid);
Debug.Log($"Building planet terrain for subscene {ssGuid}");
}
}
RemoteContentCatalogBuildUtility.BuildContent(subsceneGuids, playerGuid, buildTarget, tmpBuildFolder);
var publishFolder = Path.Combine(dataPath,
"content", $"Erba-Content");
if (!Directory.Exists(publishFolder))
{
Directory.CreateDirectory(publishFolder);
}
RemoteContentCatalogBuildUtility.PublishContent(tmpBuildFolder, publishFolder,
f => new string[]
{
"all"
});
}```