@uepm/example-plugin 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ExamplePlugin.uplugin +24 -0
- package/README.md +90 -0
- package/Resources/Icon128.png +3 -0
- package/Source/ExamplePlugin/ExamplePlugin.Build.cs +42 -0
- package/Source/ExamplePlugin/Private/ExamplePlugin.cpp +20 -0
- package/Source/ExamplePlugin/Public/ExamplePlugin.h +13 -0
- package/package.json +31 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"FileVersion": 3,
|
|
3
|
+
"Version": 1,
|
|
4
|
+
"VersionName": "1.0.0",
|
|
5
|
+
"FriendlyName": "Example Plugin",
|
|
6
|
+
"Description": "An example Unreal Engine plugin demonstrating NPM distribution pattern",
|
|
7
|
+
"Category": "Other",
|
|
8
|
+
"CreatedBy": "UEPM",
|
|
9
|
+
"CreatedByURL": "https://github.com/uepm/uepm",
|
|
10
|
+
"DocsURL": "",
|
|
11
|
+
"MarketplaceURL": "",
|
|
12
|
+
"SupportURL": "",
|
|
13
|
+
"CanContainContent": true,
|
|
14
|
+
"IsBetaVersion": false,
|
|
15
|
+
"IsExperimentalVersion": false,
|
|
16
|
+
"Installed": false,
|
|
17
|
+
"Modules": [
|
|
18
|
+
{
|
|
19
|
+
"Name": "ExamplePlugin",
|
|
20
|
+
"Type": "Runtime",
|
|
21
|
+
"LoadingPhase": "Default"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @uepm/example-plugin
|
|
2
|
+
|
|
3
|
+
Example Unreal Engine plugin distributed via NPM, demonstrating the UEPM (Unreal Engine Package Manager) workflow.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @uepm/example-plugin
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
Your Unreal Engine project must be initialized for UEPM:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx @uepm/init
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What's Included
|
|
20
|
+
|
|
21
|
+
This plugin demonstrates:
|
|
22
|
+
|
|
23
|
+
- **Basic plugin structure** - Standard Unreal Engine plugin layout
|
|
24
|
+
- **NPM distribution** - Plugin distributed via NPM registry
|
|
25
|
+
- **Engine compatibility** - Semver-based engine version requirements
|
|
26
|
+
- **C++ module** - Simple module with logging functionality
|
|
27
|
+
- **Plugin descriptor** - Proper .uplugin file configuration
|
|
28
|
+
|
|
29
|
+
## Plugin Structure
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
@uepm/example-plugin/
|
|
33
|
+
├── ExamplePlugin.uplugin # Plugin descriptor
|
|
34
|
+
├── package.json # NPM package configuration
|
|
35
|
+
├── Source/ # C++ source code
|
|
36
|
+
│ └── ExamplePlugin/
|
|
37
|
+
│ ├── Private/
|
|
38
|
+
│ │ ├── ExamplePlugin.cpp
|
|
39
|
+
│ │ └── ExamplePluginModule.cpp
|
|
40
|
+
│ ├── Public/
|
|
41
|
+
│ │ ├── ExamplePlugin.h
|
|
42
|
+
│ │ └── ExamplePluginModule.h
|
|
43
|
+
│ └── ExamplePlugin.Build.cs
|
|
44
|
+
├── Resources/ # Plugin resources
|
|
45
|
+
│ └── Icon128.png
|
|
46
|
+
└── README.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Engine Compatibility
|
|
50
|
+
|
|
51
|
+
- **Unreal Engine**: 5.0.0 or later (< 6.0.0)
|
|
52
|
+
- **Platforms**: All platforms supported by Unreal Engine
|
|
53
|
+
|
|
54
|
+
## Usage in Unreal Engine
|
|
55
|
+
|
|
56
|
+
1. Install the plugin via NPM
|
|
57
|
+
2. Open your project in Unreal Engine
|
|
58
|
+
3. Go to **Edit > Plugins**
|
|
59
|
+
4. Find "Example Plugin" in the list
|
|
60
|
+
5. Enable the plugin
|
|
61
|
+
6. Restart the editor when prompted
|
|
62
|
+
|
|
63
|
+
The plugin will log a message when loaded:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
LogExamplePlugin: Example Plugin has been loaded!
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Development
|
|
70
|
+
|
|
71
|
+
This plugin serves as a template for creating your own NPM-distributed Unreal Engine plugins. Key features:
|
|
72
|
+
|
|
73
|
+
- **Proper package.json** with `unreal.engineVersion` field
|
|
74
|
+
- **Standard plugin structure** following Unreal Engine conventions
|
|
75
|
+
- **Build configuration** with proper module dependencies
|
|
76
|
+
- **NPM publishing** ready with correct file inclusions
|
|
77
|
+
|
|
78
|
+
## Creating Your Own Plugin
|
|
79
|
+
|
|
80
|
+
Use this plugin as a starting point:
|
|
81
|
+
|
|
82
|
+
1. Copy the plugin structure
|
|
83
|
+
2. Rename files and classes
|
|
84
|
+
3. Update package.json with your plugin details
|
|
85
|
+
4. Implement your plugin functionality
|
|
86
|
+
5. Publish to NPM
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
using UnrealBuildTool;
|
|
2
|
+
|
|
3
|
+
public class ExamplePlugin : ModuleRules
|
|
4
|
+
{
|
|
5
|
+
public ExamplePlugin(ReadOnlyTargetRules Target) : base(Target)
|
|
6
|
+
{
|
|
7
|
+
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
|
8
|
+
|
|
9
|
+
PublicIncludePaths.AddRange(
|
|
10
|
+
new string[] {
|
|
11
|
+
}
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
PrivateIncludePaths.AddRange(
|
|
15
|
+
new string[] {
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
PublicDependencyModuleNames.AddRange(
|
|
20
|
+
new string[]
|
|
21
|
+
{
|
|
22
|
+
"Core",
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
PrivateDependencyModuleNames.AddRange(
|
|
27
|
+
new string[]
|
|
28
|
+
{
|
|
29
|
+
"CoreUObject",
|
|
30
|
+
"Engine",
|
|
31
|
+
"Slate",
|
|
32
|
+
"SlateCore",
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
DynamicallyLoadedModuleNames.AddRange(
|
|
37
|
+
new string[]
|
|
38
|
+
{
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#include "ExamplePlugin.h"
|
|
2
|
+
|
|
3
|
+
#define LOCTEXT_NAMESPACE "FExamplePluginModule"
|
|
4
|
+
|
|
5
|
+
void FExamplePluginModule::StartupModule()
|
|
6
|
+
{
|
|
7
|
+
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
|
8
|
+
UE_LOG(LogTemp, Warning, TEXT("ExamplePlugin module has been loaded"));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
void FExamplePluginModule::ShutdownModule()
|
|
12
|
+
{
|
|
13
|
+
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
|
14
|
+
// we call this function before unloading the module.
|
|
15
|
+
UE_LOG(LogTemp, Warning, TEXT("ExamplePlugin module has been unloaded"));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#undef LOCTEXT_NAMESPACE
|
|
19
|
+
|
|
20
|
+
IMPLEMENT_MODULE(FExamplePluginModule, ExamplePlugin)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "CoreMinimal.h"
|
|
4
|
+
#include "Modules/ModuleManager.h"
|
|
5
|
+
|
|
6
|
+
class FExamplePluginModule : public IModuleInterface
|
|
7
|
+
{
|
|
8
|
+
public:
|
|
9
|
+
|
|
10
|
+
/** IModuleInterface implementation */
|
|
11
|
+
virtual void StartupModule() override;
|
|
12
|
+
virtual void ShutdownModule() override;
|
|
13
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@uepm/example-plugin",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Example Unreal Engine plugin distributed via NPM",
|
|
5
|
+
"main": "ExamplePlugin.uplugin",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "vitest --run",
|
|
8
|
+
"test:watch": "vitest"
|
|
9
|
+
},
|
|
10
|
+
"unreal": {
|
|
11
|
+
"engineVersion": ">=5.0.0 <6.0.0",
|
|
12
|
+
"pluginName": "ExamplePlugin"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"ExamplePlugin.uplugin",
|
|
16
|
+
"Source/**/*",
|
|
17
|
+
"Resources/**/*",
|
|
18
|
+
"Content/**/*"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"unreal",
|
|
22
|
+
"unreal-engine",
|
|
23
|
+
"plugin",
|
|
24
|
+
"uepm"
|
|
25
|
+
],
|
|
26
|
+
"author": "",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
}
|
|
31
|
+
}
|