/// <summary> /// Destroys the prioritizable mesh renderer. /// </summary> public static void DestroyInstance() { var inst = Instance; if (inst != null) { Util.KDestroyGameObject(inst.gameObject); } Instance = null; }
/// <summary> /// Creates a mesh renderer object for the priority overlay. /// </summary> /// <param name="targetMesh">The mesh to render.</param> /// <param name="shader">The shader to use for rendering.</param> internal static void CreateInstance(Mesh targetMesh, Material shader) { var game = Game.Instance; if (game == null) { throw new ArgumentNullException(nameof(Game.Instance)); } DestroyInstance(); var go = targetMesh.CreateMeshRenderer("Priority Overlay", LayerMask.NameToLayer( "UI"), shader); var t = go.transform; t.SetParent(game.transform); t.SetPositionAndRotation(Vector3.zero, Quaternion.identity); go.SetActive(false); Instance = go.AddOrGet <PrioritizableMeshRenderer>(); }
/// <summary> /// Applied after the constructor runs. /// </summary> internal static void Postfix(PrioritizableRenderer __instance) { PrioritizableMeshRenderer.CreateInstance(__instance.mesh, __instance.material); }
/// <summary> /// Applied before Cleanup runs. /// </summary> internal static void Prefix() { // Destroy the mesh renderer game object PrioritizableMeshRenderer.DestroyInstance(); }