aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChance Ivey <[email protected]>2020-06-24 11:54:39 -0700
committerChance Ivey <[email protected]>2020-06-24 11:54:39 -0700
commite1dafbbdcec4210f426c09afb067a1ee86fc6869 (patch)
treefee04afe862b610c3055d59208c4f37e6bc00117
parentMinor formatting updates (diff)
downloadugcexample-e1dafbbdcec4210f426c09afb067a1ee86fc6869.tar.xz
ugcexample-e1dafbbdcec4210f426c09afb067a1ee86fc6869.zip
Minor Documentation Edits.
-rw-r--r--Documentation/QuickStart.md42
-rw-r--r--README.md2
2 files changed, 22 insertions, 22 deletions
diff --git a/Documentation/QuickStart.md b/Documentation/QuickStart.md
index c88445b..c24b0c6 100644
--- a/Documentation/QuickStart.md
+++ b/Documentation/QuickStart.md
@@ -1,7 +1,7 @@
# UGC Example Quick Start
## Prerequisites
To follow along with this overview, you’ll need the following installed on your machine:
-- A source build of Unreal Engine 4.25.1 or higher (to recompile the Automation Tool project)
+- A source build of Unreal Engine 4.25.1 or higher (to recompile the AutomationTool project)
- Visual Studio 2019 Community or higher
- This project (UGCExample)
@@ -43,15 +43,15 @@ If we use play-in-editor (PIE), we will go to the **MainMenuLevel** that shows t
On the toolbar, you’ll see the two new buttons mentioned above—**Create UGC** and **Package UGC**. Let’s see how they work.
## Making a New Mod
### Creating a New Mod Plugin
-Clicking the toolbar button **Create UGC** will open a wizard that you can use to generate a new UGC package. It generates a new content-only plugin, and places it in your **Mods** directory.
+Clicking the toolbar button **Create UGC** will open a wizard that you can use to generate a new UGC package. It generates a new content-only plugin (no C++ code modules), and places it in your **Mods** directory.
-**NOTE**: In 4.25.0, mods are placed in the **Plugins** directory instead. Either upgrade to 4.25.1, or move the newly-created folder from Plugins to Mods in order for this to properly work!
+**NOTE**: In 4.25.0, mods are placed in the **Plugins** directory. We recommend upgrading to at least 4.25.1, or move the newly-created folder from Plugins to Mods in order for this to properly work!
Give it a name, add your info, then click **Create Mod**.
![image](/Documentation/Images/image34.png)
-The Content Browser view of the new Mod plugin will open, and you can add your content.
+The Content Browser view of the new Mod plugin will open, and you can add your content. You can add this folder to your favorites to more easily find it later.
![image](/Documentation/Images/image31.png)
@@ -67,7 +67,7 @@ This is pretty basic, but we are now able to find this UGC package and play this
Let’s see how to test it in the main game using PIE.
### Testing the New Mod
-When we start a PIE session, our new UGC shows up in the list of **UGC Packages**. That’s because the list is populated by plugins classified as **Mods** and located in the Mods project directory.
+Open **MainMenuLevel** if it's not already open. When we start a PIE session, our new UGC shows up in the list of **UGC Packages**. That’s because the list is populated by plugins classified as **Mods** and located in the Mods project directory.
![image](/Documentation/Images/image21.png)
@@ -85,7 +85,7 @@ The Simple UGC module has two Components that make in-game object replacement pr
This explicitly makes the SphereActor replaceable by user-generated content. In the Details panel, you’ll see a field for Compatible Replacement. This defines what type of Actor can replace it, as there may be compatibility concerns when swapping one Actor for another, and this must be set if you intend to make a Class overridable. For Robo Recall’s guns, for instance, this would be OdinGun, as most of the game called and reacted to functions or properties on OdinGun. For demonstration purposes, SphereActor just uses Actor as our Compatible Replacement base.
-Now we’ve managed to tell the game’s base class that it can be overridden by a mod, let’s make the SilverBall an override for that class.
+Now that we’ve managed to tell the game’s base class that it can be overridden by a mod, let’s make the SilverBall an override for that class.
In the same vein as adding a **MakeReplaceableActorComponent** to the original Class, let’s add a **ReplacementActorComponent** to the Class we expect to replace it when the mod is active.
@@ -107,7 +107,7 @@ If we click **Open Example Map** now, we’ll see that SilverBall has replaced S
This is an example of how to test Actor replacement in the editor before the mod is ready to ship. When everything is as desired, we can package the UGC using the second new toolbar button, **Package UGC**.
### Packaging Your New Mod
-Packaging is a one-touch operation using the Package UGC option in the toolbar. If we click the button and select our mod from the list, a directory dialog opens for choosing where to save our UGC.
+Packaging is a one-touch operation using the **Package UGC** option in the toolbar. If we click the button and select our mod from the list, a directory dialog opens for choosing where to save our UGC.
![image](/Documentation/Images/image18.png)
@@ -132,7 +132,7 @@ Run **UGCExample.exe**.
As expected, there are no UGC Packages found. Let’s add the new mod.
### Adding Your Packaged UGC to the Base Game
-Extract your packaged mod to somewhere convenient. Copy the folder containing Content and the .plugin file into a new Mods directory in the **UGCExample** game folder that you just extracted. Here’s what mine looks like:
+Extract your packaged mod to somewhere convenient. Copy the folder containing Content and the .uplugin file into a new Mods directory in the **UGCExample** game folder that you just extracted. Here’s what mine looks like:
![image](/Documentation/Images/image9.png)
@@ -158,7 +158,7 @@ The SimpleUGCEditor Editor module adds two toolbar and File menu dropdown button
![image](/Documentation/Images/image35.png)
-The other important piece of the puzzle is the custom automation tool project found in the project, **SimpleUGC.Automation**. The important file here is **PackageSimpleUGCPlugin.cs**, which contains the UAT command required to package our mods.
+The other important piece of the puzzle is the custom AutomationTool project found in the project, **SimpleUGC.Automation**. The important file here is **PackageSimpleUGCPlugin.cs**, which contains the command required to package our mods.
![image](/Documentation/Images/image13.png)
@@ -172,7 +172,7 @@ Copy the following directories from the UGC Example to the same locations in you
![image](/Documentation/Images/image26.png)
-If you went through the example above, you may need to use **Clean the Automation Tool** project after you generate project files to ensure that the build scripts get added and built after generating project files for your project.
+If you went through the example above, you may need to use **Clean the AutomationTool** project after you generate project files to ensure that the build scripts get added and built after generating project files for your project.
Alternatively, you can refactor the names in these build scripts to match your project as you’re likely going to make a number of project-specific changes by the time you ship your mod kit.
@@ -210,21 +210,21 @@ For instance, in Robo Recall, we knew that OdinGun was the super Class that all
### Handling Class Swapping
Now that an Actor knows that it can be replaced by certain types of new Actors, we need to ensure that we handle the replacement logic whenever the Actor is supposed to spawn.
-Where you spawn Actors that can be overridden instead of passing the Class straight into **SpawnActorFromClass**, call **GetOverrideForActorClass** on the UGCRegistry and pass the Class type in as the ActorClass parameter. This will return the original class if no valid overrides are registered, or the replacement class if an override has been registered.
+Where you spawn Actors that can be overridden instead of passing the Class straight into **SpawnActorFromClass**, call **GetOverrideForActorClass** on the UGCRegistry and pass the Class type in as the **ActorClass** parameter. This will return the original class if no valid overrides are registered, or the replacement class if an override has been registered.
![image](/Documentation/Images/image22.png)
### Avoiding Placed Actors
-In the effort to keep this plugin simple and avoid any low-level engine changes, it does not support replacement of Actors placed in Levels. That action would be better handled in the Level loading code instead, as it can be very expensive to tear down a bunch of instantiated Actors with Components just to recreate them in a timely manner before the player spawns into the Level.
+In the effort to keep this plugin simple and avoid any low-level engine changes, it does not support the replacement of Actors placed in Levels. That action would be better handled in the Level loading code instead, as it can be very expensive to tear down a bunch of instantiated Actors with Components just to recreate them in a timely manner before the player spawns into the Level.
-We encourage you to replace any placed Actors with spawning logic for performance reasons. In situations where you absolutely cannot spawn an Actor and it must be placed, you can do the UGCRegistry check in the Level Blueprint and handle the replacement if necessary. We had to do this for the Robo Recall boss due to an issue with loading order for cinematics.
+We encourage you to replace any placed Actors with spawning logic for performance reasons. In situations where you absolutely cannot spawn an Actor and it must be placed, you can perform the UGCRegistry check in the Level Blueprint and handle the replacement if necessary. We had to do this for the Robo Recall boss due to an issue with loading order for cinematics.
### Special Case for Player Pawn
-Since player Pawn spawning is handled by the GameMode class, we can employ the same method for Actor replacement in our GameMode Class. Overriding GetDefaultPawnClassForController allows us to manage the class replacement logic like so:
+Since player Pawn spawning is handled by the **GameMode** class, we can employ the same method for Actor replacement in our GameMode Class. Overriding **GetDefaultPawnClassForController** allows us to manage the class replacement logic like so:
![image](/Documentation/Images/image36.png)
### Add Methods to Find and Consume UGC
-You will need to add mechanisms to discover and use UGC in your game. This could appear in many forms, such as a mods menu as in Robo Recall, or systems that crawl new packages looking for new Assets of a certain type to use in existing systems.
+You will need to add mechanisms to discover and use UGC in your game. This could appear in many forms, such as a mods menu (as in Robo Recall), or systems that crawl new packages looking for new Assets of a certain type to use in existing systems.
In general, it’s important to remember that mods are just big lumps of extra content, and it is up to you, the game’s creator, to decide how it best fits into your world.
@@ -240,7 +240,7 @@ The UGC Example project has some examples of use in a mod menu, but here are som
| ApplyOverridesForActorClass | Like ApplyOverridesForActorClass, but just registers Overrides for the Actor Class passed in. |
| ClearOverrideForClass | Removes the override that is registered for the origin Class passed in. |
### Packaging UGC Setup
-Now that your game supports newly discovered packaged mods, you’ll need to prepare the editor environment for mods to be appropriately created, packaged and distributed. There are a few things needed to make this work.
+Now that your game supports newly discovered packaged mods, you’ll need to prepare the editor environment for mods to be appropriately created, packaged and distributed. There are a few things required to make this work.
#### Asset Registry from Packaged Game
Mods for packaged games require a packaged game, right?
@@ -254,24 +254,24 @@ You will need to move these to a folder in a newly created **Releases** director
![image](/Documentation/Images/image16.png)
-Best practice is to have this accounted for in your build system so that it would generate this folder and copy these over for you. It is currently hardcoded in our example as we anticipate that everyone is going to have slightly different needs and tools for this sort of thing.
+Best practice is to have this accounted for in your build system so that it would generate this folder and copy these over for you. It is currently hardcoded in our example as we anticipate that everyone is going to have slightly different needs and tools for this process.
#### Updating Packaging Scripts
This folder name is referenced in two areas in code:
- ReleaseVersion in **SimpleUGCPackager.cpp**
- ReleaseVersion in **PackageSimpleUGCPlugin.cs**
-These strings must match the name of the supported release folder for packaging to work, as the files in the directory are required for packaging the UGC. Any changes to these will require you to rebuild either project in VS. As mentioned above, ideally, these are read from an area that is generated by your build system, such as an .ini file whenever you are preparing your editor for release. We left this hardcoded here so as to not be presumptive of your setup.
+These strings must match the name of the supported release folder for packaging to work, as the files in the directory are required for packaging the UGC. Any changes to these will require you to rebuild either project in Visual Studio. As mentioned above, ideally, these are read from an area that is generated by your build system (such as an .ini file) whenever you are preparing your editor for release. We left this hardcoded here so as to not be presumptive of your setup.
-At this point, you have everything moved over and you can test. Remember to add the ReplaceableActorComponents to new Actors you want to override original content with, and set the properties as mentioned above!
+At this point, you have everything moved over and you can test. Remember to add **ReplaceableActorComponents** to new Actors you want to override original content with, and set the properties as mentioned above!
### Further Customization
Now that you’re up and running, let’s take a look at a few things you might want to customize for your game.
#### Templates
-The New Mod Wizard pulls from a Templates folder in the SimpleUGC plugin. We’ve included an empty, content-only plugin as a starting point. If you look over at the source for Robo Recall, you’ll see that we have a bunch of starting templates that have jumping-off points for creating new types of mods. You will want to account for these in the custom **IPluginWizardDefinition** in the SimpleUGCEditor module so they properly populate in the list of templates. See the Robo Recall source for a good reference on how that can be handled.
+The New Mod Wizard pulls from a Templates folder in the SimpleUGC plugin. We’ve included an empty, content-only plugin as a starting point. If you look over at the source for Robo Recall, you’ll see that we have a bunch of starting templates that have jumping-off points for creating new types of mods. You will want to account for these in the custom **IPluginWizardDefinition** in the SimpleUGCEditor module so that they properly populate in the list of templates. See the Robo Recall source for a good reference on how that can be handled.
![image](/Documentation/Images/image27.png)
#### Icons
-Toss our basic icons out and add your own to flavor up your mod editor! These are found in the Resources folder in the SimpleUGC plugin.
+Replace our basic icons out and add your own to flavor to your mod editor! These are found in the **Resources** folder in the SimpleUGC plugin.
![image](/Documentation/Images/image5.png)
diff --git a/README.md b/README.md
index dbcbb8d..f3c7719 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Loosely based on the work done for Robo Recall, It includes:
- A runtime game module for game integration
- An editor module for new toolbar buttons and commands
-- An automation tool project for packaging mods
+- An AutomationTool project for packaging mods
- An example UE4 project demonstrating all aspects working together.
Follow the [**Quick Start Guide**](Documentation/QuickStart.md) for a comprehensive look at the UGC Example project and for instructions to add mod support to your own projects.