[=MonsOlympus;17720]
Ahh thank you that is extremely helpful. My main concern is Blueprint Classes and calling Blueprint functionality from within C++, I would prefer to keep those calls all C++ native and override in Blueprint. I think its similar to what you are saying about data objects but in this case its class references because of the need to call functionality, even if I cast I still need the class of Blueprint to call the appropriate function. I was having some issues calling through C++ into the blueprint layer but that may just be a project specific issue. With the Archetypes to explain that, is that you would have to:
- Create the class for the archetype compile.
- Then open the editor and create the archetype.
- Copy the reference to the asset to the clipboard close the editor and copy it into Uscript.
- Then recompile with the asset reference linked so you could access the archetype.
This is what creates the interdependency and if we are modifying blueprint callables or *native implemented events * I cant help but see us running into issues pretty quickly.
[/]
Yeah, that archetype method is what we generally use in fortnite, but basically without the 4th step. We avoid having asset references from C++ to Asset, so that step #4 is usually “open a different asset in the editor and point it to the new blueprint”.
Refactoring blueprint events and functions can be a bit complicated. Luckilly, there are some pretty handy redirectors built into the engine. Here’s a few examples of how you do this kind of refactoring, from our defaultEngine.ini file.
+ActiveClassRedirects=(OldClassName="FortGameInfoBase",NewClassName="/Script/FortniteGame.FortGameModeBase")
+K2FieldRedirects=(OldFieldName="BuildingActor.ReceiveDestroyed",NewFieldName="BuildingActor.OnDeathServer")
+TaggedPropertyRedirects=(ClassName="FSM_AIProjectileThrow",OldPropertyName="InitialAccuracy",NewPropertyName="InitialAccuracyMax")
+K2ParamRedirects=(NodeName="/Script/BlueprintGraph.K2Node_CallFunction", OldParamName="FortMissionLibrary.SpawnMissionItemPickup.MissionItemData", NewParamName="MissionItemDefinition")
Using redirectors you can set up a situation where the old blueprints will fix themselves automatically on load, and then eventually you want to resave the blueprints to make the changes “stick”. It’s basically the same way that data redirectors work.