72 lines
2.0 KiB
C#
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
|
|
}
|
|
}
|
|
}
|