A Practical Studio Standard for Clean, Scalable Projects
A practical naming convention for Unreal Engine projects, covering project names, content folders, maps, Blueprints, widgets, input actions, data assets, modules, and plugins. The goal is simple: keep your project clean, searchable, and scalable before asset chaos takes over.
A good naming convention is not glamorous, but it matters.
In Unreal Engine projects, poor naming creates friction fast. Assets become hard to find, folders turn into junk drawers, and the project starts to feel bigger and messier than it really is. A clear naming standard fixes that. It helps you move faster, reduces confusion, and makes the project easier to maintain as it grows.
If you are working on a large team, the naming conventions and project structure have likely already been defined and established.
However, if you are a solo indie developer, it is worth defining your own style early in the project. A clear standard can help keep the project organized, consistent, and easier to maintain as it grows.
What follows is my own practical naming convention for Unreal Engine. It is not meant to be bloated or academic. It is meant to be used.
At the end of the article, I also included useful resources.
Why a naming convention matters
A naming convention does a few simple but important things:
- makes assets easier to find
- reduces duplicate or ambiguous names
- keeps folders readable
- helps separate your own assets from template or third-party content
- makes Blueprints and code easier to understand
- keeps the project from turning into a mess over time
The goal is not perfection. The goal is consistency.
Core rules
These rules should apply across the entire project:
- Use PascalCase
- Do not use spaces
- Do not use hyphens
- Do not start names with numbers
- Keep names short but descriptive
- Use asset-type prefixes consistently
- Avoid vague names like
NewBlueprint,Widget1,TestAsset, orFinal_Final
A simple general pattern is:
Prefix_Name_Descriptor_Variant
Examples:
BP_PDPlayerCharacterWBP_MainMenuDA_PlayerDefaultsL_Dev_Gym
Not every asset needs every part of that formula. Most names should stay short.
Project name
The Unreal project name should be clean and simple.
Use this format:
GameName
Good examples:
ProjectDriftNeonOutpostSkywardRun
Avoid names like:
My Awesome GameUE57PrototypeFinalCyberpunk-Project
The project name should not try to do too much. Keep it clean. Save the detail for folders and asset names.
Root content folder
All game content should live inside one root folder under Content.
Example:
Content/ProjectDrift
This keeps your game content separate from starter content, marketplace assets, and plugins. It also makes the project much easier to manage later.
Do not scatter important project assets directly under Content.
Folder structure
A feature-based folder structure usually works better than one giant folder for each technical asset type.
A solid starting structure looks like this:
Content/
ProjectDrift/
Core/
Characters/
Combat/
Interaction/
UI/
Input/
Data/
Levels/
World/
Audio/
Dev/
This is simple, readable, and scalable.
The key point is to separate real game content from temporary development content. Shipping assets should not live in the same chaos pile as experimental test assets.
Project token
For major project-specific assets and classes, it helps to use a short project token.
For a sample project called ProjectDrift, a good token would be:
PD
Examples:
BP_PDPlayerCharacterBP_PDGameModeABP_PDPlayer
This is useful because it separates your own core assets from engine templates, sample content, and marketplace packs.
Level naming
Use L_ for all maps.
Examples:
L_MainMenuL_PrologueL_HubL_M01_DocksL_Dev_GymL_Test_Combat
This keeps level naming simple and consistent.
A good rule is to make a clear distinction between:
- shipping maps
- development maps
- test maps
What you want to avoid is the usual junk:
Level1Map_NewTopDownExampleMap_Final
That kind of naming is how projects age badly.
Blueprint naming
Use clear prefixes for Blueprint asset types.
Recommended prefixes:
BP_= Blueprint classBPI_= Blueprint InterfaceBPC_= Blueprint ComponentABP_= Animation BlueprintBT_= Behavior TreeBB_= Blackboard
Examples:
BP_PDPlayerCharacterBP_PDGameModeBPI_InteractableBPC_HealthABP_PDPlayer
This keeps the asset type obvious at a glance and makes searching far easier.
Widget naming
Use WBP_ for all Widget Blueprints.
Examples:
WBP_MainMenuWBP_HUDWBP_InventoryPanelWBP_DialogueChoiceRow
Name widgets by screen or function. Do not invent creative naming schemes here. UI naming should be boring and obvious.
That is a good thing.
Input naming
For Enhanced Input, use a simple two-prefix system:
IA_= Input ActionIMC_= Input Mapping Context
Examples:
IA_MoveIA_LookIA_JumpIA_InteractIMC_DefaultIMC_UI
Name input actions by what the player is trying to do, not by the hardware being used. IA_Move is good. IA_WASDMove is not.
Data asset naming
Data assets should also follow a clean prefix structure.
Recommended prefixes:
DA_= Data AssetPDA_= Primary Data AssetDT_= Data TableST_= String TableCRV_= Curve
Examples:
DA_PlayerDefaultsPDA_Weapon_PistolDT_WeaponsST_UICRV_AimAssist
This gives you a practical way to separate configuration-style assets, authored primary content, and table-driven data.
Common asset prefixes
Here is a short reference list for common Unreal asset types:
| Asset Type | Prefix | Example |
|---|---|---|
| Level | L_ | L_MainMenu |
| Blueprint | BP_ | BP_PDPlayerCharacter |
| Blueprint Interface | BPI_ | BPI_Interactable |
| Blueprint Component | BPC_ | BPC_Health |
| Animation Blueprint | ABP_ | ABP_PDPlayer |
| Widget Blueprint | WBP_ | WBP_MainMenu |
| Input Action | IA_ | IA_Move |
| Input Mapping Context | IMC_ | IMC_Default |
| Data Asset | DA_ | DA_PlayerDefaults |
| Primary Data Asset | PDA_ | PDA_Weapon_Pistol |
| Data Table | DT_ | DT_Weapons |
| Material | M_ | M_Master_Surface |
| Material Instance | MI_ | MI_PlayerArmor_Black |
| Static Mesh | SM_ | SM_Crate01 |
| Skeletal Mesh | SK_ | SK_Player |
| Texture | T_ | T_PlayerArmor_D |
| Sound Effect | SFX_ | SFX_DoorOpen |
| Music | MUS_ | MUS_MainMenu |
| Niagara System | NS_ | NS_BulletImpact |
| Animation Sequence | A_ | A_Player_Run_Fwd |
| Montage | MTG_ | MTG_Player_MeleeLight |
You do not need to make this more complicated than it is.
Modules
If you are using C++, keep module names clean and aligned with folder names.
Recommended structure for the sample project:
ProjectDriftProjectDriftEditor
Example:
Source/
ProjectDrift/
ProjectDriftEditor/
Do not split into many modules too early. A small project does not need a grand architecture diagram pretending to be a large studio pipeline.
Keep it simple until complexity forces change.
Plugins
Plugins should also have clean, readable names.
Examples:
PDCombatPDDialoguePDTools
For internal plugins, using the project token helps avoid collisions and makes ownership obvious.
As with the rest of the naming system, the point is clarity.
Example naming stack
Here is what a consistent project stack might look like for ProjectDrift.
Project
ProjectDrift
Root content folder
Content/ProjectDrift
Modules
ProjectDriftProjectDriftEditor
Plugins
PDCombatPDDialoguePDTools
Maps
L_MainMenuL_Dev_GymL_Test_Combat
Core Blueprints
BP_PDGameModeBP_PDPlayerControllerBP_PDPlayerCharacter
UI
WBP_MainMenuWBP_HUD
Input
IA_MoveIA_LookIMC_Default
Data
DA_PlayerDefaultsPDA_Weapon_PistolDT_Weapons
This is enough structure to keep the project sane without becoming bureaucratic.
Final thoughts
A naming convention is not exciting, but it is one of those things that quietly affects everything.
When names are clear, the whole project feels easier to work in. When names are sloppy, every task becomes a little more annoying than it should be. That frustration adds up.
The best naming convention is not the most elaborate one. It is the one your studio will actually follow.
For Unreal Engine 5.7, that usually means one clean project name, one root content folder, consistent prefixes, and a structure that separates real game content from temporary junk. Keep it clear. Keep it consistent. Do not overcomplicate it.
