All Projects → kitelightning → LivePP

kitelightning / LivePP

Licence: MIT license
A UE4 plugin wrapper for Molecular Matter's Live++ Hot-Reloading Library

Programming Languages

C++
36643 projects - #6 most used programming language
C#
18002 projects

Projects that are alternatives of or similar to LivePP

Awesome Unreal Engine 4
UE4/UE5 Ressources Collection (Plugins, Effects, Doc, Tools, etc...)
Stars: ✭ 153 (+45.71%)
Mutual labels:  engine, unrealengine, ue4, ue4-plugin
UE4-BUIValidator
UE4 UI Texture Validator Plugin
Stars: ✭ 48 (-54.29%)
Mutual labels:  engine, unrealengine, ue4, ue4-plugin
DualSenseWindows UE4
Unreal Engine 4 port of the Windows API for the PS5 DualSense controller created at Ohjurot/DualSense-Windows
Stars: ✭ 25 (-76.19%)
Mutual labels:  unrealengine, unreal-engine, ue4, ue4-plugin
Unreal Polygonal Map Gen
An Unreal Engine 4 implementation of the Polygonal Map Generator for generating islands found at http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
Stars: ✭ 229 (+118.1%)
Mutual labels:  unrealengine, unreal-engine, ue4
Rts Community Project
Lets build an RTS Game with Unreal Engine 4!
Stars: ✭ 183 (+74.29%)
Mutual labels:  unrealengine, unreal-engine, ue4
Unrealcpp
Unreal Engine 4 C++ examples
Stars: ✭ 490 (+366.67%)
Mutual labels:  unrealengine, unreal-engine, ue4
gamedevguide
Game Development & Unreal Engine Programming Guide
Stars: ✭ 314 (+199.05%)
Mutual labels:  unrealengine, unreal-engine, ue4
UT GameEventSystem
A flexible event system in Unreal Engine 4
Stars: ✭ 33 (-68.57%)
Mutual labels:  engine, unreal-engine, ue4
Actionrpggame
Unreal Engine 4 Action RPG type game starter kit.
Stars: ✭ 773 (+636.19%)
Mutual labels:  unrealengine, unreal-engine, ue4
UE4-BYGLocalization
Simple CSV localization system for Unreal Engine 4
Stars: ✭ 54 (-48.57%)
Mutual labels:  engine, ue4, ue4-plugin
Asyncloadingscreen
Async Loading Screen is a free and open-source plugin for Unreal Engine. Async Loading Screen allows you to easily configure a Loading Screen System in the project settings, and automatically add a Loading Screen whenever you open a new level, without Level Streaming.
Stars: ✭ 155 (+47.62%)
Mutual labels:  unrealengine, unreal-engine, ue4
Ue4 Binary Builder
An application designed to create installed Unreal Engine builds (aka Rocket builds) from Unreal Engine GitHub source.
Stars: ✭ 292 (+178.1%)
Mutual labels:  unrealengine, unreal-engine, ue4
ue5-style-guide
An attempt to make Unreal Engine 4 projects more consistent
Stars: ✭ 2,892 (+2654.29%)
Mutual labels:  unrealengine, unreal-engine, ue4
Unreal-Development-Guides-and-Tips
High-level concept explanations, detailed tutorials, performance considerations, shortcuts and other useful content that aims to improve your Unreal Engine 4 development journey.
Stars: ✭ 118 (+12.38%)
Mutual labels:  unrealengine, unreal-engine, ue4
Ue4 Gitignore
A git setup example with git-lfs for Unreal Engine 4 projects.
Stars: ✭ 150 (+42.86%)
Mutual labels:  unrealengine, unreal-engine, ue4
Gascontent
Repo to gather all Gameplay Ability System content for UE4
Stars: ✭ 398 (+279.05%)
Mutual labels:  engine, unreal-engine, ue4
Unrealnetworkprofiler
A modern WPF based Network Profiler for Unreal Engine.
Stars: ✭ 29 (-72.38%)
Mutual labels:  unrealengine, unreal-engine, ue4
VaFogOfWar
A clear and simple solution of Fog of War for Unreal Engine 4
Stars: ✭ 136 (+29.52%)
Mutual labels:  unrealengine, ue4, ue4-plugin
stomt-unreal-plugin
Collect feedback in-game/in-app with STOMT for Unreal Engine.
Stars: ✭ 23 (-78.1%)
Mutual labels:  unrealengine, unreal-engine, ue4
Buoyancysystem
A system for buoyancy and boat physics in Unreal Engine 4.
Stars: ✭ 87 (-17.14%)
Mutual labels:  unrealengine, unreal-engine, ue4

Good News Everyone: Natively integrated in UE4.22+

Details here: https://docs.unrealengine.com/en-us/Builds/4_22

UE4 LivePP: C/C++ live coding

A UE4 plugin wrapper for the amazing Molecular Matter's Live++ Hot-Reloading Library. (https://molecular-matters.com/products_livepp.html). One day we will get sub-second iteration in Unreal Engine 4.

Live++ Documentation: https://molecular-matters.com/docs/livepp/documentation.html

Status

UE4 Plugin Features:

  • Slight validation for ensuring necessary Live++ flags are set (!Target.bAllowLTCG, !Target.bDisableDebugInfo, !Target.bOmitPCDebugInfoInDevelopment)
  • Support for PrePatchHook/PostPatchHook through engine delegates.
  • Support for syncing hotreload at engine's BeginFrame, EndFrame, or None (No syncing).
  • Plugin loads in PostEngineInit(), loads Live++ as an external module, iterates over all loaded modules and registers the game modules.
  • Plugin is disabled from running in commandlet mode.

Tested Configuration:

  • Live++ 1.2.5 - 1.3.3
  • UE 4.19 - 4.21.2
  • Win64
  • In UE4 Editor
  • Plugin as a game project plugin

Usage instructions

  1. Enable VS required compilation flags:

    Live++ requires some additional compilation flags that Unreal doesn't have enabled out of the box.

    There are a few approaches that you can take to enable these depending on which engine version you are on.

    A. 4.19+ Modify VCToolChain.cs:

    • You will manually have to rebuild the entire solution if you want to hotreload engine modules.
    • At the top of VCToolChain::AppendCLArguments_CPP add Arguments.Add("/Gw");
    • At the top of VCToolChain::AppendLinkArguments add Arguments.Add("/FUNCTIONPADMIN");

    B. 4.19 Extend UBT Target rules:

    • The following engine changes shipped in 4.20, but you can backport them to 4.19, and then use the 4.20+ instructions below.
    • Add the following to the TargetRules.cs:TargetRules class:
       [RequiresUniqueBuildEnvironment]
       [XmlConfigFile(Category = "BuildConfiguration")]
       public string AdditionalCompilerArguments;
       [RequiresUniqueBuildEnvironment]
       [XmlConfigFile(Category = "BuildConfiguration")]
       public string AdditionalLinkerArguments;
      
    • Add the following to the ReadOnlyTargetRules class:
       public string AdditionalCompilerArguments
       {
       	get { return Inner.AdditionalCompilerArguments; }
       }
       
       public string AdditionalLinkerArguments
       {
       	get { return Inner.AdditionalLinkerArguments; }
       }
      
    • Add the following to UEBuildTarget.SetupGlobalEnvironment():
       GlobalCompileEnvironment.AdditionalArguments = Rules.AdditionalCompilerArguments;
       GlobalLinkEnvironment.AdditionalArguments = Rules.AdditionalLinkerArguments;
      
    • Follow the instructions below.

    C. 4.20+ Modify Game.Target.cs:

    • Add the following to your Game.Target.cs file:
       AdditionalCompilerArguments = "/Gw";
       AdditionalLinkerArguments   = "/FUNCTIONPADMIN";
      

    NOTE: UBT support for UniqueBuildEnvironment doesn't work well if your game is not in a subdirectory of the UnrealEngine (e.g. UE_4.XX/Games where UE_4.XX is your UnrealEngine root director that has UE_4.XX/Engine, UE_4.XX/FeaturePacks, etc"). Your best bet is to follow Option A even for 4.20+ and modify the buildconfiguration.xml file instead of Game.Target.cs:

    <BuildConfiguration>
    <AdditionalCompilerArguments>/Gw</AdditionalCompilerArguments>
    <AdditionalLinkerArguments>/FUNCTIONPADMIN</AdditionalLinkerArguments>
    </BuildConfiguration>
    
  2. Clone this repo into your game or engine plugins directory (eg \GameModule\Plugins\LivePP)

  3. Extract LPP.zip into this folder: \Plugins\LivePP\Source\ThirdParty\LPPExternalLib

    The result should look like the following:

    \Plugins\LivePP\Source\ThirdParty\LPPExternalLib\LivePP
    \Plugins\LivePP\Source\ThirdParty\LPPExternalLib\LivePP\API\*
    \Plugins\LivePP\Source\ThirdParty\LPPExternalLib\LivePP\x64\*
    \Plugins\LivePP\Source\ThirdParty\LPPExternalLib\LivePP\x86\*
    

    etc

  4. Enable the LivePP plugin:

    • In your Game.Build.cs file add: PrivateDependencyModuleNames.Add("LivePP");
    • Build and launch the editor and navigate to the Project Settings, scroll down to Plugins -> LivePP and check the Enable box. By default, it is set to false so if you checkin the plugin, it won't attempt to load itself on every team members computer. Enable setting is persisted to your local machine only (EditorPerProjectUserSettings)
  5. Optional suggestions:

    These are other settings that you can play with which may improve Live++ reloading times.

    A. Force off UnityBuilds (slower full recompilation but faster L++ hotreloading)

    • bUseUnityBuild = false && bForceUnityBuild = false

    B. Ensure adaptive unity builds are working (UBT uses git status or if it detects perforce, the file's readonly attribute to determine if a source file has been touched. If so, it will pull that file out of the unity build. So you just have to ensure to touch the file before you launch UE4 with L++

    • Settings to use: bUseAdaptiveUnityBuild, bAdaptiveUnityDisablesPCH, MinGameModuleSourceFilesForUnityBuild

    C. Force all game modules to not use unity builds.

    • bFasterWithoutUnity = true

    The best workflow I've found is use adaptive unity builds for the engine while forcing all game modules to not use unity builds.

Troubleshooting:

Incredibuild

  • Can't find compiler/must override cl/link.exe paths Incredibuild caches the compiler toolchain in a directory and then deletes it after a build so L++ won't be able to find it. You can manually override the toolchain paths: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.13.26128\bin\Hostx64\x64\cl.exe && C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.13.26128\bin\Hostx64\x64\link.exe

    Watch out for UE4 using 2015 toolchain (default) even if you are generating VS2017 projects. Turned out that even though he had a VS 2017 project and toold VS/UE to use the VS 2017 toolchain, somehow UBT insisted on using VS 2015. The overridden paths would point to his VS 2017 cl.exe, so the compiler would complain about the PCH being from a previous version of the compiler

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].