/UDCore

An open-source Unreal Engine plugin that provides quality-of-life functionality to developers.

Primary LanguageC++MIT LicenseMIT

UDCore

UDCore (or Unreal Directive Core), is an open-source Unreal Engine plugin that's designed from the ground-up to provide quality-of-life functionalities to enhance the development experience.

This plugin was started by Dylan "Tezenari" Amos as part of the Unreal Directive initiative to empower Unreal Engine developers with knowledge and tools to better allow them to build amazing things.

UDCore's philosophy revolves around the following --

  • Adherence to Best Practices - Every feature in UDCore is designed to be efficient, easy to read, and aligned with best development practices, making it simple for developers to learn from, replicate, or extend.
  • Enhancing Workflow Efficiency - UDCore is built to streamline development by exposing hidden Unreal Engine editor features, introducing new functionality, and simplifying existing tools to boost productivity.
  • Universal Compatibility - UDCore's core functionality is primarily developed in C++, ensuring it is accessible and usable across C++, Blueprints and Python, making it versatile for any project.

This plugin will be updated sporadically with new functionality.

Read The Documentation

Requirements

  • Software: Unreal Engine 5.3 ~ 5.4
  • Platform: Windows

Features

  • Async Tasks - New functionality to perform common tasks asynchronously.
  • String/Text Utilities - Functions to handle and manipulate strings and text.
  • Editor Actor Subsystem - A plethora of utilities and filters to that improves upon the Editor Actor Subsystem.
  • Enhanced Input - New functions to simplify and improve Enhanced Input system.

Installation

Instruction on how to install the UDCore plugin. I recommend checking out the Quick Start page over on the documentation website.

Option 1: Plugin Downloader

UDCore can be installed directly by using the Plugin Downloader plugin on the marketplace.

  1. Install Plugin Downloader from the Unreal Engine Marketplace

  2. Enable the Plugin Downloader plugin

    1. Open your Unreal Engine project.
    2. Go to Edit -> Plugins.
    3. Search for Plugin Downloader and enable it.
    4. Restart the Unreal Engine editor.
  3. Download UDCore

    1. Go to Edit -> Plugins

    2. Click on Download in the upper left of the Plugins window

    3. Enter the following info in the Download Plugin window

      1. User: UnrealDirective
      2. Repo: UDCore
      3. Branch: main
    4. Click on Download in the bottom right of the Download Plugin window

    5. Wait for download to complete

    6. Restart the Unreal Engine editor when prompted

  4. Enable the UDCore plugin

    1. Open your Unreal Engine project.
    2. Go to Edit -> Plugins.
    3. Search for Plugin Downloader and enable it.
    4. Restart the Unreal Engine editor.

Option 2: Git Clone

  1. Clone the repository:

    git clone https://github.com/UnrealDirective/UDCore.git
  2. Copy the plugin to your Unreal Engine project:

    • Navigate to your Unreal Engine project's Plugins directory.
    • Copy the UDCore folder into the Plugins directory.
  3. Enable the plugin:

    • Open your Unreal Engine project.
    • Go to Edit > Plugins.
    • Search for UDCore and enable it.
    • Restart the Unreal Engine editor.

Usage

Here are examples on how you can go about using some of the functions in UDCore. For more detailed information, please check out the documentation.

AI Utilities

  • Async Move to Location:

    .cpp
    #include "AI/UDAT_MoveToLocation.h"
    #include "GameFramework/Controller.h"
    #include "GameFramework/Actor.h"
    
    void AExampleCharacter::MovePlayerToLocation()
    {
        UWorld* World = GetWorld();
        AController* Controller = GetController();
        const FVector Destination(100.0f, 200.0f, 300.0f);
        constexpr float AcceptanceRadius = 100.0f;
        constexpr bool bDebugLineTrace = false;
    
        UUDAT_MoveToLocation* MoveToLocationTask = UUDAT_MoveToLocation::MoveToLocation(
            World,
            Controller,
            Destination,
            AcceptanceRadius,
            bDebugLineTrace);
    
        if (MoveToLocationTask)
        {
            MoveToLocationTask->Completed.AddDynamic(this, &ThisClass::OnMoveToLocationCompleted);
        }
    }
    
    void AExampleCharacter::OnMoveToLocationCompleted(bool bSuccess)
    {
        // Called when UUDAT_MoveToLocation has completed with either a success or fail.
        // Add your logic here.
    }

String Manipulation

  • Contains Letters:

    FString StringToCheck = "Example123"
    bool bHasLetters = UUDCoreFunctionLibrary::ContainsLetters(StringToCheck);
  • Contains Numbers:

    FString StringToCheck = "Example123"
    bool bHasNumbers = UUDCoreFunctionLibrary::ContainsNumbers(StringToCheck);
  • Filter Characters:

    FString StringToCheck = "Example 123 !@#"
    bool bFilterOutLetters = false;
    bool bFilterOutNumbers = false;
    bool bFilterOutSpecialCharacters = true;
    bool bFilterOutSpaces = true;
    
    // "Example 123 !@#" would become "Example123"
    FString FilteredString = UUDCoreFunctionLibrary::FilterCharacters(
       StringToCheck,
       bFilterOutLetters,
       bFilterOutNumbers,
       bFilterOutSpecialCharacters,
       bFilterOutSpaces);

Text Utilities

  • Is Not Empty:

    FText TextToCheck = "Example123"
    bool bIsNotEmpty = UUDCoreFunctionLibrary::IsNotEmpty(TextToCheck);

Editor Actor Subsystem

  • Focus Actors In Viewport:

    TArray<AActor*> ActorsToFocus;
    bool bFocusInstantly = true;
    
    // Populate ActorsToFocus with actors
    UUDCoreEditorActorSubsystem::FocusActorsInViewport(ActorsToFocus, bFocusInstantly);
  • Get All Level Classes:

    TArray<UClass*> LevelClasses = UUDCoreEditorActorSubsystem::GetAllLevelClasses();
  • Filter Static Mesh Actors:

    TArray<AStaticMeshActor*> StaticMeshActors;
    TArray<AActor*> ActorsToFilter;
    
    // Populate ActorsToFilter with actors
    UUDCoreEditorActorSubsystem::FilterStaticMeshActors(StaticMeshActors, ActorsToFilter);
  • Filter Actors By Name:

    TArray<AActor*> FilteredActors;
    TArray<AActor*> ActorsToFilter;
    FString ActorNameToFind = "ExampleName";
    
    // Populate ActorsToFilter with actors
    UUDCoreEditorActorSubsystem::FilterActorsByName(ActorsToFilter, FilteredActors, ActorNameToFind, EUDInclusivity::Include);
  • Filter Actors By Class:

    TArray<AActor*> FilteredActors;
    TArray<AActor*> ActorsToFilter;
    
    // Populate ActorsToFilter with actors
    UUDCoreEditorActorSubsystem::FilterActorsByClass(ActorsToFilter, FilteredActors, AStaticMeshActor::StaticClass(), EUDInclusivity::Include);

Contributing

We welcome contributions to enhance the functionality of UDCore. Please follow these steps to contribute:

  1. Fork the repository.
  2. Create a new branch (git checkout -b feature/YourFeature).
  3. Commit your changes (git commit -am 'Add new feature').
  4. Push to the branch (git push origin feature/YourFeature).
  5. Create a new Pull Request.

License

UDCore is licensed under the MIT License. See the LICENSE file for more details.

Support

For support, please visit our GitHub Issues page.

Authors

Acknowledgments

  • Special thanks to the Unreal Engine community for their continuous support and contributions.