generated from Basemash_UE/UE_Template
Initial Commit
This commit is contained in:
parent
910d1e3133
commit
658e69962b
1413 changed files with 6375 additions and 0 deletions
242
UE5_BP_to_CPP_Packaging_Guide.md
Normal file
242
UE5_BP_to_CPP_Packaging_Guide.md
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
# UE5 Blueprint-to-C++ Project Conversion & Packaging Fix Guide
|
||||
|
||||
## Problem
|
||||
|
||||
When you copy an Unreal Engine 5 Blueprint-only project to a new machine, "Package Project" does nothing -- no error in the UI, no output. The log shows:
|
||||
|
||||
```
|
||||
LogProjectPackagingSettings: UProjectPackagingSettings FindBestTargetInfo for '' resulted in null FTargetInfo*.
|
||||
Listing targets that were searched:
|
||||
End of target list.
|
||||
```
|
||||
|
||||
This happens because:
|
||||
1. The project has no `Source/` directory (BP-only projects auto-generate source in `Intermediate/Source/` during packaging)
|
||||
2. Stale configs from the original machine override local settings
|
||||
3. The editor can't discover build targets without compiled `.target` metadata files
|
||||
|
||||
## Step-by-Step Fix
|
||||
|
||||
### 1. Add Modules to .uproject
|
||||
|
||||
The `.uproject` file MUST declare a Modules section. Without it, the editor won't look for `.target` files in `Binaries/` and the target list will always be empty.
|
||||
|
||||
Add this before the `"Plugins"` array:
|
||||
|
||||
```json
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"EngineAssociation": "5.7",
|
||||
"Modules": [
|
||||
{
|
||||
"Name": "YourProjectName",
|
||||
"Type": "Runtime",
|
||||
"LoadingPhase": "Default"
|
||||
}
|
||||
],
|
||||
"Plugins": [
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
> **Critical:** Without this section, even if `.target` files exist in `Binaries/`, the editor's `FindBestTargetInfo` will return an empty target list.
|
||||
|
||||
### 2. Create Source/ Directory
|
||||
|
||||
Create the following structure at the project root:
|
||||
|
||||
```
|
||||
Source/
|
||||
YourProjectName.Target.cs (Game target)
|
||||
YourProjectNameEditor.Target.cs (Editor target)
|
||||
YourProjectName/
|
||||
YourProjectName.Build.cs (Module build rules)
|
||||
YourProjectName.cpp (Module implementation)
|
||||
```
|
||||
|
||||
**YourProjectName.Target.cs:**
|
||||
```csharp
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class YourProjectNameTarget : TargetRules
|
||||
{
|
||||
public YourProjectNameTarget(TargetInfo Target) : base(Target)
|
||||
{
|
||||
DefaultBuildSettings = BuildSettingsVersion.Latest;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
|
||||
Type = TargetType.Game;
|
||||
ExtraModuleNames.Add("YourProjectName");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**YourProjectNameEditor.Target.cs:**
|
||||
```csharp
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class YourProjectNameEditorTarget : TargetRules
|
||||
{
|
||||
public YourProjectNameEditorTarget(TargetInfo Target) : base(Target)
|
||||
{
|
||||
DefaultBuildSettings = BuildSettingsVersion.Latest;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
|
||||
Type = TargetType.Editor;
|
||||
ExtraModuleNames.Add("YourProjectName");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**YourProjectName/YourProjectName.Build.cs:**
|
||||
```csharp
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class YourProjectName : ModuleRules
|
||||
{
|
||||
public YourProjectName(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
PrivateDependencyModuleNames.Add("Core");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**YourProjectName/YourProjectName.cpp:**
|
||||
```cpp
|
||||
#include "CoreTypes.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultModuleImpl, YourProjectName, "YourProjectName");
|
||||
```
|
||||
|
||||
### 3. Build Both Targets from Command Line
|
||||
|
||||
Close the editor, then build from terminal:
|
||||
|
||||
```batch
|
||||
:: Build Editor target (needed to open the project)
|
||||
"C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat" YourProjectNameEditor Win64 Development "C:\Path\To\YourProject.uproject" -WaitMutex
|
||||
|
||||
:: Build Game target (needed for packaging -- THIS IS THE ONE PEOPLE FORGET)
|
||||
"C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat" YourProjectName Win64 Shipping "C:\Path\To\YourProject.uproject" -WaitMutex
|
||||
```
|
||||
|
||||
> **Critical:** You must build BOTH targets. The Editor build creates `Simulore_TirsovaEditor.target`, and the Game build creates `Simulore_Tirsova-Win64-Shipping.target`. The packaging system only looks for Game-type targets. If you only build the Editor target, the target list will still be empty.
|
||||
|
||||
### 4. Clean Stale Data from Copied Project
|
||||
|
||||
When a project is copied from another machine, these directories contain stale/incompatible data:
|
||||
|
||||
| Directory | Safe to delete | Regenerated by |
|
||||
|---|---|---|
|
||||
| `Intermediate/` | Yes | Editor on startup |
|
||||
| `Binaries/` | Yes | Build step above |
|
||||
| `DerivedDataCache/` | Yes | Editor on startup |
|
||||
| `Saved/StagedBuilds/` | Yes | Packaging process |
|
||||
| `Saved/Cooked/` | Yes | Cooking process |
|
||||
| `Saved/Crashes/` | Yes | Not regenerated (just old logs) |
|
||||
| `Saved/Temp/` | Yes | Editor on startup |
|
||||
|
||||
**Never delete:** `Config/`, `Content/`, `Source/`, `.uproject`, `Saved/Config/` (fix it instead)
|
||||
|
||||
### 5. Fix Hardcoded Paths (THE SILENT KILLER)
|
||||
|
||||
Copied projects contain paths from the original machine in multiple locations. Check ALL of these:
|
||||
|
||||
#### 5a. Config/DefaultGame.ini
|
||||
|
||||
```ini
|
||||
[/Script/UnrealEd.ProjectPackagingSettings]
|
||||
BuildTarget=YourProjectName
|
||||
StagingDirectory=(Path="") ; <-- was hardcoded to other user's Desktop
|
||||
```
|
||||
|
||||
#### 5b. Saved/Config/WindowsEditor/Game.ini (HIGHEST PRIORITY -- overrides DefaultGame.ini!)
|
||||
|
||||
This is the one that actually matters for packaging. The editor reads this file, not DefaultGame.ini:
|
||||
|
||||
```ini
|
||||
[/Script/DeveloperToolSettings.PlatformsMenuSettings]
|
||||
StagingDirectory=(Path="") ; <-- fix this
|
||||
CookBuildTarget=YourProjectName ; <-- was empty
|
||||
PackageBuildTarget=YourProjectName ; <-- was empty (ROOT CAUSE of "no targets")
|
||||
```
|
||||
|
||||
> **This was the hardest bug to find.** `DefaultGame.ini` has `BuildTarget=YourProjectName` but the editor actually reads `PackageBuildTarget` from `Saved/Config/WindowsEditor/Game.ini`, which has higher priority. If this is empty, the editor passes an empty string to `FindBestTargetInfo`.
|
||||
|
||||
#### 5c. Saved/Config/WindowsEditor/EditorPerProjectUserSettings.ini
|
||||
|
||||
Search for and fix any paths referencing other machines:
|
||||
```ini
|
||||
SwarmIntermediateFolder= ; <-- was C:/Users/OtherUser/...
|
||||
LastExecutedLaunchDevice= ; <-- was Windows@OTHER-PC
|
||||
LastExecutedLaunchName= ; <-- was OTHER-PC
|
||||
```
|
||||
|
||||
#### Quick way to find all stale paths:
|
||||
```bash
|
||||
grep -rn "C:/Users/" Config/ Saved/Config/ --include="*.ini" | grep -v "prime"
|
||||
```
|
||||
Replace `prime` with the current username.
|
||||
|
||||
## UE5 Config Priority System
|
||||
|
||||
Understanding this prevents hours of debugging:
|
||||
|
||||
| Priority | Source | Hex |
|
||||
|---|---|---|
|
||||
| 1 (lowest) | Constructor defaults | 0x00 |
|
||||
| 2 | Scalability (BaseScalability.ini tiers) | 0x01 |
|
||||
| 3 | GameUserSettings (in-game quality menu) | 0x02 |
|
||||
| 4 | ProjectSettings (`[/Script/Engine.RendererSettings]`) | 0x03 |
|
||||
| 5 | **`[SystemSettings]` and `[ConsoleVariables]` in DefaultEngine.ini** | 0x04 |
|
||||
| 6 | Device Profiles | 0x05 |
|
||||
| 7 | Standalone ConsoleVariables.ini (NOT loaded in Shipping!) | 0x06 |
|
||||
| 8 | Command line | 0x07 |
|
||||
| 9 | C++ code Set() | 0x08 |
|
||||
| 10 (highest) | In-game console (~) | 0x09 |
|
||||
|
||||
### Where to put rendering overrides:
|
||||
|
||||
- **`[/Script/Engine.RendererSettings]`** -- Project-level feature toggles (Lumen on/off, RayTracing on/off, VSM on/off). These affect shader compilation.
|
||||
- **`[SystemSettings]`** -- Runtime quality overrides that must survive scalability and device profile changes. Use this for forced quality settings in packaged builds.
|
||||
- **`[ConsoleVariables]`** -- Same priority as SystemSettings. Good for non-rendering cvars (shader pipeline cache, etc).
|
||||
- **`DefaultGameUserSettings.ini` `[ScalabilityGroups]`** -- Default scalability levels for first-time users. Gets overridden by hardware auto-detect on first run.
|
||||
|
||||
### Scalability override gotcha:
|
||||
|
||||
If you set `sg.ShadowQuality=3` in `[ScalabilityGroups]` AND `r.Shadow.MaxResolution=512` in `[SystemSettings]`, the scalability system will apply its shadow preset values first, then `[SystemSettings]` overrides specific cvars. Your individual settings win because they have higher priority.
|
||||
|
||||
**However:** Device Profiles (priority 0x05) can override `[SystemSettings]` (priority 0x04). If you see cvars being overridden, check `Saved/Config/WindowsEditor/` for device profile configs. The WindowsEditor device profile commonly overrides shadow and scalability settings.
|
||||
|
||||
## Packaging from Command Line (Bypass Editor UI)
|
||||
|
||||
If the editor UI still refuses to package, use RunUAT directly:
|
||||
|
||||
```batch
|
||||
"C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun ^
|
||||
-project="C:\Path\To\YourProject.uproject" ^
|
||||
-platform=Win64 ^
|
||||
-clientconfig=Shipping ^
|
||||
-cook -build -stage -package -pak ^
|
||||
-prereqs -compressed ^
|
||||
-target=YourProjectName ^
|
||||
-unrealexe="C:\Program Files\Epic Games\UE_5.7\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"
|
||||
```
|
||||
|
||||
This bypasses the editor's target discovery entirely and invokes UnrealBuildTool + cooker directly.
|
||||
|
||||
## Checklist Summary
|
||||
|
||||
When transferring a BP-only UE5 project to a new machine:
|
||||
|
||||
- [ ] Add `"Modules"` section to `.uproject`
|
||||
- [ ] Create `Source/` with Target.cs, Build.cs, and .cpp files
|
||||
- [ ] Build Editor target from command line
|
||||
- [ ] Build Game target (Shipping) from command line
|
||||
- [ ] Delete `Intermediate/`, `Binaries/` (before building), `DerivedDataCache/`, `Saved/StagedBuilds/`, `Saved/Cooked/`
|
||||
- [ ] Fix `Config/DefaultGame.ini` -- `BuildTarget`, `StagingDirectory`
|
||||
- [ ] Fix `Saved/Config/WindowsEditor/Game.ini` -- `PackageBuildTarget`, `CookBuildTarget`, `StagingDirectory`
|
||||
- [ ] Fix `Saved/Config/WindowsEditor/EditorPerProjectUserSettings.ini` -- remove other machine's paths
|
||||
- [ ] Grep all .ini files for hardcoded paths from other machines
|
||||
- [ ] Open editor, verify Platforms > Windows > Package Project works
|
||||
Loading…
Add table
Add a link
Reference in a new issue