Last active
July 30, 2024 15:30
-
-
Save capnslipp/349c18283f2fea316369 to your computer and use it in GitHub Desktop.
A UnityEngine.UI.Graphic subclass that provides only raycast targeting, skipping all drawing.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// @creator: Slipp Douglas Thompson | |
/// @license: Public Domain per The Unlicense. See <http://unlicense.org/>. | |
/// @purpose: A UnityEngine.UI.Graphic subclass that provides only raycast targeting, skipping all drawing. | |
/// @why: Because this functionality should be built-into Unity. | |
/// @usage: Add a `NonDrawingGraphic` component to the GameObject you want clickable, but without its own image/graphics. | |
/// @intended project path: Assets/Plugins/UnityEngine UI Extensions/NonDrawingGraphic.cs | |
/// @interwebsouce: https://gist.github.com/capnslipp/349c18283f2fea316369 | |
using UnityEngine; | |
using UnityEngine.UI; | |
/// A concrete subclass of the Unity UI `Graphic` class that just skips drawing. | |
/// Useful for providing a raycast target without actually drawing anything. | |
public class NonDrawingGraphic : Graphic | |
{ | |
public override void SetMaterialDirty() { return; } | |
public override void SetVerticesDirty() { return; } | |
/// Probably not necessary since the chain of calls `Rebuild()`->`UpdateGeometry()`->`DoMeshGeneration()`->`OnPopulateMesh()` won't happen; so here really just as a fail-safe. | |
protected override void OnPopulateMesh(VertexHelper vh) { | |
vh.Clear(); | |
return; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// @creator: Slipp Douglas Thompson | |
/// @license: Public Domain per The Unlicense. See <http://unlicense.org/>. | |
/// @purpose: Slimmed-down Inspector UI for `NonDrawingGraphic` class. | |
/// @why: Because this functionality should be built-into Unity. | |
/// @usage: Add a `NonDrawingGraphic` component to the GameObject you want clickable, but without its own image/graphics. | |
/// @intended project path: Assets/Plugins/Editor/UnityEngine UI Extensions/NonDrawingGraphicEditor.cs | |
/// @interwebsouce: https://gist.github.com/capnslipp/349c18283f2fea316369 | |
using UnityEngine; | |
using UnityEditor; | |
using UnityEditor.UI; | |
[CanEditMultipleObjects, CustomEditor(typeof(NonDrawingGraphic), false)] | |
public class NonDrawingGraphicEditor : GraphicEditor | |
{ | |
public override void OnInspectorGUI () | |
{ | |
base.serializedObject.Update(); | |
EditorGUILayout.PropertyField(base.m_Script, new GUILayoutOption[0]); | |
// skipping AppearanceControlsGUI | |
base.RaycastControlsGUI(); | |
base.serializedObject.ApplyModifiedProperties(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
perfecto.