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:
107
Assets/Scripts/Editor/OpenXRQuestSetup.cs
Normal file
107
Assets/Scripts/Editor/OpenXRQuestSetup.cs
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user