add quest terrain runtime diagnostics and render-state probe
This commit is contained in:
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
@@ -73,6 +74,7 @@ public sealed class RuntimeBootProbe : MonoBehaviour
|
||||
if (geoTileLoader == null)
|
||||
{
|
||||
sb.Append("geoTileLoader=null ");
|
||||
AppendRenderState(sb);
|
||||
Debug.Log(sb.ToString());
|
||||
return;
|
||||
}
|
||||
@@ -103,9 +105,66 @@ public sealed class RuntimeBootProbe : MonoBehaviour
|
||||
else
|
||||
sb.Append("catalogExists=unknown ");
|
||||
|
||||
AppendRenderState(sb);
|
||||
Debug.Log(sb.ToString());
|
||||
}
|
||||
|
||||
private static void AppendRenderState(StringBuilder sb)
|
||||
{
|
||||
var rp = GraphicsSettings.currentRenderPipeline;
|
||||
string rpName = rp != null ? $"{rp.name} ({rp.GetType().Name})" : "BuiltInRenderPipeline";
|
||||
int qualityIndex = QualitySettings.GetQualityLevel();
|
||||
string qualityName = qualityIndex >= 0 && qualityIndex < QualitySettings.names.Length
|
||||
? QualitySettings.names[qualityIndex]
|
||||
: "<unknown>";
|
||||
|
||||
sb.Append("quality=").Append(qualityIndex).Append(":").Append(qualityName).Append(" ");
|
||||
sb.Append("renderPipeline=").Append(rpName).Append(" ");
|
||||
|
||||
var cam = Camera.main;
|
||||
if (cam == null)
|
||||
{
|
||||
sb.Append("mainCamera=<none> ");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("mainCamera=").Append(cam.name).Append(" ");
|
||||
sb.Append("mainCamera.farClip=").Append(cam.farClipPlane.ToString("F1")).Append(" ");
|
||||
sb.Append("mainCamera.nearClip=").Append(cam.nearClipPlane.ToString("F3")).Append(" ");
|
||||
sb.Append("mainCamera.cullingMask=0x").Append(cam.cullingMask.ToString("X")).Append(" ");
|
||||
}
|
||||
|
||||
AppendXrState(sb);
|
||||
}
|
||||
|
||||
private static void AppendXrState(StringBuilder sb)
|
||||
{
|
||||
try
|
||||
{
|
||||
Type xrSettingsType = Type.GetType("UnityEngine.XR.XRSettings, UnityEngine.XRModule");
|
||||
if (xrSettingsType == null)
|
||||
{
|
||||
sb.Append("xrEnabled=<unavailable> ");
|
||||
return;
|
||||
}
|
||||
|
||||
var enabledProp = xrSettingsType.GetProperty("enabled", BindingFlags.Public | BindingFlags.Static);
|
||||
bool xrEnabled = enabledProp != null && enabledProp.GetValue(null) is bool enabled && enabled;
|
||||
sb.Append("xrEnabled=").Append(xrEnabled).Append(" ");
|
||||
|
||||
if (!xrEnabled)
|
||||
return;
|
||||
|
||||
var stereoModeProp = xrSettingsType.GetProperty("stereoRenderingMode", BindingFlags.Public | BindingFlags.Static);
|
||||
object stereoMode = stereoModeProp?.GetValue(null);
|
||||
sb.Append("xrStereoMode=").Append(stereoMode != null ? stereoMode.ToString() : "<unknown>").Append(" ");
|
||||
}
|
||||
catch
|
||||
{
|
||||
sb.Append("xrEnabled=<error> ");
|
||||
}
|
||||
}
|
||||
|
||||
private static string ReadPrivateField(GeoTileAddressablesLoader loader, string fieldName, string fallback)
|
||||
{
|
||||
try
|
||||
@@ -149,17 +208,15 @@ public sealed class RuntimeBootProbe : MonoBehaviour
|
||||
{
|
||||
case RuntimePlatform.Android:
|
||||
return "Android";
|
||||
case RuntimePlatform.IPhonePlayer:
|
||||
return "iOS";
|
||||
case RuntimePlatform.WindowsPlayer:
|
||||
case RuntimePlatform.WindowsEditor:
|
||||
return "Windows";
|
||||
return "StandaloneWindows64";
|
||||
case RuntimePlatform.OSXPlayer:
|
||||
case RuntimePlatform.OSXEditor:
|
||||
return "macOS";
|
||||
return "StandaloneOSX";
|
||||
case RuntimePlatform.LinuxPlayer:
|
||||
case RuntimePlatform.LinuxEditor:
|
||||
return "Linux";
|
||||
return "StandaloneLinux64";
|
||||
default:
|
||||
return "Android";
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
public class GeoTileAddressablesLoader : MonoBehaviour
|
||||
{
|
||||
@@ -89,6 +90,7 @@ public class GeoTileAddressablesLoader : MonoBehaviour
|
||||
Debug.Log(
|
||||
$"[GeoTileAddressablesLoader] Startup: platform={Application.platform}, " +
|
||||
$"persistentDataPath={Application.persistentDataPath}, basePath={basePath}, manifestPath={manifestPath}");
|
||||
LogRuntimeRenderState();
|
||||
|
||||
Log($"Initializing loader. BasePath={basePath}");
|
||||
Log($"ManifestPath={manifestPath}");
|
||||
@@ -462,7 +464,10 @@ public class GeoTileAddressablesLoader : MonoBehaviour
|
||||
var terrain = instance.GetComponent<Terrain>();
|
||||
if (terrain == null)
|
||||
{
|
||||
Debug.LogWarning($"[GeoTileAddressablesLoader] Tile {tileKey}: no Terrain component on instance.");
|
||||
int rendererCount = instance.GetComponentsInChildren<Renderer>(true).Length;
|
||||
Debug.LogWarning(
|
||||
$"[GeoTileAddressablesLoader] Tile {tileKey}: no Terrain component on instance, " +
|
||||
$"rendererCount={rendererCount}, rootPos={FormatVec3(instance.transform.position)}");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -484,10 +489,22 @@ public class GeoTileAddressablesLoader : MonoBehaviour
|
||||
}
|
||||
|
||||
string materialName = terrain.materialTemplate != null ? terrain.materialTemplate.name : "<none>";
|
||||
string shaderName = terrain.materialTemplate != null && terrain.materialTemplate.shader != null
|
||||
? terrain.materialTemplate.shader.name
|
||||
: "<none>";
|
||||
bool shaderSupported = terrain.materialTemplate != null &&
|
||||
terrain.materialTemplate.shader != null &&
|
||||
terrain.materialTemplate.shader.isSupported;
|
||||
Bounds localBounds = td.bounds;
|
||||
Vector3 worldCenter = terrain.GetPosition() + localBounds.center;
|
||||
Vector3 extents = localBounds.extents;
|
||||
Debug.Log(
|
||||
$"[GeoTileAddressablesLoader] Tile {tileKey}: terrain ok, " +
|
||||
$"drawHeightmap={terrain.drawHeightmap}, layers={layerCount}, " +
|
||||
$"hasDiffuse={hasDiffuse}, diffuse={diffuseName}, material={materialName}");
|
||||
$"enabled={terrain.enabled}, drawHeightmap={terrain.drawHeightmap}, " +
|
||||
$"layers={layerCount}, hasDiffuse={hasDiffuse}, diffuse={diffuseName}, " +
|
||||
$"material={materialName}, shader={shaderName}, shaderSupported={shaderSupported}, " +
|
||||
$"worldCenter={FormatVec3(worldCenter)}, extents={FormatVec3(extents)}, " +
|
||||
$"rootPos={FormatVec3(instance.transform.position)}");
|
||||
}
|
||||
|
||||
private void RemoveEmbeddedBuildings(GameObject tileInstance, string tileKey)
|
||||
@@ -679,4 +696,24 @@ public class GeoTileAddressablesLoader : MonoBehaviour
|
||||
if (verboseLogging)
|
||||
Debug.Log($"[GeoTileAddressablesLoader] {message}");
|
||||
}
|
||||
|
||||
private void LogRuntimeRenderState()
|
||||
{
|
||||
var rp = GraphicsSettings.currentRenderPipeline;
|
||||
string rpName = rp != null ? $"{rp.name} ({rp.GetType().Name})" : "BuiltInRenderPipeline";
|
||||
int qualityIndex = QualitySettings.GetQualityLevel();
|
||||
string qualityName = qualityIndex >= 0 && qualityIndex < QualitySettings.names.Length
|
||||
? QualitySettings.names[qualityIndex]
|
||||
: "<unknown>";
|
||||
string cameraName = Camera.main != null ? Camera.main.name : "<none>";
|
||||
|
||||
Debug.Log(
|
||||
$"[GeoTileAddressablesLoader] RenderState: quality={qualityIndex}:{qualityName}, " +
|
||||
$"renderPipeline={rpName}, mainCamera={cameraName}");
|
||||
}
|
||||
|
||||
private static string FormatVec3(Vector3 v)
|
||||
{
|
||||
return $"({v.x:F2},{v.y:F2},{v.z:F2})";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user