Packaging editor Plugin

Hi,

Hope someone can help me hear as been battling away with this for hours.

I have a plugin that is made up of a standard and editor module to create custom SkelControl nodes. It works great in the editor. However, when I try to package this plugin to work in standalone it doesn’t seem to work. I get this output in the log file:

LogLinker:Warning: Can't find file '/Script/Synertial'
LogUObjectGlobals:Warning: Failed to load '/Script/Synertial': Can't find file '/Script/Synertial'
LogLinker:Warning: Can't find file for asset '/Script/Synertial' while loading NULL.
LogUObjectGlobals:Warning: Failed to load '/Script/Synertial': Can't find file for asset '/Script/Synertial' while loading NULL.
LogLinker:Warning: CreateExport: Failed to load Parent for AnimBlueprintGeneratedClass /Game/Synertial/Synertial_FullBody.Synertial_FullBody_C
LogLinker:Warning: CreateExport: Failed to load Parent for AnimBlueprintGeneratedClass /Game/Synertial/Synertial_FullBody.Synertial_FullBody_C
LogLinker:Warning: CreateExport: Failed to load Parent for AnimBlueprintGeneratedClass /Game/Synertial/Synertial_FullBody.Synertial_FullBody_C
LogLinker:Warning: CreateExport: Failed to load Parent for AnimBlueprintGeneratedClass /Game/Synertial/Synertial_FullBody.Synertial_FullBody_C

So it looks like it’s not including my plugin in the build? My .uplugin settings:


"CanContainContent": true,
	"IsBetaVersion": false,
	"Installed": true,
	"Modules": 
		{
			"Name": "Synertial",
			"Type": "Developer",
			"LoadingPhase": "PreDefault"
		},
		{
			"Name": "SynertialEditor",
			"Type": "Editor",
			"LoadingPhase": "PostEngineInit"
		}
	]

I’m building the project with my plugin in the Engine/Developer folder as instructed here: A new, community-hosted Unreal Engine Wiki - Announcements - Epic Developer Community Forums

I’ve experimented with type Runtime and putting the Plugin in the Engine/Runtime directory but I get LINK : fatal error LNK1181: cannot load input file ‘HACD_64.lib’ errors when trying to build as ‘Development Game’.

At a real loss here and have done a lot of google searching on this one to no avail.

As a note, my plugin also relies on a ThirdParty .dll but I don’t think that is causing the problem here. Again, everything works beautifully well in the editor (which is 4.12.5 btw).

Thanks,

First point on that link:

Does that not mean the Plugin must reside in the Engine directory rather than your project directory?

As stated I moved my Plugin from my project space to C:\Program Files (x86)\Epic Games\4.12\Engine\Plugins. I assumed this is what that point was making?

Still struggling with this one. Any ideas anyone? Are there any steps I’ve missed out to package my plugin or any more info I can give to get some pointers?

Thanks!

Sorry, another bump on this. Still having the same issues. Surely others must have tried something similar, packaging editor module in a plugin?

It’s ok to have your plug-in in your project’s Plugins directory. It doesn’t need to be an Engine plug-in.

Your .uplugin file looks fine. I’d set the Type of the Synertial module to Runtime though.

Check your log if the plug-in and the module is actually being loaded, or if there are any errors, or if it’s not showing up in the log at all.
Make sure the plug-in is enabled.

Is your project a code project, or a BP project?
Can you post the contents of your module’s Build.cs file?

Hi, sorry just getting back, have been away from PC until now.

OK so if I switch to Runtime I get an error that prevents the standalone from launching:

“Plugin ‘Synertial’ failed to load because module ‘Synertial’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project.” The error in the log: ModuleManager: Module ‘Synertial’ not found - its StaticallyLinkedModuleInitializers function is null.

Here is the Build.cs from the plugin module:



// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.IO;

public class Synertial : ModuleRules
{
    private string ModulePath
    {
        get { return ModuleDirectory; } //.../ThirdParty/ }
    }

    private string ThirdPartyPath
    {
        get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
    }

    public Synertial(TargetInfo Target)
	{
        //Type = ModuleType.External;

        if (Target.Platform == UnrealTargetPlatform.Win64)
        {
            // Add the import library
            string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "Win64" : "Win32";
            string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", ".."));
            string libPath = Path.Combine(BaseDirectory, "ThirdParty", "SynertialSDK", "lib", PlatformString);
            PublicLibraryPaths.Add(libPath);
            PublicAdditionalLibraries.Add("SynGame.lib");

            // Delay-load the DLL, so we can load it from the right place first
            PublicDelayLoadDLLs.Add("SynGame.dll");
        }

        PublicIncludePaths.AddRange(
			new string] {
				"Synertial/Public",
                Path.Combine(ThirdPartyPath, "SynertialSDK", "include"),
				// ... add public include paths required here ...
			}
			);
				
		
		PrivateIncludePaths.AddRange(
			new string] {
				"Synertial/Private",
                Path.Combine(ThirdPartyPath, "SynertialSDK", "include"),
				// ... add other private include paths required here ...
			}
			);
			
		
		PublicDependencyModuleNames.AddRange(
			new string]
			{
                "Engine",
                "Core",
                "CoreUObject",
                "InputCore",
                "Projects",
                "AnimGraphRuntime",
                "BlueprintGraph",
                "Slate",
                "SlateCore",
				// ... add other public dependencies that you statically link with here ...
			}
			);
			
		
		PrivateDependencyModuleNames.AddRange(
			new string]
			{
                "InputCore",
                "SlateCore",
                "UnrealEd",
                "GraphEditor",
                "PropertyEditor",
                "EditorStyle",
                 "HTTP",
                 "AnimGraph",
				// ... add private dependencies that you statically link with here ...	
			}
			);
    }
}



From the plugin editor module:



// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.IO;

public class SynertialEditor : ModuleRules
{
    public SynertialEditor(TargetInfo Target)
	{
        PublicIncludePaths.AddRange(
			new string] {
				"SynertialEditor/Public",
				// ... add public include paths required here ...
			}
			);
				
		
		PrivateIncludePaths.AddRange(
			new string] {
                "SynertialEditor/Private",
				// ... add other private include paths required here ...
			}
			);
			
		
		PublicDependencyModuleNames.AddRange(
			new string]
			{
                "Engine",
                "Core",
                "CoreUObject",
                "InputCore",
                "Projects",
                "Synertial",
                "AnimGraphRuntime",
                "BlueprintGraph",
                "Slate",
                "SlateCore",
				// ... add other public dependencies that you statically link with here ...
			}
			);
			
		
		PrivateDependencyModuleNames.AddRange(
			new string]
			{
                "UnrealEd",
                "InputCore",
                "SlateCore",
                "GraphEditor",
                "PropertyEditor",
                "EditorStyle",
                "HTTP",
                "AnimGraph",
                "Synertial",
				// ... add private dependencies that you statically link with here ...	
			}
			);
    }
}



And finally from my demo game:



// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;
using System.Collections.Generic;

public class SynertialDemoTarget : TargetRules
{
	public SynertialDemoTarget(TargetInfo Target)
	{
		Type = TargetType.Game;
	}

	//
	// TargetRules interface.
	//

	public override void SetupBinaries(
		TargetInfo Target,
		ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations,
		ref List<string> OutExtraModuleNames
		)
	{
		OutExtraModuleNames.AddRange( new string] { "SynertialDemo" } );
	}
}



The project is a code project and the plugin is enabled in the plugin editor window.

Appreciate the support on this, thanks!

That error means that the Synertial module wasn’t compiled.

Are you compiling the correct project, i.e. your code project that has the plug-in enabled?
Can you paste the code of your module’s .cpp file?1