Unreal seems to be quite sensitive to the File Structure. So we need to evade refactoring as much as possible and get it right from the get go!
Note that moving files around (remember to fix up redirectors 🙂) is possible. But we wanna avoid it.
For me the best approach - based on my past experience - is a mix: “Featuer Based with Content Grouping”
We try a feature based approach as much as possible, but sometimes we would have a folder, e.g.: World/Animals/Rabbit/ that contains a bunch of files of the same type, e.g. textures, which then are grouped into a “Textures” folder (Content grouping)
An example Unreal folder structure could look like this:
Content/
_Essentials/
| FlowNodesLibrary/...
| MasterMaterials/...
_Features/
| Core/...
| Characters/...
| World/
| | Environment/...
| | Structures/...
| | Animals/...
| | Lv00_SomeLevelname/...
| | Lv01_SomeLevelname/
| | | Collectables/...
| | | Environment/...
| | | Sequences/...
We have a _Essentials folder, for things that get reused a lot and don’t belong to a specific feature.
We prefix our main folders with _ so they are always at the top, no matter what other assets create in terms of folders.
A good starting point can be found here: https://github.com/Allar/ue5-style-guide/tree/v2
it somewhat matches what is done in many projects and follows good conventions. The Prefixes result in an easy searching for assets
Logicially it is completely wrong, though :D
(maybe i find time to explain that 🤪)
(WIP Explanation) The idea behind the file naming is that you can search quickly for assets…
… but in most fields in unreal you already have a filter of assets according to the target type of that field, so now all your materials are prefixed with M_ which gives no advantage in a materials field.
… filtering would work as-well with suffixes.
… in mixed folders, this kills grouping of related assets and groups by type instead.
So a folder Animals/ containing SK_Rabbit, SK_Deer, M_Rabbit, M_Deer is sorted due to the prefixes, instead of the names. making it harder to pick all rabbit stuff at once. If i would need to pick all the Materials, unreal allows to filter for that in the ContentBrowser anyways.
There is no extra need of creating a Blueprint (aka Prefab) out of a StaticMesh. You can just use the static mesh directly. Except!