Coder Social home page Coder Social logo

articysoftware / articy3importerforunreal Goto Github PK

View Code? Open in Web Editor NEW
95.0 20.0 37.0 4.7 MB

Articy Importer plugin for the Unreal Engine 4 and Unreal Engine 5 (work in progress).

License: MIT License

C# 0.43% C++ 99.38% C 0.19%
unreal-engine ue4 unreal-engine-4 unreal-engine-5 ue5

articy3importerforunreal's Introduction

ArticyImporter for Unreal Engine

The Unreal Engine importer allows integrating articy:draft content into Unreal projects and provides a simple C++ and blueprint interface to work with the data. We release this importer as a GitHub open source project that will provide a substantial head start into incorporating articy:draft data into Unreal projects while still allowing enough flexibility to adjust the importer to personal needs.

While full support is not guaranteed for this product, we're constantly working on improvements and would love to hear your suggestions. Feel free to forward us your ideas or even better directly contribute to the development of the importer.

Table of contents

Features

This importer provides a working foundation for integrating articy:draft content into Unreal Engine projects. You can expect the following features including but not limited to:

  • Everything accessible via C++ and Blueprint
  • Flow player for automatic configurable flow traversal as an actor component
  • Automatic import
  • Articy Asset Picker for easy lookup and selection of your articy data
  • Database with your project data. Excluding Journeys, Settings, Template constraints
  • Use of Unreal Engine's localization

Setup

There are a couple of steps needed to get the importer up and running. The Unreal project must be C++ compatible, therefore please ensure that the required tools are installed, such as Visual Studio for Windows or XCode for Mac.

To find out more about how to set up Visual Studio, click here.

Following options are available when first using the importer:

Create a new project

To create a new project, select a project template of your choice and in the next step choose to use C++. You will still be able to use Blueprints, however, your project will immediately support C++!

After you have created a new project, close the Unreal editor for now.

For already existing Blueprint-only projects

Projects that existed prior to using the importer and used only Blueprints can be converted to C++ projects by adding any C++ class that inherits from UObject to the project. It is important that an option other than None gets selected. As an example, we choose the Actor class.

Click Next, name the class "MyActor" and finish the setup. Unreal Engine should now compile the "MyActor" class. After having compiled, your project now also works with C++.

Downloading the plugin

You can decide to get the plugin at the Unreal Engine marketplace as an Engine plugin, or alternatively here via GitHub as a project-based plugin. Functionally, there are no differences.

Project-based plugin

Unreal Engine 4.19 and below: use the respectively tagged version of the importer

Get a copy of the importer and copy it into your projects Plugins folder. It is possible that you don't have one if it is a new project, so you can just create it. Copy the folder ArticyImporter into this Plugins folder. Your project structure should now look something like this.

Engine-based plugin

If you decide to get the plugin on the marketplace, the Epic Games Launcher will handle the installation for you.

Enable the importer in Unreal

Now you can open your Unreal project and open the Plugins window by selecting Edit->Plugins in the main window menu bar. Inside this window scroll in the list of groups down until you find the Group Project (in case you are using the plugin on a project basis), or under Installed (in case you are using it as an engine plugin) and the sub group Articy, click on Articy and enable the ArticyImporter on the right.

After enabling the importer the window will prompt you to restart the editor, please do so to activate it for your project. When the editor restarts it will prompt you to rebuild missing DLL files for the importer which you should confirm. This can take a bit depending on the size of the project and the power of your computer but once finished the Unreal editor should be back up again.

Export project from articy:draft

Now that the importer is running, you are ready to export your data from articy:draft.

Open your articy:draft project and open the export window. Here you will find the Unreal Engine export. Please note that the Unreal export uses Rulesets to choose what and how to export.

When exporting, chose your Unreal projects Content folder as the target for the .articyue4 export file.

Import into Unreal

The first time the ArticyImporter find content to import, the plugin will automatically try to find an "ArticyRuntime" reference inside the project's Unreal build tool files. If the plugin can't find any reference, it will show the following messagebox to add it automatically :

  • "Yes" will automatically add the ArticyRuntime reference inside the Unreal build file.
  • "No" will continue import (no modification to Unreal build files).
  • "Cancel" will abort import process.

NOTE : The automatic verification process can be disabled inside the project settings > Plugins > Articy importer (uncheck "Verify ArticyRuntime reference inside Unreal Build tools").

After every export, going back to Unreal will trigger the ArticyImporter plugin to automatically parse the new file and show a prompt to import the changes. While this option is generally robust, there are certain cases in which more control over the import process is required.

For greater control over your imports, use the Articy Importer Menu. It can be accessed through the Articy Importer button on the Level Toolbar (UE4) or through the Settings menu (UE5).

Unreal Engine 4

Unreal Engine 5

Importer Modes

  • Full Reimport: This option will always regenerate code and compile it, and afterwards generate the articy assets
  • Import Changes: This option will only regenerate code and compile it if necessary, but will always regenerate assets. This is generally faster than a full reimport and is the same as clicking on 'Import' on the prompt Unreal shows you when you've exported.
  • Regenerate Assets: This option will only regenerate the articy assets based on the current import data asset and compiled code.

Using the API

Now that the importer is installed and your project data is imported you can start working on your project. Here are some quick tips at what to look for so you won't go in completely blind:

Assigning an ArticyRef

To get access to your objects, an ArticyRef struct is used. An ArticyRef variable can be assigned using the custom asset picker.

Articy Asset Picker

Getting the object

Once you have assigned your ArticyRef variable, you can then get access to the object by calling the 'Get Object' function. The returned object is an ArticyObject that requires casting or alternatively, the 'Get Object' function will cast it for you to the specified class.

A simple setup that prints the display name of the selected ArticyObject is shown below. Please note that the 'Get Display Name' function is an interface call, meaning that you don't need to cast if the object has a display name. If the object does not have a display name, such as a dialogue fragment, an empty text is returned.

There are many other ways to access your objects, check this screenshot for a blueprint sample code showing you how to access an object by id/technical or directly clone it. The ArticyDatabase is the central object that lets you access all imported articy data. Even the 'Get Object' function above makes use of the ArticyDatabase.

Also make sure to cast the object to the desired type to get access to its properties and its template.

Accessing properties

Most of the time if you want to access the properties of an object you queried from the database or got passed by the flow player callbacks (see below) you need to cast the object to the correct type first.

If you have an object without a template the type to cast into is easy. Every built-in class is named as the object in articy:draft with your project name as a prefix. Let's say your project is named ManiacManfred so you will find ManiacManfredFlowFragment, ManiacManfredDialogueFragment, ManiacManfredLocation, ManiacManfredEntity and a lot more. All those respective objects have their expected properties, so you will find the Speaker property inside the ManiacManfredDialogueFragment object, etc.

You will also find classes with the Articy prefix. Those are the base classes for the generated classes and casting into them works almost the same. This would allow you to create code that is reusable independent of any imported project.

Dealing with templates is a bit more complicated. The first thing to understand is that all your articy:draft templates are new types inside Unreal.

The name of your template types also follows a similar structure as the one mentioned before, but utilizing the Templates technical name: <ProjectName><TemplateTechnicalName>. So if your project is called ManiacManfred and your templates technical name is Conditional_Zone your correct type would be called ManiacManfredConditional_Zone. Its also worth mentioning that even if it is a new type, it is still derived from the base type with all its properties.

Accessing is easy once you have cast the object into the correct type, just drag a connection out of the node and search for the type to see all its properties.

For templates, it works the same way, but you will also find fields for every feature inside your template, so in the case of the Conditional_Zone template, there is a ZoneCondition field for the feature with the same name.

Please note: It is possible that the context sensitive search does not properly work at this point in blueprint. When you disable it, you should be able to see all the fields inside your object.

Some properties are a bit more complex like reference strips and scripts:

  • Scripts contain methods to Evaluate the underlying script. You can also access the Expression which is the original script in text form.
  • ReferenceStrips and QueryStrips are just arrays.
  • ReferenceSlots, Speaker, Asset inside the PreviewImage etc. are of type ArticyId, which can be plugged into GetObject.

So to reiterate:

  1. Get the object and cast it to the appropriate type.
  2. Access the property/feature.
  3. If it is a feature you access now the property inside the feature.
    3a. If it is a script method, you can execute it via the Evaluate method.

Articy Flow Player

The flow player is used as an automatic traversal engine. To set it up you add the Flow player actor component to one of your actors:

Now you can customize the flow player by setting the necessary options in the Setup section of the details panel. Most interestingly are Pause On and Start On. The StartOn attribute can also be set dynamically via code before traversing through the dialogue.

If you scroll down you will find the components event section. Here you probably want to add events for On Player Paused and On Branches Updated

Adding those will create new event nodes in the graph of your current actor and allow you to implement your custom logic.

To quickly reiterate how to use those: On Player Paused is called with the current paused object of the flow traversal, the current spoken dialogue fragment for example; and On Branches Updated to create the user choices for the current pause.

Here is an example blueprint implementation for both methods

The ShowPausedObject method is to display the current pause on the UI. Here is the implementation of that method.

spokenText is bound to a UI text block.

And the On Branches Updated is used to create a vertical list of buttons. How to create those buttons, creating the layout etc. is out of scope of this quick guide but it is important that you store the branch in every button. When you instantiate the button you should pass in the reference used in the for-loop and when the button is clicked you use that branch as the index for the flow player so it knows where to continue.

If you want to learn more about the flow player and its events you can read the unity documentation as both implementations are based on the same principles.

Custom Script Methods

It's possible to add new script methods into articy:draft's Expresso scripting language. These can trigger side effects in your game such as moving game objects or changing UI states, or they could return helpful values such as the location of the player.

Getting started with custom script methods is easy. Simply start using new methods in articy:draft as if they already exist (as pictured below) and import your project into Unreal.

Please be careful, however, to use only one custom script method per instruction node if you need to guarantee a sequential execution in Unreal for theses instructions.

The importer will detect these methods, infer their parameter types and return signatures (in the example above, one integer and one string), and generate an Interface you can implement in Blueprint or C++ with their implementations.

There are three ways you can implement this interface.

  1. Implement the interface on an actor containing an ArticyFlowPlayer component. Any time that flow player component encounters a custom method, it'll call the function on this parent actor.
  2. Implement the interface on a component deriving from a ActicyFlowPlayer component. Any time this flow player encounters a custom method, it'll call the function on itself.
  3. Implementing the interface on a custom UObject and setting that class as the User Methods Provider on a ArticyFlowPlayer component. Any time that flow player encounters a custom method, it'll call the function on a new instance of that object.

Each flow player can only use one of the above methods (you can't mix and match).

Choose one and create or open the corresponding Blueprint (whether it's the actor, the component, or the custom UObject). Go to Class Settings and add the interface generated from your Articy project to the Interfaces list.

Now, you can start implementing your custom methods. To do this, find the method in the Interfaces list under My Blueprint (bottom left), right-click it, and select Implement event.

This will create a new event node in your Blueprint graph with all the appropriate parameters.

You'll notice the types of each parameter are automatically deduced based on how you used the function in Articy. Now, attach some nodes (if you just want to test it, try a Debug Print to start) and test it out.

Note: You may notice your method is called earlier and more often than expected. This is because Articy "scans ahead" in branches to find which ones are valid. To avoid executing your logic twice, see Shadowing.

Custom Methods that Return

You can also define custom Expresso script methods that have return values.

To create implementations for these in Blueprint, use the Override function method in the Blueprint editor on the object that implements your interface.

Then, you'll get a custom function in Blueprint that can return a value.

Shadowing

You'll notice that if you put custom script methods into Instructions, Conditions or Pins, the methods will be executed before the node is actually reached by the Flow Player.

This is because the flow player scans ahead while figuring out which branches are valid and not. This is how it knows which choices to show and which to hide. In order to make these decisions, it needs to run instructions and conditions ahead of time to see if any fail.

Obviously, this would create problems if any of these scripts modify variables or properties, so the flow player goes into a shadow state when doing this. While shadowing, the flow player duplicates the global variables and other state so that changes made by instructions do not affect the real, current state.

All this is handled automatically and requires no input from you.

However, Articy doesn't know what your custom script methods do. If they have side effects (such as changing the state of your game or displaying something on the UI), it doesn't know that these shouldn't be executed during the shadow state.

You need to handle this yourself.

Thankfully, this is easy to handle with the Is in shadow state? Blueprint node available on the Articy Database. Gate any side effects your function has behind this method returning False to ensure they're only run when the node is actually being executed.

If your custom function has a return value, however, you still want to make sure it runs as normally. Remember: shadowing is how articy decides what branches are valid or not. If you return a different value while shadowing than you would otherwise, articy won't be able to figure out the proper list of branches to return. Only use Is in shadow state? to gate side-effects.

Multiple Global Variable Sets

Some games may require having multiple independent sets of global variables, such as each player having their own variable set.

This is supported via the Override GV property of the ArticyFlowPlayer component.

To create a new, independent set of global variables, right-click in your Content window and find Alternative Articy Global Variables.

Now, you can simply set the Override GV property on your flow player to this asset. Any two flow players with the same setting will share variables, and any flow players with this property unset will share the default global variables.

Similar to the default global variables set, these new sets respect the Keep global variables between worlds setting of your project. If it's turned on, changes to these global variables will persist across level boundaries. If it is turned off, each will reset to their default values anytime the level changes.

Getting Variable Sets in Blueprint and C++

If you want to access the values in these sets in Blueprint or C++, you need to use the Get Runtime GVs method/node on the Articy Database. The Alternative Articy Global Variables asset is just a dummy placeholder, so it has no data itself. You need to use this method to access the runtime data.

Pass the asset reference into the Get Runtime GVs method and it will return the active runtime clone for that set.

Getting the Current Variables during Custom Script Calls

If you're writing a handler for a custom script method, you may want to access the variable set currently being used in execution.

When an expresso script is running, the Get GVs method/Blueprint node on the Articy Database will return the active global variables instance that the flow player is using.

Articy Global Variables Debugger

The Global Variables debugger can be accessed in the toolbar at the top of the level editor (UE4) or the Settings menu on the right hand side of the level editor (UE5). It shows all global variables while the game is running and lets you search by namespace or variable name which makes it easy to follow what is happening inside the game and to debug problems in relation to global variables.

Furthermore, you can also change the global variables while the game is running, and your game code that listens to variable changes is going to get triggered. This is useful to replicate specific conditions without needing to go through all steps manually.

For example, if your global variables control your quest states, checking a "quest accepted" global variable in the debugger will make your quest system initiate a quest.

UMG Rich Text Support

If your articy:draft project has been exported using either the Unity Rich Text or Extended Markup formatting settings, you can use articy with the Unreal Rich Text Block widget to display richly formatted text.

Export and Import Configuration

First, make sure you select one of these two settings in the Export options dialog in articy:draft

Then, you'll need to enable a setting in Unreal to convert Unity rich text formatting to Unreal's format. NOTE: Make sure you click Import Changes anytime you change this setting. You can find it in the Articy Import Window.

Configuring Styles

Next, you have to configure your styles by creating a style data table in Unreal. This asset tells the rich text widget what fonts, colors, and other styling effects to apply to each kind of text. Create this asset by creating a new Data Table in your Content window (under Miscellaneous) and for the row structure, pick RichTextStyleRow.

Next, open the new data table and create your styles. You'll need to import a few fonts into your project to do this. On Windows, you can find the fonts installed under C:\Windows\Fonts. Drag one into your Unreal project to import it.

You'll need to create a new row for every combination of styles you want to support. The first row is always the default style: what you'll get if there's no formatting set on text.

Create a b row for a bold style. You can also create an i row for italic and u for underline. Make sure to set the appropriate font and style setting for each type.

To support combinations (such as bold and italic), you need to create combination rows. Each combination is always alphabetically ordered. So, to support bold and italic, you'd create a bi row. For bold and underline, bu. For all three: biu. You need to create a row for each unique combination to tell Unreal which font to use. Usually, when importing a font, you'll get versions for each combination.

Example:

Configuring your Rich Text Control

Once these are all set, you can configure your rich text control. Create a Rich Text block in the UI editor and set it's Text Style Set to your new data table.

Now, you'll be able to see your styling in articy appear in Unreal! Try setting the text to the text of a formatted node in articy to test.

Color Support

Note: Colors are only available with the extended markup option in the articy:draft export.

To support additional styling like custom colors, you need to add the ArticyRichTextDecorator to the list of Decorator classes on the rich text block.

Hyperlinks

Note: Hyperlinks are only available with the extended markup option in the articy:draft export.

To use hyperlinks from Articy, you'll need to do two things:

  1. Add the interface ArticyHyperlinkHandler to your user widget that owns the rich text control. You can do this in Class Settings under interfaces. Then, implement the On Hyperlink Navigated method to catch the event of users clicking the hyperlinks.
  2. Sub-class ArticyRichTextDecorator with a new Blueprint class and configure its HyperlinkStyle property. This will control the regular, hover, and underline style behavior of the hyperlinks. Then, use this new blueprint class as your Decorator class on the rich text control instead of ArticyRichTextDecorator.

Advanced features (requiring C++)

There are some specific workflow features that can be exposed to Blueprints using C++ only.

UPROPERTY meta data

There are currently three articy UPROPERTY meta specifiers.

  • ArticyClassRestriction (for FArticyId and FArticyRef): Restricts the articy asset picker to the given class and, on its own, its descendants. The class is assigned without the C++ Prefix (i.e. UArticyEntity becomes ArticyEntity)
  • ArticyExactClass (for FArticyId and FArticyRef): Restricts the Exact Class checkbox in the articy asset picker to the specified value. Useful to exclude child classes of a given class in combination with ArticyClassRestriction
  • ArticyNoWidget (for FArticyId). This is a performance optimization for large projects and can be used to disable the custom widgets for FArticyIds, as they are more computationally expensive.

Below is example code:

class AMyActor : public AActor
{
public:
	GENERATED_BODY()
	
	UPROPERTY(EditAnywhere, meta = (ArticyClassRestriction=ArticyNode, ArticyExactClass = true)
	FArticyRef NodeReference;
	
	UPROPERTY(EditAnywhere, meta = (ArticyClassRestriction=ArticyEntity, ArticyNoWidget = true)
	FArticyId EntityId	
}

ArticyId Widget Customization

The ArticyId Widget customization is a system to let you add custom widgets to any ArticyId or ArticyRef property in the Unreal Engine editor without having to modify the plugin code. The Articy button that opens up the currently selected object inside articy:draft 3 itself is also implemented using the same system.

The system also allows you to test the associated object for its data, or to only use your custom widget for specific types of articy objects. For example, all objects that have a "Quest giver" feature in articy:draft 3 can show a button inside Unreal that will open up the asset in which the associated quest is contained.

To create a customization, there are three steps:

  1. Create a Customization class inheriting from IArticyIdPropertyWidgetCustomization and override its functions. This class is responsible for actually creating the FExtender and the widget for the customization.
  2. Create a Customization Factory class inheriting from IArticyIdPropertyWidgetCustomizationFactory and override its functions. The SupportsType function gives you the object that is being considered for customization as a parameter, so you can retrieve its data and decide whether the factory supports the articy object or not.
  3. Register the Customization Factory with the ArticyCustomizationManager that resides in the FArticyEditorModule using a FOnCreateArticyIdPropertyWidgetCustomizationFactory object, which is going to instantiate a factory internally.

Sample code can be found in the following files inside the ArticyEditor module, which demonstrates how the articy button itself was added:

  • "DefaultArticyIdPropertyWidgetCustomizations" (Customization + Factory)
  • "ArticyEditorModule" (Registering of the factory via FOnCreateArticyIdPropertyWidgetCustomizationFactory object)

Keep in mind that this customization needs to be stripped from a packaged build, so this should only be done in an editor module. The editor module needs to have "ArticyEditor" listed as a dependency. Additionally, to get access to the customization manager from outside the FArticyEditorModule, use the following code:

FArticyEditorModule::Get().GetCustomizationManager()->RegisterArticyIdPropertyWidgetCustomizationFactory...

Contributing

We are very grateful for any kind of contribution that you bring to the ArticyImporter, no matter if it is reporting any issues, or by actively adding new features, or fixing existing issues. If you want to know more about how to contribute please check our Contribution article.

Compatibility

It is not possible to have both ArticyXImporter for Unreal Engine and ArticyImporter for Unreal Engine installed in the same engine or project. If you need to use both on the same engine installation, then you need to install the relevant plugin at the project level.

Common Issues

Error: Could not get articy database when Running a Packaged Build

The Articy Generated assets like the Database and Packages are probably not making it into your final packaged build, hence the error.

Make sure the ArticyContent folder is listed under Additional Asset Directories to Cook in your project's Packaging settings.

To verify the Articy assets are actually making it into the package, you can use the UnrealPak utility included with Unreal to unzip the packaged build and check the bundled assets.

Run the following command:

UnrealPak.exe "C:\Path\To\Your\ShippingBuild\WindowsNoEditor\ProjcetName\Content\Paks\ProjectName.pak" -Extract "C:\Path\To\Extract\To"

Replacing the paths to match the location of your exported build and a temporary directory to extract to. Make sure to use absolute paths, as we've found UnrealPak behaves best with them.

Then, check the contents of that directory and ensure that the Articy Generated assets are in the ArticyContent/Generated folder.

The UnrealPak executable is located in the \Engine\Binaries folder in your Unreal installation. On Windows, it's at \Engine\Binaries\Win64\UnrealPak.exe.

Files Marked as Delete in Perforce/Plastic SCM

Older versions of the plugin had issues with various source control plugins for Unreal like Perforce and Plastic SCM. Frequently, generated Articy assets would get marked as delete instead of edit, making it easy to accidentally commit to your repository without these critical assets.

These issues have been fixed in version 1.3.0 of the plugin. If you're still seeing issues with source control after updating, create an issue on GitHub or contact [email protected] for assistance.

My Articy Assets (Textures/Sounds) are Not Appearing in Unreal

Make sure you are exporting directly from Articy into your Unreal game directory. Alongside the .articyue4 file there should be an ArticyContent directory with all your assets.

Both need to be copied into your Unreal project.

Hot Reloading Drop-Down List Changes

Because of a known issue with Unreal and hot-reloading changes to enums, be very careful when hotreloading any changes to the values in a Drop-down list. If you save any Blueprint using the generated enum after hotreloading, you'll likely have all those nodes broken (converted into bytes) the next time you open the editor.

When importing drop-down list changes, it's best to restart Unreal to avoid issues.

Error C2451: a conditional expression of type 'const TWeakObjectPtr<UObject,FWeakObjectPtr>' is not valid

If you're getting the above error after updating to version 1.4 of the Articy Unreal plugin, you need to make a manual fix to your generated C++ file to get Unreal started.

Find {ProjectName}ExpressoScripts.h (where {ProjectName} is the name of your articy:draft project) in Source\{UnrealProjectName}\ArticyGenerated and delete the method GetUserMethodsProviderObject (should be around line 50ish).

Once the project succesfully compiles and opens, run a Full Reimport.

Detailed step by step import process

Here is a full detailed step by step process to configure Ureal to be able to import Articy content properly :

1- Create an Ureal C++ project

2- Uncheck "Hot Reload" inside Editor preferences (to prevent concurency with Live Coding session)

Edit > Editor preferences > "General" section => "Miscellaneous" > 
    Uncheck "Automatically compile newly added C++ Classes" (in Unreal 5, Live coding tries to do this as well, that leads to race conditions over buildings & locked already build DLLs ...)

3- Save all and CLOSE the Editor / project

=> ! important NOTE ! :  
If the Unreal Editor isn't closed, the first version of the project can't be build inside Visual studio.
Even if this is not mandatory, it's far better to build a first version of the project outside the editor BEFORE doing the initial import, as the first import can fail if the Unreal project isn't already build because of the way Live Coding handles incremental compilation.
ALTERNATIVELY 
Also, the first import succeeds much more when the user firstly play the initial level before importing content from Articy... Then it's not necessary to build the first project outside of the Editor (Steps 4 / 5 / 6) BUT Editor neets to be closed / Reopend (step 3) to remove the Hot reload Editor references. So, as the Unreal editor must be closed at this moment, it's probably more natural to add the VERY IMPORTANT "ArticyRuntime" dependency at this time (step 5-).

4- Open the visual studio project

5- Add the "ArticyRuntime" dependency (very important) :

edit the followng file :

<Project Path>\Source\<Project Name>\<project_name>.Build.cs

This file is automatically generated by Unreal when you create a c++ project. 

[NOTE : It may be more than 3 files generated inside this folder depending on which kind of Template you choose when creating the project. 
An empty project will generate only necessary Unreal build tool files (3 files) when a third person project (by example) will generate 4 more files at less...]

Inside the file, add 

```c#    
"ArticyRuntime"
```

To make the PublicDependencyModuleNames like the following line :

```c#
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "ArticyRuntime" });
```

This will tell to Unreal Engine build tool to take in account the Articy Dll when building project, otherwise Unreal build will fail.

6- Do a fresh build of the project inside Visual studio. => This will create the basic DLL for Live Coding to begin with the C++ project.

7- Re-Open the project inside Unreal editor

5- Export articy project inside Unreal (directely at the root of the "Content" folder) => After a shot time, this action should trigger a "Import changes" message into the Unreal side, and the importer should have generated some code files inside the "\Source<Project Name>\ArticyGenerated" folder => Import the changes and wait Live coding compilation to finish (the first import can take some time, but the other ones are faster)

=> To confirm that the importation finished sucessfully, some Unreal structures might have been generated inside the C++\<Project_Name>\ArticyGenerated folder.

articy3importerforunreal's People

Contributors

alewinn-terizkoming avatar ash501 avatar bmustiata avatar brwarner avatar christian-schildt avatar dowhilefor avatar herr-edgy avatar jeremyabel avatar k283 avatar lpinkhard avatar nico-probst avatar peter-sabath avatar ralucapercec avatar shaarigan avatar wahoozerman avatar yoshivb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

articy3importerforunreal's Issues

Regenerate Assets - Bugs When Using Perforce (maybe any Source Control)

When using perforce, CodeGenerator::GenerateAssets() immediately deletes all files in the Generated folder. This causes UE to mark the files for Delete in source control. After the assets are regenerated, their status cannot be altered in source control, they are stuck on being marked for delete. The files must be deleted by source control, or reverted by the user so they can't be updated, there is no way to avoid this. The user must submit the deletion to source control, and then run Regenerate a second time to recreate the assets. Then they will be marked for add and can be re-added. The cycle continues for infinity.

A possible fix is:

  • Instead of blindly deleting all existing generated uassets, just make a list of them.
  • Generate assets and populate a second list containing the (re)generated assets.
  • Compare the two lists, and only delete any assets that were not (re)generated. In other words, only delete actual stale asset files.
  • UE will naturally detect modifications to the modified files and open the check out prompt dialog (I have a very rough implementation working locally, may clean up and do a PR later if I can find time)

UE5: Articy Flow Player component events missing

Issue: in UE5, the Articy Flow Player component does not have any component events.

Steps to reproduce:

  1. Create a blank Articy project
  2. Fill it with test data
  3. Export it to UE5 and import it with the Articy Importer
  4. Create a test object with an Articy Flow Player component
  5. Try and find the component events section as described in the tutorial in this repository.

Are the component events somewhere else in UE5 or is this a bug?

Screenshots:

image

Incorrect result when comparing floats and ints in Expresso script

Hello :) We are running Articy with Unreal, using this plugin, and we have run into an issue that seems rather... disturbing.

Consider the following Expresso condition:
getProp(getObj("Player"), "PlayerProperties.Intimidation") < 3

PlayerProperties.Intimidation is a float, and is compared against an integer value. I would expect the condition to evaluate to true if the float value is larger than 3.0, and false otherwise. The result, however, is undefined behaviour.

After debugging, I managed to track down the issue. The generated C++ looks like this:

return ConditionOrTrue(
	getProp(getObj("Player"), "PlayerProperties.Intimidation") < 3
)

This causes an implicit cast - the value 3 is cast to ExpressoType with type set to Int. Then, ExpressoType::operator< is evaluated; however, this operator assumes that both expressions are of the same type; it just performs GetFloat() < Other.GetFloat(). However, in this case Other is an Int; so we are reading undefined values from a union.

Cast error in UArticyIncomingConnection::GetSourcePin()

Hi, I'm upgrading my project from UE5.3 to UE5.4 and I'm experiencing compile errors.
I'm using the latest version of Articy Importer (1.8.0).

At row 91 of ArticyBuiltinTypes.cpp (LINK) there is a cast to a UArticyOutputPin from a UArticyObject (return value of GetObject function).

UArticyOutputPin* UArticyIncomingConnection::GetSourcePin() const
{
	if(!SourcePinObj)
	{
		auto db = UArticyDatabase::Get(this);
		SourcePinObj = db ? Cast<UArticyOutputPin>(db->GetObject(SourcePin)) : nullptr;
	}

	return SourcePinObj;
}

This cannot never be true, since UArticyOutputPin doesn't not inherit from UArticyObject but from UArticyBaseObject.

Full inheritance path here:
UArticyOutputPin > UArticyFlowPin > UArticyPrimitive > UArticyBaseObject
UArticyObject > UArticyPrimitive > UArticyBaseObject

In UE5.4 the Cast function changed and added a compile time check that ensures that the classes are related (Link to UE commit), so now the plugin is no more compiling.

Before changing anything in my side, I opened this issue to ask what is the expected output of the function.

Greetings, Luca

Calling "Execute" node via an Instruction with multiple custom functions prevents subsequent functions from calling

I believe this is a bug but if not, please let me know.

In an instruction, there are multiple functions, lets say 2: Function1, and Function2. These are implemented via interface to call separate functions.

ArticyDraft_Ya2TWXvkJ7

Function1 calls the "Execute" node (in my case, the Function was creating an Entity, and the Entity has a "on creation" type instruction in Articy).

UnrealEditor_xnyxhs5N2G

As soon as the Execute node is called it "interrupts" the original instruction, and Function 2 will never be called. If you change the original instruction so Function2 is before Function1, both functions call correctly. Thus I assume it's the Instruction node that's "interrupting" the execution order.

I think I have a stopgap fix (pushing these instructions into a queue and calling them subsequently and separately) but preferably any number of functions in the same instruction would call correctly no matter the order, even if they individually execute separate code. Alternatively if this is intended behaviour then there should be explicit instruction not to do this, so it can be built around from the beginning.

Thanks for reading and all the work you put into these integrations.

Update for UE 5.2

Hey guys,

we're looking to upgrade our current project to UE 5.2. Are there any immediate plans to release a new version?

UE5 Widget fails to find .articyue4 in /Content/

The importer fails to find the .articyue4 in a /Content/ folder. I've tested with two projects, followed the guide from the Readme, I still get this behaviour.

image

Repro:

  1. Make a new C++ TPS project on UE5.1.1
  2. Install the "Unreal Importer 1.6.0" plugin to /Plugins/
  3. Add ArticyRuntime to your Build.cs, build the project, Activate the Articy Plugin, disable HotReload like in the guide.
  4. Open the Maniac Manfred project in the Articy 3 FREE version (I'm testing with Steam)
  5. Export for Unreal to \YourTPSProject\Content\
  6. In UE5.1.1 get prompted to import 55 changes, import them.
  7. Try to use the Widget and fail.
  8. Notice that the .articyue4 exists in /Content/

image

This is where all of this is handled:
image

Any help would be very useful as we are looking to test Articy integration before buying a multi-user subscription.

Thank you!

performing full reimport crashes Unreal 100% of the time.

The initial import of the articy file worked, but after the project grew to a size on disk of more than 14gb, performing a full-reimport causes the following crash:

`LoginId:xxxxxxxxxxxx
EpicAccountId:xxxxxxxxxxxxx

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xffffffff

UE4Editor_CoreUObject!FPropertyProxyArchive::operator<<() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\PropertyProxyArchive.h:45]
UE4Editor_CoreUObject!UStruct::SerializeExpr() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\ScriptSerialization.h:222]
UE4Editor_CoreUObject!UStruct::SerializeExpr() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:2126]
UE4Editor_CoreUObject!UStruct::SerializeExpr() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:2126]
UE4Editor_CoreUObject!UStruct::Serialize() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:1925]
UE4Editor_CoreUObject!UFunction::Serialize() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:5555]
UE4Editor_CoreUObject!FFindReferencersArchive::ResetPotentialReferencer() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\FindReferencersArchive.cpp:89]
UE4Editor_UnrealEd!ObjectTools::ForceReplaceReferences() [D:\Build++UE4+Licensee\Sync\Engine\Source\Editor\UnrealEd\Private\ObjectTools.cpp:798]
UE4Editor_UnrealEd!ObjectTools::ForceReplaceReferences() [D:\Build++UE4+Licensee\Sync\Engine\Source\Editor\UnrealEd\Private\ObjectTools.cpp:922]
UE4Editor_UnrealEd!ObjectTools::ForceDeleteObjects() [D:\Build++UE4+Licensee\Sync\Engine\Source\Editor\UnrealEd\Private\ObjectTools.cpp:2811]
UE4Editor_ArticyEditor!CodeGenerator::DeleteGeneratedAssets() [D:\Build++Portal+Promotion\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\ArticyImporter\Source\ArticyEditor\Private\CodeGeneration\CodeGenerator.cpp:178]
UE4Editor_ArticyEditor!CodeGenerator::GenerateAssets() [D:\Build++Portal+Promotion\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\ArticyImporter\Source\ArticyEditor\Private\CodeGeneration\CodeGenerator.cpp:269]
UE4Editor_ArticyEditor!TBaseFunctorDelegateInstance<void __cdecl(UArticyImportData *),<lambda_5fbe6f406c99ec1ba37b2e39b904832d> >::ExecuteIfSafe() [D:\RocketSync\4.25.0-13144385+++UE4+Release-4.25\Working\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:1005]
UE4Editor_ArticyEditor!TBaseMulticastDelegate<void,UArticyImportData *>::Broadcast() [D:\RocketSync\4.25.0-13144385+++UE4+Release-4.25\Working\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:1013]
UE4Editor_ArticyEditor!CodeGenerator::OnCompiled() [D:\Build++Portal+Promotion\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\ArticyImporter\Source\ArticyEditor\Private\CodeGeneration\CodeGenerator.cpp:312]
UE4Editor_ArticyEditor!TBaseFunctorDelegateInstance<void __cdecl(bool),<lambda_0b32b99d7466b29ddec2cdf21af7a4ca> >::ExecuteIfSafe() [D:\RocketSync\4.25.0-13144385+++UE4+Release-4.25\Working\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:1007]
UE4Editor_HotReload!TBaseMulticastDelegate<void,bool>::Broadcast() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:1013]
UE4Editor_HotReload!FHotReloadModule::DoHotReloadInternal() [D:\Build++UE4+Licensee\Sync\Engine\Source\Developer\HotReload\Private\HotReload.cpp:890]
UE4Editor_HotReload!UE4Function_Private::TFunctionRefCaller<<lambda_d85446a946c3f6776c68ebfeb93e5785>,void __cdecl(TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > const &,bool,enum ECompilationResult::Type)>::Call() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Public\Templates\Function.h:549]
UE4Editor_HotReload!FHotReloadModule::CheckForFinishedModuleDLLCompile() [D:\Build++UE4+Licensee\Sync\Engine\Source\Developer\HotReload\Private\HotReload.cpp:1865]
UE4Editor_HotReload!FHotReloadModule::Tick() [D:\Build++UE4+Licensee\Sync\Engine\Source\Developer\HotReload\Private\HotReload.cpp:1427]
UE4Editor_Core!FTicker::Tick() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Private\Containers\Ticker.cpp:95]
UE4Editor!FEngineLoop::Tick() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5051]
UE4Editor!GuardedMain() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:169]
UE4Editor!GuardedMainWrapper() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
UE4Editor!WinMain() [D:\Build++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:268]
UE4Editor!__scrt_common_main_seh() [d:\agent_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll`

Cannot compile under 4.15.3

Hey,
I am currently running into the following issues with the Articy Importer for Unreal.

I am getting the following error from ArticyExpressoScripts.h at Line 144

C4596 'AddDefinition': illegal qualified name in member declaration

I get this error twice then It fails to compile.

Articy Importer menu button does not load.

I can't find the Articy Importer menu button via the level toolbar in 4.26.1. I'm on Linux. I don't know if that matters. But, my custom projects and ManiacManford does not have that button. Also, the engine can't find the asset for the button.

Crash when executing Kismet Event Commands

Hello,
we have encountered a crash on UE 4.27.1 when executing a Kismet Event Command.
We are using v1.3.1 of the importer.

It happens in both our project and the ManiacMansion demo.

Repro steps:

  • press play in the editor
  • open the console
  • type 'ke* StatPerf' (but whatever command will trigger the crash)

From what I understand, the ArticyPackage needs to provide an implementation of UWorld* GetWorld() const;

This is blocking other people on the team from using Kismet Event Commands which is a problem.
I have avoided the crash locally by changing the implementation of UArticyBaseObject::GetWorld() to always return nullptr, but this is clearly not an actual fix and I have no idea how many things it might be breaking in Articy.

What should the actual implementation of UArticyPackage::GetWorld() be?

Thanks,
Dario @ YellowBrickGames

Articy_Crash

.

Some imports wipe ExpressoScripts in generated header

image

Every few imports, when the C++ code requires regeneration, the generated C++ ExpressoScripts.h file loses all its Instructions and Conditions.

I checked my exported .articyue4 file and the Instructions and Conditions are still there. In fact, the runtime asserts when it gets to these nodes because the Instructions/Conditions are missing when it tries to find them by hash.

It doesn't happen every time but it happening on both the recent 1.0 version and whatever version was in the master branch just prior.

I haven't detected a pattern yet nor do I have a minimum project for reproduction. I will update this issue with more information as I find it.

Importing issues when renaming Templates/Features

Original post thx dread for reporting it

Steps to reproduce

  1. Create new empty Unreal project
  2. Install the Articy Importer plugin and enable it.
  3. Export the fresh Maniac Manfred articy project to Unreal projects Content directory.
  4. Import the generated articy project assets when prompted.
  5. Go to articy project and change the Technical name of "Template Design/Templates/Entities/Character" to CharacterChanged.
  6. Export the articy project.
  7. Import the project in Unreal when prompted to.
    8, Observer unreal engine crash.

Workaround
Deleting the whole Generated folder resolves the import

C++ fails to compile if the game's module name does not match the project name

My game module's name is different than the project name, so modifications have to be made to the plugin to support this. Specifically I added a "GameModuleName" property to the plugin settings, and use that to replace all instances of FApp::GetProjectName(). I set the default of the GameModuleName property to FApp:GetProjectName(), but I'm not sure if there's a better way of getting the real game module name automatically without allowing the user to change it in the plugin settings. Additionally I adjusted the CodeFileGenerator::GetExportMacro() function as well to use the GameModuleName config setting instead.

When "PauseOn" is set to "Instruction", "UArticyScriptInstruction::Execute" is executed twice.

"PlayBranch"を実行すると"ArticyBranch::Path"に含まれる全ての"Node"に対して"Execute"が実行される
When "PlayBranch" is executed, "Execute" is executed for all "Nodes" included in "ArticyBranch::Path".

"ArticyBranch::Path"には両端の"Node"が含まれているので、"PauseOn"が連続で起きると一つの"Node"に対して二回実行されてしまう
Since "ArticyBranch::Path" contains "Node" at both ends, if "PauseOn" occurs consecutively, it will be executed twice for one "Node".

これは意図したものですか?
Is this what you intended?

4.20 MyArticyProject.build.cs Plugin Error

Hi, just to let u know. I Updated from 4.18 to 4.20.2 and ran into Build Error. The line:

PublicIncludePaths.AddRange(new string[] { Path.Combine(ModuleDirectory, "../../Plugins/ArticyImporter/Source/ArticyRuntime/Public") });

is not working correctly for 4.20 it seems. In the readme u write that we have to go 2 folders up "../../" but we only need to go 1 up "../". Maybe correct that in the readme.

Best regards
Tobi

"Warning: No ArticyDraftDatabase was found." in Standalone Game

Database isn't found when running as Standalone Game. However, I've verified that it works in PIE and packaged games.


[2021.10.22-01.24.47:265][  0]LogTemp: Warning: Cloning ArticyDatabase.
[2021.10.22-01.24.47:266][  0]LogArticyRuntime: Warning: No ArticyDraftDatabase was found.
[2021.10.22-01.24.47:266][  0]LogOutputDevice: Warning: 

Script Stack (0 frames):

[2021.10.22-01.24.47:577][  0]LogStats: FPlatformStackWalk::StackWalkAndDump -  0.311 s
[2021.10.22-01.24.47:577][  0]LogOutputDevice: Error: === Handled ensure: ===
[2021.10.22-01.24.47:577][  0]LogOutputDevice: Error: 
[2021.10.22-01.24.47:577][  0]LogOutputDevice: Error: Ensure condition failed: database [File:G:/UnrealProjects/PartlyAtomic/HiShop/Plugins/ArticyImporterForUnreal/Source/ArticyRuntime/Private/ArticyRef.cpp] [Line: 39]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: Could not get articy database
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: Stack: 
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac3425b99 UE4Editor-ArticyRuntime.dll!<lambda_3a7a50a622fa432ba6c571c9f511ed74>::operator()() [G:\UnrealProjects\PartlyAtomic\HiShop\Plugins\ArticyImporterForUnreal\Source\ArticyRuntime\Private\ArticyRef.cpp:39]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac3424103 UE4Editor-ArticyRuntime.dll!DispatchCheckVerify<bool,<lambda_3a7a50a622fa432ba6c571c9f511ed74> >() [G:\Epic Games\UE_4.27\Engine\Source\Runtime\Core\Public\Misc\AssertionMacros.h:165]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac33c4489 UE4Editor-ArticyRuntime.dll!FArticyRef::GetObjectInternal() [G:\UnrealProjects\PartlyAtomic\HiShop\Plugins\ArticyImporterForUnreal\Source\ArticyRuntime\Private\ArticyRef.cpp:39]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac337dacc UE4Editor-ArticyRuntime.dll!FArticyRef::GetObject<UArticyObject>() [G:\UnrealProjects\PartlyAtomic\HiShop\Plugins\ArticyImporterForUnreal\Source\ArticyRuntime\Public\ArticyRef.h:150]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac33e2931 UE4Editor-ArticyRuntime.dll!UArticyFlowPlayer::SetCursorToStartNode() [G:\UnrealProjects\PartlyAtomic\HiShop\Plugins\ArticyImporterForUnreal\Source\ArticyRuntime\Private\ArticyFlowPlayer.cpp:356]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffac33aa7ae UE4Editor-ArticyRuntime.dll!UArticyFlowPlayer::BeginPlay() [G:\UnrealProjects\PartlyAtomic\HiShop\Plugins\ArticyImporterForUnreal\Source\ArticyRuntime\Private\ArticyFlowPlayer.cpp:28]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaed097362 UE4Editor-Engine.dll!AActor::BeginPlay() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:3557]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaed0a0bdf UE4Editor-Engine.dll!AActor::DispatchBeginPlay() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:3519]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaee4a9dd5 UE4Editor-Engine.dll!AWorldSettings::NotifyBeginPlay() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\WorldSettings.cpp:247]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaed7ec951 UE4Editor-Engine.dll!AGameStateBase::HandleBeginPlay() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\GameStateBase.cpp:205]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaee44de7e UE4Editor-Engine.dll!UWorld::BeginPlay() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:4416]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaee37c951 UE4Editor-Engine.dll!UEngine::LoadMap() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:13264]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaee3285e3 UE4Editor-Engine.dll!UEngine::Browse() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:12463]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffaed80db2e UE4Editor-Engine.dll!UGameInstance::StartGameInstance() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\GameInstance.cpp:584]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f43290 UE4Editor.exe!FEngineLoop::Init() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:4056]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f60e32 UE4Editor.exe!GuardedMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:160]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f610aa UE4Editor.exe!GuardedMainWrapper() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f640cd UE4Editor.exe!LaunchWindowsStartup() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:273]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f75984 UE4Editor.exe!WinMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:320]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ff7c7f7853a UE4Editor.exe!__scrt_common_main_seh() [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffb6ee57034 KERNEL32.DLL!UnknownFunction []
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: [Callstack] 0x00007ffb70d42651 ntdll.dll!UnknownFunction []
[2021.10.22-01.24.47:578][  0]LogOutputDevice: Error: 
[2021.10.22-01.24.47:580][  0]LogStats:                SubmitErrorReport -  0.000 s
[2021.10.22-01.24.48:955][  0]LogStats:                    SendNewReport -  1.376 s
[2021.10.22-01.24.48:955][  0]LogStats:             FDebug::EnsureFailed -  1.689 s

UE 4.25

Hi,
I tryed to import and use the plugin with UE4.25, but it seems unable to update the builde compiling scripts.

Import fails due to hot reload only working with UObject-derived classes, even if a C++ class exists

Hot reloading only works for modules that include at least one UObject-derived class.

If the user converts his Blueprint-only project to a C++ project by adding a "raw" C++ class and then tries to import, the code generation works, but the generation of the assets does not happen since the module won't be recompiled. Workaround: closing the editor, manual recompiling in Visual Studio, starting the editor, force reimport.

Suggested fix:
If no UObject class was found, create a dummy automatically or log an error that tells the user to convert the project to C++ properly first.

Fault found with the help of JCDescy, who reported a related issue.

UE5.3 ArticyXImporter, import causes "modules are missing" error on next editor start

Hello,
I am using the ArticyXImporter tutorial BaseProject. I changed a text in one of the dialogue fragments of the Articy-Project and want to do an import into Unreal.
When I use the importer, afterwards with 100% reproduction rate I get the Unreal error message "The following modules are missing or built with a different engine version:" pointing to the importer tutorial module. The only way to fix this is to do a full clean & rebuild from my Visual Studio.

I have both live-coding and "automatically compile new C++ classes" off in the project settings of the UE project, but still the Articy-Importer triggers a "Compiling C++" message, which somehow alters the project in a way that brakes.

I am using the current "master" git branch of the ArticyXImporter plugin with a Articy Draft X V 4.0.4 and Unreal Engine 5.3.2.

P.S.: The ArticyXImporterForUnreal github repository does not have a "Issues" page, and the contributing.md file links here, so I hope this is the correct place for the issue.

Importer issues when exporting global variables to UE 4.25 Project

Hi,
we're getting the following error when trying to compile the code changes upon exporting the articy project to Unreal.

Fehler	C1083	Datei (Include) kann nicht ge�ffnet werden: "Customizations/ArticyEditorCustomizationManager.h": No such file or directory	Megacity	I:\MegacityProject\Plugins\ArticyImporter\Source\ArticyEditor\Public\ArticyEditorModule.h	10	
Fehler	C2039	"Add" ist kein Member von "TWeakObjectPtr<UMegacityInstructionsVariables,FWeakObjectPtr>".	Megacity	I:\MegacityProject\Source\Megacity\ArticyGenerated\MegacityExpressoScripts.h	63	
Fehler	C2039	"Add" ist kein Member von "TWeakObjectPtr<UMegacityInstructionsVariables,FWeakObjectPtr>".	Megacity	I:\MegacityProject\Source\Megacity\ArticyGenerated\MegacityExpressoScripts.h	63	

This is part of the code it is referring to: unknown

Any help would be greatly appreciated.

Packaged game missing Articy Database?

When packaging the game, I've found the data and debug I get from any instances that used AD to not getting any return data. As if it doesn't have a database. Here is the error log. I also made symbol debug keys to get bare minimum data like name and it gives nothing in return except the error. Is there suppose to be a procedure with packaging the game like copying over certain files? This is a Development build, and I have yet to try Debug or Shipped...but the same thing happens in Standalone Play in Editor.

`[2020.02.29-01.35.57:671][ 0]LogTemp: Warning: Cloning ArticyDatabase.
[2020.02.29-01.35.57:673][ 0]LogOutputDevice: Warning:

Script Stack (3 frames):
Ent_InvItem_C.ExecuteUbergraph_Ent_InvItem
Ent_InvItem_C.AltConstruct
Ent_InvItem_C.UserConstructionScript

[2020.02.29-01.35.58:801][ 0]LogStats: FPlatformStackWalk::StackWalkAndDump - 1.128 s
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: === Handled ensure: ===
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error:
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: Ensure condition failed: AssetData.Num() != 0 [File:O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyDatabase.cpp] [Line: 390]
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: Could not find original asset of ArticyDraftDatabase!
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: Stack:
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9212cd499 UE4Editor-ArticyRuntime.dll!<lambda_12bad6fdd8a9e5b93d3ab4b6456c128b>::operator()() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyDatabase.cpp:390]
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9212cc6f3 UE4Editor-ArticyRuntime.dll!DispatchCheckVerify<bool,<lambda_12bad6fdd8a9e5b93d3ab4b6456c128b> >() [O:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Misc\AssertionMacros.h:162]
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff921272c89 UE4Editor-ArticyRuntime.dll!UArticyDatabase::GetOriginal() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyDatabase.cpp:390]
[2020.02.29-01.35.58:801][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff92126e00c UE4Editor-ArticyRuntime.dll!UArticyDatabase::Get() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyDatabase.cpp:138]
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff921271f41 UE4Editor-ArticyRuntime.dll!FArticyRef::GetObjectInternal() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyRef.cpp:38]
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9212321dc UE4Editor-ArticyRuntime.dll!FArticyRef::GetObject() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Public\ArticyRef.h:82]
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff92125e502 UE4Editor-ArticyRuntime.dll!UArticyFunctionLibrary::ArticyRef_GetObject() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Private\ArticyFunctionLibrary.cpp:14]
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff921299a00 UE4Editor-ArticyRuntime.dll!UArticyFunctionLibrary::execArticyRef_GetObject() [O:\NaughtyShinobi\SOIGame\Plugins\ArticyImporter\Source\ArticyRuntime\Public\ArticyFunctionLibrary.h:18]
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff969febac8 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1e00e2 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fcbc1 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a214be6 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe98d UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1d5efb UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe6a9 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe98d UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1d5efb UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe6a9 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe98d UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fe378 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff969febac8 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96a1fdf07 UE4Editor-CoreUObject.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff967729ff3 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96772a10b UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96770a40e UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff967731252 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff967f29916 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff96880ec90 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9687ed8cb UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9686fd6b4 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9686a1d97 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff967d48b92 UE4Editor-Engine.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff622672bc1 UE4Editor.exe!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff62268544a UE4Editor.exe!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff6226855ca UE4Editor.exe!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff62269316c UE4Editor.exe!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff622695b8e UE4Editor.exe!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9adfd7bd4 KERNEL32.DLL!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error: [Callstack] 0x00007ff9aedeced1 ntdll.dll!UnknownFunction []
[2020.02.29-01.35.58:802][ 0]LogOutputDevice: Error:
[2020.02.29-01.35.58:806][ 0]LogStats: SubmitErrorReport - 0.000 s
[2020.02.29-01.36.00:244][ 0]LogStats: SendNewReport - 1.438 s
[2020.02.29-01.36.00:244][ 0]LogStats: FDebug::EnsureFailed - 2.570 s`

Errors during UE5 FullReimport

Hello,

I have been trying to import my articy project into unreal, with both marketplace plugin, and compiled github version, on a empty unreal project

Frist problem: not detectin .articyue4 file

  1. Export project to unreal´s content folder
  2. Open UE5, then open Articy Menu
  3. Full reimport

LogArticyEditor: Warning: Could not find articy import data asset.
LogArticyEditor: Warning: Attempting to create from .articyue4 export file
LogArticyEditor: Error: Failed creation of import data asset.
No .articyue4 file found in directory /Game. Please check the plugin settings for the correct articy directory and try again.

.articyue4 does exists, I can skip this problem by creating a new folder called "ArticyAssets" and exporting to Content/ArticyAssets
Then change articy directory from project settings to "/Game/ArticyAssets"

Now try the full reimport again, after some minutos of compiling c++ code, this error is prompted:

image

And this is the complete log:

LogArticyEditor: Warning: Could not find articy import data asset.
LogArticyEditor: Warning: Attempting to create from .articyue4 export file
LogFactory: FactoryCreateFile: ArticyImportData with ArticyJSONFactory (0 0 C:/Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/Content/ArticyAssets/PruebaPequenya.articyue4)
LogArticyEditor: Skipped import of Point as it is a predefined type (FVector2D).
LogArticyEditor: Skipped import of Color as it is a predefined type (FLinearColor).
LogArticyEditor: Skipped import of Size as it is a predefined type (FArticySize).
LogArticyEditor: Skipped import of Rect as it is a predefined type (FArticyRect).
LogArticyEditor: Skipped import of PreviewImage as it is a predefined type (UArticyPreviewImage).
LogArticyEditor: Skipped import of Transformation as it is a predefined type (UArticyTransformation).
LogArticyEditor: Skipped import of OutgoingConnection as it is a predefined type (UArticyOutgoingConnection).
LogArticyEditor: Skipped import of IncomingConnection as it is a predefined type (UArticyIncomingConnection).
LogArticyEditor: Skipped import of OutputPin as it is a predefined type (UArticyOutputPin).
LogArticyEditor: Skipped import of InputPin as it is a predefined type (UArticyInputPin).
LogArticyEditor: Skipped import of LocationAnchor as it is a predefined type (FArticyLocationAnchor).
Candidate modules for hot reload:
articyPruebas
Launching UnrealBuildTool... [C:/Program Files/Epic Games/UE_5.0/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe -ModuleWithSuffix=articyPruebas,0545 articyPruebasEditor Win64 Development -Project="C:/Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/articyPruebas.uproject" "C:/Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/articyPruebas.uproject" -IgnoreJunk]
Warning: Starting HotReload took 0.0s.
Cmd: OBJ SAVEPACKAGE PACKAGE="/Game/ArticyAssets/PruebaPequenya" FILE="../../../../../../Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/Content/ArticyAssets/PruebaPequenya.uasset" SILENT=true
LogPackageLocalizationCache: Processed 31 localized package path(s) for 1 prioritized culture(s) in 0.005658 seconds
LogSavePackage: Moving output files for package: /Game/ArticyAssets/PruebaPequenya
LogSavePackage: Moving '../../../../../../Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/Saved/PruebaPequenya03D71A9840E7C0B71132E69C510B0AB0.tmp' to '../../../../../../Users/pelem/Desktop/PruebasArticy/proyectoue4/articyPruebas/Content/ArticyAssets/PruebaPequenya.uasset'
LogArticyEditor: Warning: Successfully created import data asset. Continuing process.
AssetCheck: New page: Asset Save: PruebaPequenya
LogContentValidation: Display: Validating ArticyImportData /Game/ArticyAssets/PruebaPequenya.PruebaPequenya
LogSlate: Window 'Articy import error' being destroyed
Message dialog closed, result: Ok, title: Articy import error, text: Aborting import process. No cache available to restore. Deleting import asset but leaving generated code intact. Please delete manually in Source/ArticyGenerated if necessary and rebuild. Reason: OtherCompilationError.
LogUObjectHash: Compacting FUObjectHashTables data took 0.96ms
LogUObjectHash: Compacting FUObjectHashTables data took 0.63ms
LogUObjectHash: Compacting FUObjectHashTables data took 0.50ms
LogUObjectHash: Compacting FUObjectHashTables data took 0.33ms
CompilerResultsLog: New page: Compilation - Apr 19, 2022, 2:46:13 AM
CompilerResultsLog: Log file: C:\Users\pelem\AppData\Local\UnrealBuildTool\Log.txt
CompilerResultsLog: Invalidating makefile for articyPruebasEditor (working set of source files changed)
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Plugins\ArticyImporterForUnreal-master\ArticyImporter.uplugin: warning: Unknown platform Win32 while parsing allow list for module descriptor ArticyRuntime
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Plugins\ArticyImporterForUnreal-master\ArticyImporter.uplugin: warning: Unknown platform Win32 while parsing allow list for module descriptor ArticyEditor
CompilerResultsLog: Parsing headers for articyPruebasEditor
CompilerResultsLog: Running UnrealHeaderTool "C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\articyPruebas.uproject" "C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Intermediate\Build\Win64\articyPruebasEditor\Development\articyPruebasEditor.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -WarningsAsErrors -abslog="C:\Users\pelem\AppData\Local\UnrealBuildTool\Log_UHT.txt" -installed
CompilerResultsLog: Reflection code generated for articyPruebasEditor in 3,2109444 seconds
CompilerResultsLog: Building articyPruebasEditor...
CompilerResultsLog: Using Visual Studio 2019 14.29.30140 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
CompilerResultsLog: [Adaptive Build] Excluded from articyPruebas unity file: articyPruebas.cpp, MyActor.cpp
CompilerResultsLog: Determining max actions to execute in parallel (4 physical cores, 8 logical cores)
CompilerResultsLog: Executing up to 4 processes, one per physical core
CompilerResultsLog: Building 8 actions with 4 processes...
CompilerResultsLog: [1/8] Compile PruebapequenyaExpressoScripts.gen.cpp
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Source\articyPruebas\ArticyGenerated\PruebapequenyaExpressoScripts.h(7): fatal error C1083: Cannot open include file: 'ArticyRuntime/Public/ArticyExpressoScripts.h': No such file or directory
CompilerResultsLog: [2/8] Compile PruebapequenyaDatabase.gen.cpp
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Source\articyPruebas\ArticyGenerated\PruebapequenyaDatabase.h(7): fatal error C1083: Cannot open include file: 'ArticyRuntime/Public/ArticyDatabase.h': No such file or directory
CompilerResultsLog: [3/8] Compile PruebapequenyaArticyTypes.gen.cpp
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Source\articyPruebas\ArticyGenerated\PruebapequenyaArticyTypes.h(7): fatal error C1083: Cannot open include file: 'ArticyRuntime/Public/ArticyBaseInclude.h': No such file or directory
CompilerResultsLog: [4/8] Compile PruebapequenyaInterfaces.gen.cpp
CompilerResultsLog: [5/8] Compile PruebapequenyaGlobalVariables.gen.cpp
CompilerResultsLog: C:\Users\pelem\Desktop\PruebasArticy\proyectoue4\articyPruebas\Source\articyPruebas\ArticyGenerated\PruebapequenyaGlobalVariables.h(7): fatal error C1083: Cannot open include file: 'ArticyRuntime/Public/ArticyGlobalVariables.h': No such file or directory
LogMainFrame: MainFrame: Module compiling took 148.282 seconds
Warning: HotReload failed, recompile failed

I am using Articy free version, we are currently working on integrating articy conversations on our game, so this is blocking our develoment :(

Here is the link to my dummy articy project, we need to get it working with our actual project, but this is the first step
PruebaPequenya.zip

Thanks!

Our studio has upgraded your plugin to Unreal Engine version 4.24. We would like to upload, but first discuss some very strange work-arounds we've had to make.

we don't want any compensation. Just want this plugin to stay current with Unreal. We had to add a large list of external dependencies to the Visual studio solution (manually adding each path one at a time), and we also have to fix this code every time we re-import and compile the project manually in VS:

`UENUM(BlueprintType)
enum
/** UENUM generated form ArticyObjectDef CursorifConditionFalse */
class EMyProjectCursorifConditionFalse : uint8
{
Value_00 = 0, //this was added to get the code to compile
Value_01 = 1,
Value_02 = 2,
Value_03 = 3,
Value_04 = 4,
Value_05 = 5,
Value_06 = 6,
Value_07 = 7,
};

/** -------------------------------------------------------------------------------- */

UENUM(BlueprintType)
enum
/** UENUM generated form ArticyObjectDef CursorifConditionTrue */
class EMyProjectCursorifConditionTrue : uint8
{
Value_00 = 0, //this was added to get the code to compile
Value_01 = 1,
Value_02 = 2,
Value_03 = 3,
Value_04 = 4,
Value_05 = 5,
Value_06 = 6,
Value_07 = 7,
};`

Works with 4.18

Just to let you know...
I tried it yesterday with the 4.18 code and it compiles and seems to work. At least all my test are working just as fine as in 4.17.

Maybe in the next weeks, I'll run more tests and implementations.

So long and God bless you

Calling the Play function after an 'Instruction' pause leads to an incorrect flow.

Hello.

Please tell me if the following is a bug or my mistake.
(If the following are inappropriate, I apologise.)

I have created the following flow in Articy.
1

"Instruction" has been added to "Pause On" and the process is simply to call the Play function.
2
3

I expect to see 'A' in the first conversation in this dialogue, but the result is 'B'.
4

Why is "Instruction" added to the Pause target?

Because I want to perform Latent processing.
The Deley node is probably the easiest to understand.
I want to write "Delay(2.0);" in the Instruction Node of Articy.
If you have a better way to do this, please let me know.

What we tried.

  • If not Pause on "Instruction", the flow follows as expected.
  • If another Dialog Fragment is added between the "Instruction" node and the Dialog Fragment node, the expected flow is followed even if Pause is performed on "Instruction".

Version information.

  • Articy:draft3 3.2.2
  • UnrealEngine 5.3.2
  • Articy3ImporterForUnreal 1.7.1 (c733398)

How to read the content/field of an entity

Hello,

I know this question may be early, but I think it's good to ask it anyway.

Assuming I created an entity with a custom template (using a custom field definition, so no standard template, but if needed I could use a standard one for the test) etc. in Articy to define the gameplay values. Let's say the entity has the two field "LP" and "Magic" with int values.

I export the information to UE4 from Articy and import it in UE4.

I try getting the object with "GetArticyDB" and "GetObjectByName" via Blueprint.
How can I access the gameplay values defined for my entity?

Thanks and God bless you
Tobias

setProp with string properties fails to compile C++ in UE5.

Using an Expresso instruction in Articy ( such as setProp(getObj("Quest1"), "Quest_Properties.Description", "hello") ) fails to compile C++ in UE5. I get a popup message within the UE5 editor saying:

"Aborting import process. No cache available to restore. Deleting import asset but leaving generated code intact. Please delete manually in Source/ArticyGenerated if necessary and rebuild. Reason: OtherCompilationError."

Using setProp for boolean or integer properties appears to work just fine.

Linker Error on GetInputPins Access

I'm trying to create my own ArticyFlowPlayer. Unfortunately when trying to access input pins, while the compilation passes, the build fails with a linker error.

void UQuestFlowPlayer::Play(UObject* const Node)
{
	TQueue<UObject*> NodesToProcess;
	NodesToProcess.Enqueue(Node);

	while (!NodesToProcess.IsEmpty())
	{
		auto CurrentNode = *NodesToProcess.Peek();
		NodesToProcess.Pop();

		auto result = this->OnPlayerPaused.Execute(CurrentNode);

		// If the listener said the execution shouldn't continue, the execution shouldn't
		// continue.
		if (!result)
		{
			continue;
		}

		if (static_cast<UObjectBase*>(CurrentNode)->GetClass()->IsChildOf(UArticyFlowFragment::StaticClass()))
		{
			auto FlowFragment = static_cast<UArticyFlowFragment*>(CurrentNode);
			auto ArticyInputPins = FlowFragment->GetInputPins(); // <== linker fails if this line is not commented

From what I could tell it's caused by the fact the implementation is not exported as API, and is defined in the header. So adding just the ARTICYRUNTIME_API isn't enough. The PR is just extracting the code in it's own CPP, so it can be exposed as a normal API.

For some reason the output pins are in their own CPP file, so no change is needed there.

With this PR: #37 it works fine.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.