set up addressable geo tile streaming for quest

- add addressables settings/groups for tile prefabs with custom TileBuildPath/TileLoadPath profiles and link.xml preservation
- add editor tools for building tile addressables, configuring openxr quest loaders, removing missing scripts, and forcing android tool paths
- add runtime loader + manifest model to stream tile bundles from persistent data with radius-based load/unload
- add TestArea1 scene wired to GeoTileAddressablesLoader and update build settings to enable it
- update geo tile prefab importer output path to Assets/TilePrefabs
- update project/xr/android settings: min sdk 34, app id, openxr composition layers + quest devices, scripting define symbols, and renderer tweaks
- update packages (addressables 2.8, ar foundation 6.3.2, composition layers 2.3, collab proxy 2.11.2) and record scriptable build pipeline config
- remove temporary recovery scene files and add Notes plan/progress docs
This commit is contained in:
2026-01-22 01:12:59 +01:00
parent 0ae28bf32d
commit bd1e6f4f4d
63 changed files with 2738 additions and 117 deletions

View File

@@ -0,0 +1,107 @@
using UnityEditor;
using UnityEditor.XR.Management;
using UnityEditor.XR.Management.Metadata;
using UnityEngine;
using UnityEngine.XR.Management;
#if XR_COMPOSITION_LAYERS
using UnityEngine.XR.OpenXR;
using UnityEngine.XR.OpenXR.Features.CompositionLayers;
#endif
namespace DTrierFlood.Editor
{
static class OpenXRQuestSetup
{
const string GeneralSettingsPath = "Assets/XR/XRGeneralSettingsPerBuildTarget.asset";
const string OpenXRLoaderType = "UnityEngine.XR.OpenXR.OpenXRLoader";
[MenuItem("Tools/XR/Setup OpenXR for Quest (No Meta SDK)")]
static void Setup()
{
var generalSettings = EnsureGeneralSettingsAsset();
EnsureBuildTarget(generalSettings, BuildTargetGroup.Android);
#if XR_COMPOSITION_LAYERS
EnableCompositionLayersFeature(BuildTargetGroup.Android);
EnableCompositionLayersFeature(BuildTargetGroup.Standalone);
#endif
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("OpenXR is configured for Android. Build the project for Quest using OpenXR.");
}
static XRGeneralSettingsPerBuildTarget EnsureGeneralSettingsAsset()
{
var settings = AssetDatabase.LoadAssetAtPath<XRGeneralSettingsPerBuildTarget>(GeneralSettingsPath);
if (settings != null)
{
EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, settings, true);
return settings;
}
if (!AssetDatabase.IsValidFolder("Assets/XR"))
{
AssetDatabase.CreateFolder("Assets", "XR");
}
settings = ScriptableObject.CreateInstance<XRGeneralSettingsPerBuildTarget>();
AssetDatabase.CreateAsset(settings, GeneralSettingsPath);
EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, settings, true);
EditorUtility.SetDirty(settings);
return settings;
}
static void EnsureBuildTarget(XRGeneralSettingsPerBuildTarget settings, BuildTargetGroup targetGroup)
{
if (!settings.HasSettingsForBuildTarget(targetGroup))
{
settings.CreateDefaultSettingsForBuildTarget(targetGroup);
}
if (!settings.HasManagerSettingsForBuildTarget(targetGroup))
{
settings.CreateDefaultManagerSettingsForBuildTarget(targetGroup);
}
var generalSettings = settings.SettingsForBuildTarget(targetGroup);
if (generalSettings != null)
{
generalSettings.InitManagerOnStart = true;
EditorUtility.SetDirty(generalSettings);
}
var managerSettings = settings.ManagerSettingsForBuildTarget(targetGroup);
if (managerSettings != null)
{
XRPackageMetadataStore.AssignLoader(managerSettings, OpenXRLoaderType, targetGroup);
EditorUtility.SetDirty(managerSettings);
}
EditorUtility.SetDirty(settings);
}
#if XR_COMPOSITION_LAYERS
static void EnableCompositionLayersFeature(BuildTargetGroup targetGroup)
{
var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup);
if (settings == null)
{
Debug.LogWarning($"OpenXR settings not found for {targetGroup}.");
return;
}
var feature = settings.GetFeature<OpenXRCompositionLayersFeature>();
if (feature == null)
{
Debug.LogWarning($"OpenXR Composition Layers feature not found for {targetGroup}.");
return;
}
feature.enabled = true;
EditorUtility.SetDirty(feature);
EditorUtility.SetDirty(settings);
}
#endif
}
}