Files
NovaFree/Scripts/Internal/Compat/InternalScript_17.cs
2025-08-02 20:11:41 +08:00

72 lines
2.0 KiB
C#

// Copyright (c) Supernova Technologies LLC
using UnityEngine;
namespace Nova.Compat
{
internal static class SceneViewUtils
{
public static bool IsInCurrentPrefabStage(GameObject gameObject)
{
#if UNITY_EDITOR
if (gameObject == null || !PrefabStageUtils.TryGetCurrentStageRoot(out GameObject root))
{
return false;
}
return gameObject.transform.IsChildOf(root.transform);
#else
return false;
#endif
}
public static bool IsInCurrentStage(GameObject gameObject)
{
#if UNITY_EDITOR
if (gameObject == null)
{
return false;
}
return UnityEditor.SceneManagement.StageUtility.GetStageHandle(gameObject) == UnityEditor.SceneManagement.StageUtility.GetCurrentStageHandle();
#else
return false;
#endif
}
public static bool IsSelectableInSceneView(GameObject gameObject)
{
#if UNITY_EDITOR
return IsVisibleInSceneView(gameObject) && !UnityEditor.SceneVisibilityManager.instance.IsPickingDisabled(gameObject);
#else
return false;
#endif
}
public static bool IsVisibleInSceneView(GameObject gameObject)
{
#if UNITY_EDITOR
return IsInCurrentStage(gameObject) && IsOnLayerRenderedBySceneCamera(gameObject) && !UnityEditor.SceneVisibilityManager.instance.IsHidden(gameObject) && gameObject.activeInHierarchy;
#else
return false;
#endif
}
public static bool IsOnLayerRenderedBySceneCamera(GameObject gameObject)
{
#if UNITY_EDITOR
UnityEditor.SceneManagement.Stage currentStage = UnityEditor.SceneManagement.StageUtility.GetCurrentStage();
if (currentStage == null)
{
return false;
}
ulong cullingMask = currentStage.GetCombinedSceneCullingMaskForCamera();
return (cullingMask & gameObject.sceneCullingMask) != 0;
#else
return false;
#endif
}
}
}