Lucent

The productivity OS for Unity: a keyboard-driven command palette for the Unity Editor.

Documentation · Version 1.1 · Editor-only, no runtime footprint

Overview

Lucent is a command palette for the Unity Editor, inspired by Raycast, Spotlight, and VS Code's Command Palette. One floating window gives you fuzzy search over Lucent commands, Unity menu items, project assets, and scene objects, plus multi-step interactive workflows, all driven from the keyboard.

Everything lives under Assets/Plugins/Lucent/Editor/ and compiles into a single editor assembly (Lucent.Editor.asmdef). Nothing ships in a build.

Requirements & installation

Copy the Lucent folder into your project's Assets/Plugins/ directory. Unity compiles the editor assembly on the next refresh. There is no further setup.

Quick start

  1. Open the palette with Double Shift, or via Tools → Lucent → Main Window.
  2. Start typing. Lucent searches its own commands, Unity menu items, and context actions for whatever is selected.
  3. Pick a result with / and press Enter to run it or start an interactive flow.

Select an asset or GameObject before opening Lucent. Context is captured on open, and contextual commands for that selection become available.

Keyboard reference

KeyAction
Double ShiftOpen the palette (default trigger)
/ Move the selection through the result list
Tab / Shift+TabJump to the next / previous result section
EnterExecute the selected result, or confirm the current step
EscStep back, then clear the captured selection, then close
/ Section-specific navigation (active once the query is 2+ characters)

The palette window

Sections

Results are grouped into sections. With an empty query you get Recents or a welcome state; while searching you get Commands and Menu Items; with a Project or Hierarchy selection captured you also get Context and Files.

Search & ranking

Queries are matched against command keywords, display names, type labels, extra search terms, Unity menu paths, and asset paths. Matches are scored (exact beats prefix beats word-boundary beats substring) and weighted by how often and how recently you have used each result. Short fragments work better than full paths.

Interactive steps

Multi-step commands ask for one thing at a time: a name, a folder, a prefab, a scene, a component type, a field, a hierarchy object, or a clipboard entry. A breadcrumb shows where you are; Enter advances and Esc goes back a step.

Selection pill

When Lucent captures a Project or Hierarchy selection, a pill appears at the right of the search field. Click it to ping the target, or dismiss it to clear the context.


Settings

Open with Tools → Lucent → Settings. Changes auto-save.

Where state is stored

Commands themselves are never persisted; they are rediscovered by reflection on every editor load.


Extending Lucent

Lucent indexes Unity menu paths automatically, so a plain [MenuItem("Tools/My Studio/Rebuild Data")] method already shows up in search. No Lucent-specific registration.

2. A one-shot command

Add a class with a [LucentCommand] attribute and a non-empty keyword. It is discovered by reflection on the next compile.

using Lucent;

[LucentCommand("Rebuild Data", "rebuild-data",
    Category = "Tools",
    Icon     = LucentIcons.SETTINGS,
    Subtitle = "Regenerate the generated data assets")]
public class RebuildDataCommand : Command
{
    protected override void OnExecute()
    {
        DataBuilder.Rebuild();
    }
}

Put your own commands in Assets/Editor/LucentCommands/, not inside Assets/Plugins/Lucent/. Lucent's assembly definition cannot reference Assembly-CSharp, so a command placed inside the package cannot see your project's scripts.

3. A multi-step command

Derive from CompositeCommand, return a list of StepCommands from BuildSteps(), and do the real work in OnComplete() once the last step confirms. Reuse the shipped steps (folder, name, prefab, scene, component type, field, hierarchy object, file, clipboard) rather than writing new UI.

4. Context filtering

Declare when a command should appear instead of checking inside OnExecute(): SelectionSourceFilter (Hierarchy / Project / None / All), FileTypeFilter, and SearchStateFilter. IsAvailable() is evaluated per frame against the current selection and query.


Command reference

Lucent ships with 130 built-in commands. Keywords are what you type in the palette.

Hierarchy 10

CommandKeywordDescription
Disable GameObjectdisablegameobjectDisable selected GameObject
Enable GameObjectenablegameobjectEnable selected GameObject
Find Missing ComponentsfindmissingcomponentsList GameObjects with missing scripts
Search Components in HierarchysearchcomponentSearch and select components across the hierarchy
Search GameObject in HierarchysearchgameobjectFind a GameObject and select it in the Hierarchy
Select All ComponentsselectallcomponentsSelect all GameObjects with a component
Select All GameObjectsselectallgameobjectsSelect all matching GameObjects in hierarchy
Set LayersetlayerSet selected GameObject layer
Set StaticsetstaticSet static flags on a GameObject
Set TagsettagSet selected GameObject tag

GameObject 1

CommandKeywordDescription
Add Prefab as ChildaddprefabInstantiate a prefab as a child of the selected GameObject

Component 11

CommandKeywordDescription
Add ComponentaddcomponentAdd a component to the selected GameObject
Assign Child ComponentassignchildcomponentWire a component field to a child
Assign ComponentassigncomponentWire a component field to a scene object
Assign PrefabassignprefabAssign a prefab to a serialized field
Assign ScriptableObjectassignscriptableobjectAssign a ScriptableObject to a serialized field
Disable ComponentdisablecomponentDisable selected components
Enable ComponentenablecomponentEnable selected components
Open ComponentopencomponentOpen a selected component script
Remove ComponentremovecomponentRemove a component from the selected GameObject
Reset ComponentresetcomponentReset a component on the selected GameObject
Set Component ValuesetcomponentvalueSet a serializable field's value on a component

Transform 12

CommandKeywordDescription
Anchor to CornersanchortocornersMove anchors to wrap the current rect
Set AnchorsetanchorSet anchor min and max
Set Anchor MaxsetanchormaxSet the upper-right anchor point
Set Anchor MinsetanchorminSet the lower-left anchor point
Set Anchor and PivotsetanchorpivotSet anchor and pivot to the same value
Set HeightsetheightSet the height of a RectTransform
Set PivotsetpivotSet the pivot point of a RectTransform
Set PositionsetpositionSet the local position of a GameObject
Set RotationsetrotationSet the local rotation in degrees
Set ScalesetscaleSet the local scale of a GameObject
Set StretchsetstretchSet stretch anchors on a RectTransform
Set WidthsetwidthSet the width of a RectTransform

Prefab 8

CommandKeywordDescription
Apply OverrideapplyoverrideApply prefab instance overrides to asset
Exit Prefab ModeexitprefabmodeExit Prefab Mode and return to the main stage
Open In ContextopenincontextEdit prefab in scene context
Open In IsolationopeninisolationEdit prefab in isolation
Open PrefabopenprefabBrowse and open a prefab asset
Prefab Mode: BackprefabbackGo back to the previous Prefab Mode stage
Prefab Mode: ForwardprefabforwardGo forward to the next Prefab Mode stage
Revert OverriderevertoverrideRevert prefab instance overrides

ScriptableObject 1

CommandKeywordDescription
Set ScriptableObject ValuesetscriptableobjectvalueSet a serializable field's value on a ScriptableObject

Project 28

CommandKeywordDescription
Create FilecreatefileCreate a new file with any extension
Create FoldercreatefolderCreate a new folder in the project
Create ScenecreatesceneCreate a new Unity scene
Create ScriptcreatescriptCreate a new MonoBehaviour script
Create ScriptableObjectcreatescriptableobjectCreate a new ScriptableObject asset
Find ScriptableObjects by TypefindscriptableobjectsbytypeList ScriptableObject assets by type
MovemoveMove the selected asset to a folder
OpenopenOpen the selected asset
Open SceneopensceneBrowse and open a scene asset
Open ScriptopenscriptBrowse and open a script asset
Open ScriptableObjectopenscriptableobjectBrowse and open a ScriptableObject asset
ReimportreimportReimport the selected file
Reveal in File BrowserrevealfileReveal the selected asset in the system file browser
Reveal in FinderrevealfileReveal the selected asset in Finder (macOS)
Search Animation in ProjectsearchanimationFind an animation and reveal it in the Project window
Search Audio in ProjectsearchaudioFind an audio clip and reveal it in the Project window
Search File in ProjectsearchfileFind a file and reveal it in the Project window
Search Folder in ProjectsearchfolderFind a folder and reveal it in the Project window
Search Font in ProjectsearchfontFind a font and reveal it in the Project window
Search Material in ProjectsearchmaterialFind a material and reveal it in the Project window
Search Mesh in ProjectsearchmeshFind a mesh and reveal it in the Project window
Search Prefab in ProjectsearchprefabFind a prefab and reveal it in the Project window
Search Scene in ProjectsearchsceneFind a scene and reveal it in the Project window
Search Script in ProjectsearchscriptFind a script and reveal it in the Project window
Search ScriptableObject in ProjectsearchscriptableobjectFind a ScriptableObject and reveal it in the Project window
Search Shader in ProjectsearchshaderFind a shader and reveal it in the Project window
Search Texture in ProjectsearchtextureFind a texture and reveal it in the Project window
Show in ExplorerrevealfileReveal the selected asset in Explorer (Windows)

Selection 2

CommandKeywordDescription
DeletedeleteDelete the selected asset or GameObject
RenamerenameRename the selected asset or GameObject

Clipboard 3

CommandKeywordDescription
Copy ComponentcopycomponentCopy a component to clipboard
Paste ComponentpastecomponentPaste a copied component
Paste From HistorypastefromhistoryPaste any item from clipboard history

Prefs 4

CommandKeywordDescription
Delete EditorPrefsdeleteeditorprefDelete an existing Unity EditorPrefs value
Delete PlayerPrefsdeleteplayerprefDelete an existing PlayerPrefs value
Set EditorPrefsseteditorprefSet or create a Unity EditorPrefs value
Set PlayerPrefssetplayerprefSet or create a PlayerPrefs value

Console 2

CommandKeywordDescription
Clear ConsoleclearconsoleClear Unity Console logs
Search ConsolesearchconsoleSearch Unity Console logs

Editor 15

CommandKeywordDescription
Discard Scene ChangesdiscardscenechangesReload the active scene without saving
Lock HierarchylockhierarchyLock the Hierarchy window
Lock InspectorlockinspectorLock the Inspector window
Lock ProjectlockprojectLock the Project window
PausepausePause play mode
PlayplayEnter play mode
Quit UnityquitunityQuit the Unity Editor
Recompile ScriptsrecompileRequest Unity script compilation
Refresh Asset DatabaserefreshassetsRefresh Unity's Asset Database
Set Time ScalesettimescaleSet Unity time scale
StopstopExit play mode
Toggle Inspector Debug ModetoggleinspectordebugSwitch the Inspector between Normal and Debug mode
Unlock HierarchyunlockhierarchyUnlock the Hierarchy window
Unlock InspectorunlockinspectorUnlock the Inspector window
Unlock ProjectunlockprojectUnlock the Project window

Settings 32

CommandKeywordDescription
Show Asset Pipeline PreferenceswindowassetpipelineUnity Asset Pipeline Preferences
Show Audio SettingswindowaudiosettingsUnity Audio Settings Window
Show Build ProfileswindowbuildprofilesUnity Build Profiles Window
Show Burst AOT SettingswindowburstsettingsUnity Burst AOT Settings Window
Show Editor ColorswindoweditorcolorsUnity Colors Preferences
Show Editor SettingswindoweditorsettingsUnity Editor Settings Window
Show External ToolswindowexternaltoolsUnity External Tools Preferences
Show GI Cache PreferenceswindowgicacheUnity GI Cache Preferences
Show Graphics SettingswindowgraphicssettingsUnity Graphics Settings Window
Show Input ManagerwindowinputmanagerUnity Input Manager Window
Show Input System SettingswindowinputsystemsettingsUnity Input System Package Settings Window
Show Memory SettingswindowmemorysettingsUnity Memory Settings Window
Show Package Manager SettingswindowpackagemanagersettingsUnity Package Manager Settings Window
Show Physics 2D Settingswindowphysics2dsettingsUnity Physics 2D Settings Window
Show Physics SettingswindowphysicssettingsUnity Physics Settings Window
Show Player SettingswindowplayersettingsUnity Player Settings Window
Show PreferenceswindowpreferencesUnity Preferences Window
Show Preset ManagerwindowpresetmanagerUnity Preset Manager Window
Show Quality SettingswindowqualitysettingsUnity Quality Settings Window
Show Scene Template SettingswindowscenetemplatesettingsUnity Scene Template Settings Window
Show Scene View PreferenceswindowsceneviewprefsUnity Scene View Preferences
Show Script Execution OrderwindowscriptexecutionorderUnity Script Execution Order Window
Show Services SettingswindowservicessettingsUnity Services Settings Window
Show Shader Graph SettingswindowshadergraphsettingsUnity Shader Graph Settings Window
Show Tags and LayerswindowtagsandlayersUnity Tags and Layers Window
Show TextMesh Pro SettingswindowtextmeshprosettingsUnity TextMesh Pro Settings Window
Show Time SettingswindowtimesettingsUnity Time Settings Window
Show Timeline SettingswindowtimelinesettingsUnity Timeline Settings Window
Show UI Toolkit SettingswindowuitoolkitsettingsUnity UI Toolkit Settings Window
Show Version Control SettingswindowversioncontrolUnity Version Control Settings Window
Show Visual Scripting SettingswindowvisualscriptingsettingsUnity Visual Scripting Settings Window
Show XR Plug-in ManagementwindowxrsettingsUnity XR Plug-in Management Window

Lucent 1

CommandKeywordDescription
Show All CommandsshowallcommandsBrowse every available command

Troubleshooting

The hotkey doesn't work

Check the saved shortcut in Hotkey Settings. Modifier combinations can be swallowed by Unity, the OS, or another editor tool. Double Shift conflicts least.

A command is missing

Commands appear only when their filters match the current search state, selection source, and file type. Component commands need a Hierarchy selection; project asset actions need a Project selection.

Results change after I select something

That's intended. Lucent captures context when it opens, and the selected GameObject, folder, prefab, scene, or asset determines which commands and context actions are relevant.