# Creating Plugin-Based Game Code - Sept 6th - Live From Epic HQ

**URL:** <https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739>\
**Category:** Announcements\
**Tags:** unreal-engine, Event\
**Created:** [September 2, 2016, 2:14pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739 "2016-09-02T14:14:35Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![anonymous\_user\_759e5c3a](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@anonymous\_user\_759e5c3a](https://forums.unrealengine.com/u/anonymous_user_759e5c3a)\
**Post date:** [September 2, 2016, 2:14pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/1 "2016-09-02T14:14:35Z")

</div>

**WHAT**  
and will be laying the groundwork for plugin-based game code! Game systems written as plugins can be ported easily from one project to another and are a good way to build game-agnostic systems. The plugin we’re going to build will be usable as a state machine, a valuable concept for many different types of games.

**WHEN**  
Tuesday, September 6th @ 2:00PM ET [Countdown](http://www.timeanddate.com/countdown/to?iso=20160906T1400&p0=207&msg=Livestream)]

**WHERE**

**WHO**

- Sr Learning Resource Engineer
- Senior Technical Writer -

Feel free to ask any questions on the topic in the thread below, and remember, while we try to give attention to all inquiries, it’s not always possible to answer’s questions as they come up. This is especially true for off-topic requests, as it’s rather likely that we don’t have the appropriate person around to answer. Thanks for understanding!

Assets: [https://forums.unrealengine.com/showthread.php?122369](https://forums.unrealengine.com/showthread.php?122369)

Archive:

[![](https://d3kjluh73b9h9o.cloudfront.net/original/4X/9/5/b/95bf7043a7425c88083161d81ecee97cec6ca2f0.jpeg "C++ Plugin Based State Machine: Game Code | 01 | Live Training | Unreal Engine") ](https://www.youtube.com/watch?v=hr9ybCCPw9Y)

---

<div class="post-metadata">

**Author:** ![Blue\_man](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Blue\_man](https://forums.unrealengine.com/u/Blue_man)\
**Post date:** [September 2, 2016, 2:18pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/2 "2016-09-02T14:18:12Z")

</div>

This one is going to be interesting, can’t wait 🙂

---

<div class="post-metadata">

**Author:** ![Alexarg](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Alexarg](https://forums.unrealengine.com/u/Alexarg)\
**Post date:** [September 2, 2016, 4:16pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/3 "2016-09-02T16:16:41Z")

</div>

much appreciated, this will be very helpful for a lot of people, including me.

PD: the countdown link seems broken to me

---

<div class="post-metadata">

**Author:** ![Blue\_man](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Blue\_man](https://forums.unrealengine.com/u/Blue_man)\
**Post date:** [September 2, 2016, 5:42pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/4 "2016-09-02T17:42:48Z")

</div>

It seems like the timer is not working.

---

<div class="post-metadata">

**Author:** ![anonymous\_user\_eb089738](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@anonymous\_user\_eb089738](https://forums.unrealengine.com/u/anonymous_user_eb089738)\
**Post date:** [September 3, 2016, 7:01pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/5 "2016-09-03T19:01:02Z")

</div>

Will be interesting to see how you do it, considering that at the moment, a plugin can’t know anything about your game or vice versa.

And last time I’ve read the documentation, it said that it was extremely unrecommended to have plugins depend on each other.

So it’ll be interesting how you solve this.

I guess you can do a linear dependency, but that’s sort of cheating, because it only accommodates a particular case of game mechanics. When you start streaming, could you explain a bit about how you’re going to solve this issue in your plugin based game?

Thanks.

Upd: also, the countdown link doesn’t work.

---

<div class="post-metadata">

**Author:** ![Zeblote](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Zeblote](https://forums.unrealengine.com/u/Zeblote)\
**Post date:** [September 6, 2016, 12:10pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/6 "2016-09-06T12:10:24Z")

</div>

The countdown link seems to be missing a letter (how did this happen?)

> **[Livestream](https://www.timeanddate.com/countdown/to?iso=20160906T1400&p0=207&msg=Livestream)**

---

<div class="post-metadata">

**Author:** ![sylvain\_l](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@sylvain\_l](https://forums.unrealengine.com/u/sylvain_l)\
**Post date:** [September 6, 2016, 12:21pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/7 "2016-09-06T12:21:57Z")

</div>

me too quite interested to know how it work.  
will watch that one 🙂

---

<div class="post-metadata">

**Author:** ![mid\_gen](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@mid\_gen](https://forums.unrealengine.com/u/mid_gen)\
**Post date:** [September 6, 2016, 1:54pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/8 "2016-09-06T13:54:56Z")

</div>

This is exactly what I’m trying to do with my project…any of content in plugins? 🙂

---

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [September 6, 2016, 5:28pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/9 "2016-09-06T17:28:37Z")

</div>

Oh my area of interest; didn’t see this one 🙂

---

<div class="post-metadata">

**Author:** ![kamrann](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@kamrann](https://forums.unrealengine.com/u/kamrann)\
**Post date:** [September 6, 2016, 6:01pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/10 "2016-09-06T18:01:12Z")

</div>

Content in plugins is working, I know the docs still say it’s kind of unsupported but in practice it’s fine - there are plugins on the marketplace containing content.

---

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [September 6, 2016, 6:07pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/11 "2016-09-06T18:07:37Z")

</div>

Yes; I’ve been using Content folders in plugins for a while now.

---

<div class="post-metadata">

**Author:** ![kamrann](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@kamrann](https://forums.unrealengine.com/u/kamrann)\
**Post date:** [September 6, 2016, 9:13pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/12 "2016-09-06T21:13:17Z")

</div>

I’m going to repeat my questions from the stream as they got misinterpreted. Hopefully someone can help out.

1. Do engine plugins need to be explicitly disabled to not be linked?  
If someone uses one of my plugins in their project, most likely they will make use of it via types exposed to blueprint and not add any dependencies in their .build.cs files. Nonetheless, my plugin, assuming it’s enabled, will be packaged and linked into their game. So, since many engine plugins are enabled by default, does this mean that they are all getting linked to a project executable even if they are not being used? Most projects won’t use most plugins, so if this is the case it would be a pretty big unnecessary overhead.

2. Are config files in plugins coming any time soon?  
Paper2D does not have any config files, contrary to what was stated. I’m referring to the ability to provide config values that will be processed as part of the config hierarchy in projects in which the plugin is used. So for example, we could add custom collision channels or configure things like the online subsystem in the plugin, and not have to give instructions to users to modify project config files themselves to make the plugin work as intended.

3. Why are .lib files generated by the RunUAT BuildPlugin command so much bigger than those in Launcher engine plugins?  
When I package a plugin with the automation tool, I’m getting non-editor build .lib files in the region of 30MB+, whereas those that come with the engine are rarely above a couple of MB. Why is this, and is there some flag I can use to generate smaller .libs?

Thanks.

---

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [September 6, 2016, 11:12pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/13 "2016-09-06T23:12:58Z")

</div>

> [@kamrann;590801](#):
>
> I’m going to repeat my questions from the stream as they got misinterpreted. Hopefully someone can help out.
> 
> 1. Do engine plugins need to be explicitly disabled to not be linked?  
> If someone uses one of my plugins in their project, most likely they will make use of it via types exposed to blueprint and not add any dependencies in their .build.cs files. Nonetheless, my plugin, assuming it’s enabled, will be packaged and linked into their game. So, since many engine plugins are enabled by default, does this mean that they are all getting linked to a project executable even if they are not being used? Most projects won’t use most plugins, so if this is the case it would be a pretty big unnecessary overhead.

When you execute a packaged game of an empty project, the engine does this; so, yep. All the runtime engine plugins are all loaded by default:

```auto

LogPluginManager: Loaded Plugin SlateRemote, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Slate/SlateRemote/SlateRemote.uplugin
LogPluginManager: Loaded Plugin WindowsMoviePlayer, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/WindowsMoviePlayer/WindowsMoviePlayer.uplugin
LogPluginManager: Loaded Plugin SteamVR, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/Steam/SteamVR/SteamVR.uplugin
LogPluginManager: Loaded Plugin ProceduralMeshComponent, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/ProceduralMeshComponent/ProceduralMeshComponent.uplugin
LogPluginManager: Loaded Plugin OculusRift, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/OculusRift/OculusRift.uplugin
LogPluginManager: Loaded Plugin OculusLibrary, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/OculusLibrary/OculusLibrary.uplugin
LogPluginManager: Loaded Plugin OculusInput, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/OculusInput/OculusInput.uplugin
LogPluginManager: Loaded Plugin GearVR, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/GearVR/GearVR.uplugin
LogPluginManager: Loaded Plugin ExampleDeviceProfileSelector, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/ExampleDeviceProfileSelector/ExampleDeviceProfileSelector.uplugin
LogPluginManager: Loaded Plugin CustomMeshComponent, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/CustomMeshComponent/CustomMeshComponent.uplugin
LogPluginManager: Loaded Plugin CableComponent, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/CableComponent/CableComponent.uplugin
LogPluginManager: Loaded Plugin ArchVisCharacter, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Runtime/ArchVisCharacter/ArchVisCharacter.uplugin
LogPluginManager: Loaded Plugin OnlineSubsystemUtils, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Online/OnlineSubsystemUtils/OnlineSubsystemUtils.uplugin
LogPluginManager: Loaded Plugin OnlineSubsystemNull, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Online/OnlineSubsystemNull/OnlineSubsystemNull.uplugin
LogPluginManager: Loaded Plugin OnlineSubsystem, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Online/OnlineSubsystem/OnlineSubsystem.uplugin
LogPluginManager: Loaded Plugin UdpMessaging, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Messaging/UdpMessaging/UdpMessaging.uplugin
LogPluginManager: Loaded Plugin WmfMedia, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Media/WmfMedia/WmfMedia.uplugin
LogPluginManager: Loaded Plugin AvfMedia, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Media/AvfMedia/AvfMedia.uplugin
LogPluginManager: Loaded Plugin AndroidMedia, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Media/AndroidMedia/AndroidMedia.uplugin
LogPluginManager: Loaded Plugin CharacterAI, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Experimental/CharacterAI/CharacterAI.uplugin
LogPluginManager: Loaded Plugin LightPropagationVolume, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/Blendables/LightPropagationVolume/LightPropagationVolume.uplugin
LogPluginManager: Loaded Plugin Paper2D, From C:/Users/Bruno/Desktop/WindowsNoEditor/Engine/Plugins/2D/Paper2D/Paper2D.uplugin

```

---

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [September 6, 2016, 11:21pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/14 "2016-09-06T23:21:45Z")

</div>

> [@kamrann;590801](#):
>
> 1. Are config files in plugins coming any time soon?  
> Paper2D does not have any config files, contrary to what was stated. I’m referring to the ability to provide config values that will be processed as part of the config hierarchy in projects in which the plugin is used. So for example, we could add custom collision channels or configure things like the online subsystem in the plugin, and not have to give instructions to users to modify project config files themselves to make the plugin work as intended.

Here is an example of a Plugin saving settings to the INIs inside the Config folder of the project; the user don’t have to edit anything, the Plugin’s UObject will save the INI automatically.  
The plugins save to the Game Projec’s Config folder, it can’t have a Config folder for itself:

.h:

```auto

 UCLASS(ClassGroup = UserSettings, Category = "Settings", config = GameUserSettings)
 class MYGAME_API ULoginSettings : public UObject {
     GENERATED_BODY()
 public:
     UPROPERTY(Category = "Settings", EditAnywhere, BlueprintReadWrite, config)
     FString UserName;
 
     UPROPERTY(Category = "Settings", EditAnywhere, BlueprintReadWrite, config)
     FString UserPass;
 
     UFUNCTION(Category = "Settings", BlueprintCallable)
     void SaveCredentials(const FString InputName, const FString InputPass);
 
     UFUNCTION(Category = "Settings", BlueprintCallable)
     void ValidadeCredentials(const FString InputName, const FString InputPass);
 
 };

```

.cpp:

```auto

 void ULoginSettings::SaveCredentials(const FString InputName, const FString InputPass) {
 
      UserName = FMD5::HashAnsiString(*InputName);
      UserPass = FMD5::HashAnsiString(*InputPass);
 
      this->SaveConfig();
 }
 
 bool ULoginSettings::ValidadeCredentials(const FString InputName, const FString InputPass) {
 
      return (FMD5::HashAnsiString(*InputName)==UserName && FMD5::HashAnsiString(*InputPass)==UserPass);
 
 }

```

Check in project’s Config folder, the _GameUserSettings_ INI file;  
Both _UserName_ and _UserPass_ will be there right after you call _this-\>SaveConfig();_.

Reading back the value in Game code, from the settings saved by the Plugin:

```auto

 const auto &LoginSettings = GetMutableDefault<ULoginSettings>();
 
 UE_LOG(LogTemp,Warning,TEXT("%s :: %s"),*LoginSettings->UserName,*LoginSettings->UserPass);

```

---

<div class="post-metadata">

**Author:** ![kamrann](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@kamrann](https://forums.unrealengine.com/u/kamrann)\
**Post date:** [September 6, 2016, 11:36pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/15 "2016-09-06T23:36:09Z")

</div>

> [@BrUnO XaVIeR;590847](#):
>
> When you execute a packaged game of an empty project, the engine does this; so, yep. All the runtime engine plugins are all loaded by default

Thanks. Well, it figures, but am I the only one thinking it’s pretty bad that this happens by default? Surely one of the benefits of breaking some of the engine code out into plugins is that you don’t have to include a bunch of stuff your project doesn’t need, but I bet most people aren’t aware they get all this stuff by default.

I really think the plugin dependencies need some work so there is a distinction made between ‘being enabled when you open the project in the editor’ and ‘being a dependency that gets linked in’. The former shouldn’t imply the latter.

> [@BrUnO XaVIeR;590850](#):
>
> Here is an example of a Plugin saving settings to the INIs inside the Config folder of the project; the user don’t have to edit anything, the Plugin’s UObject will save the INI automatically.

Yep I know plugin objects can have their own config values, but that’s not what I was referring to. This doesn’t allow you to provide overrides for engine level config properties, which would be required for the examples I gave. Ideally, you should be able to add a PluginInput.ini, PluginEngine.ini etc, which would be processed as part of the config hierarchy, after the config files in the engine folder, but before those in a project folder. So plugins could override engine values, but project config files would have the final say.

---

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [September 6, 2016, 11:41pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/16 "2016-09-06T23:41:57Z")

</div>

Why override values when you can pick the UObject used by these engine and game INI values, change them as usual then call SaveConfig() …  
All it takes is digging into the engine source and find the name of these UObject classess then call GetMutableDefault() on them from your plugin, change the object’s variables then save it. Just like the Settings panel does in Editor.

---

<div class="post-metadata">

**Author:** ![kamrann](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@kamrann](https://forums.unrealengine.com/u/kamrann)\
**Post date:** [September 7, 2016, 12:03am UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/17 "2016-09-07T00:03:48Z")

</div>

Because that will write values out to project config files. I don’t want to trample on the project level files of people that use my plugin, I just want to override engine defaults and let the project override my values.

Besides, the whole point of using config files is that you can modify values without hard coding it into source.

---

<div class="post-metadata">

**Author:** ![ZioYuri78](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/zioyuri78/32/1194615_2.png) [@ZioYuri78](https://forums.unrealengine.com/u/ZioYuri78)\
**Post date:** [September 7, 2016, 7:00pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/18 "2016-09-07T19:00:54Z")

</div>

Probably i miss it during livestream but how to re-use a plugin in another project? I only have to compile it and copy/paste the dll? 🙂

---

<div class="post-metadata">

**Author:** ![Blue\_man](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Blue\_man](https://forums.unrealengine.com/u/Blue_man)\
**Post date:** [September 7, 2016, 7:09pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/19 "2016-09-07T19:09:32Z")

</div>

> [@ZioYuri78;591271](#):
>
> Probably i miss it during livestream but how to re-use a plugin in another project? I only have to compile it and copy/paste the dll? 🙂

Just copy and paste the plugin.

---

<div class="post-metadata">

**Author:** ![ZioYuri78](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/zioyuri78/32/1194615_2.png) [@ZioYuri78](https://forums.unrealengine.com/u/ZioYuri78)\
**Post date:** [September 8, 2016, 4:20pm UTC](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739/20 "2016-09-08T16:20:34Z")

</div>

> [@Blue man;591274](#):
>
> Just copy and paste the plugin.

And if i don’t want to share the plugin source code?

[Next page](https://forums.unrealengine.com/t/creating-plugin-based-game-code-sept-6th-live-from-epic-hq/72739.md?page=2)
