• UE5 中 LiveLink 的开发全流程教程


    注意,需要有源代码版本的 Unreal Engine,而不是从游戏 Launcher 中下载的 Unreal 版本。

    本文使用是 Unreal Engine 5.1 版本。关于一些基础 API 介绍,可以参考之前的一篇

    起点

    可以将 Engine\Source\Programs\BlankProgram 作为模板拷贝一份,然后重新命名(可以使用文本编辑器进行全局替换之类的),这里命名成 CircleLiveLinkProvider,作为 Program 的起点。

    使用 GenerateProjectFiles 刷新项目,这样新的 Program 就会出现在 UE 的工程中。

    // CircleLiveLinkProvider.cpp
    #include "CircleLiveLinkProvider.h"
    
    #include "RequiredProgramMainCPPInclude.h"
    
    DEFINE_LOG_CATEGORY_STATIC(LogCircleLiveLinkProvider, Log, All);
    
    IMPLEMENT_APPLICATION(CircleLiveLinkProvider, "CircleLiveLinkProvider");
    
    INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
    {
       
    	GEngineLoop.PreInit(ArgC, ArgV);
    	UE_LOG(LogCircleLiveLinkProvider, Display, TEXT("Hello World"));
    	FEngineLoop::AppExit();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    编译一下,在 Engine\Binaries\Win64(应该是对应平台下,我用的是 Windows,所以是在 Win64)文件夹下,会有对应编译好的可执行文件。

    脱离引擎

    如果想让程序独立引擎进行运行,需要使用和 Unreal 源码组织结构相同的目录层次结构。如果这时候你把生成的 .exe 拷贝出来运行,是会出现警告的,会提示没有游戏配置和引擎配置。

    LogPaths: Warning: No paths for game localization data were specifed in the game configuration.
    LogInit: Warning: No paths for engine localization data were specifed in the engine configuration.
    LogCircleLiveLinkProvider: Display: Hello World
    
    • 1
    • 2
    • 3

    但是如果在 Engine\Binaries\Win64 文件夹下进行运行(也就是程序生成的目录),并不会出现这种问题。

    这种裸 exe 其实是会有一些副作用的,比如我的电脑上,运行之后,会在 C:\Engine 中生成日志文件。

    要想真正独立运行,我们需要把 .exe,放入到一个 伪装 的 Engine 下面。我们按照 Engine\Binaries\Win64 创建文件夹,并把引擎 Engine.和游戏配置拷贝出来。

    CircleLiveLinkProvider
    └─Engine
        ├─Binaries
        │  └─Win64
        │          CircleLiveLinkProvider.exe
        │          CircleLiveLinkProvider.pdb
        │
        └─Config
                Base.ini
                BaseEngine.ini
                BaseGame.ini
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这样这个 Program 就可以独立运行了。运行程序之后,会发现自动在 Engine 文件夹中生成了 ProgramsSaved

    └─Engine
        ├─Binaries
        │  └─Win64
        │          CircleLiveLinkProvider.exe
        │          CircleLiveLinkProvider.pdb
        │
        ├─Config
        │      Base.ini
        │      BaseEngine.ini
        │      BaseGame.ini
        │
        ├─Programs
        │  └─CircleLiveLinkProvider
        │      └─Saved
        │          ├─Config
        │          │  ├─CrashReportClient
        │          │  │  └─UECC-Windows-69032E0743138D60D19DF9BAA8B91E3E
        │          │  │          CrashReportClient.ini
        │          │  │
        │          │  └─WindowsEditor
        │          │          Engine.ini
        │          │          Game.ini
        │          │
        │          └─Logs
        │                  CircleLiveLinkProvider.log
        │
        └─Saved
            └─Config
                └─WindowsEditor
                        Manifest.ini
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    可以看到,日志就会出现在我们创建的文件夹中,而不会出现在系统默认(缺省)的执行路径中。

    Build.cs

    引入 LiveLink 所需的依赖,LiveLink 默认依赖 Udp,所以需要引入 MessagingUdpMessaging

    // Copyright Epic Games, Inc. All Rights Reserved.
    
    using UnrealBuildTool;
    
    public class CircleLiveLinkProvider : ModuleRules
    {
       
    	public CircleLiveLinkProvider(ReadOnlyTargetRules Target) : base(Target)
    	{
       
    		PublicIncludePaths.Add("Runtime/Launch/Public");
    
    		PrivateIncludePaths.Add("Runtime/Launch/Private");      // For LaunchEngineLoop.cpp include
    
    		PrivateDependencyModuleNames.AddRange(new[]
    		{
       
    			"Core",
    			"CoreUObject",
    			"Projects",
    			"LiveLinkMessageBusFramework",
    			"LiveLinkInterface",
    			"Messaging",
    			"UdpMessaging",
    		});
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    Target.cs

    // Copyright Epic Games, Inc. All Rights Reserved.
    
    using UnrealBuildTool;
    using System.Collections.Generic;
    
    [SupportedPlatforms(UnrealPlatformClass.All)]
    public class CircleLiveLinkProviderTarget : TargetRules
    {
       
    	public CircleLiveLinkProviderTarget(TargetInfo Target) : base(Target)
    	{
       
    		Type = TargetType.Program;
    		IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
    		LinkType = TargetLinkType.Monolithic;
    		LaunchModuleName = "CircleLiveLinkProvider";
    
    		// Lean and mean
    		bBuildDeveloperTools = false;
    
    		// Neve
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    练[极客大挑战 2019]BuyFlag
    程序员常用linux命令
    OpenCV计算机视觉学习(14)——浅谈常见图像后缀(png, jpg, bmp)的区别(opencv读取语义分割mask的坑)
    电商小程序09活动管理
    微信小程序渲染层与逻辑层交互原理
    数据结构与算法 | 二叉树(Binary Tree)
    基于 Flink CDC 实现海量数据的实时同步和转换
    Vant组件库 引入 阿里矢量图 添加自己喜欢的 ICON
    外贸展示型网站设计
    Powerful number
  • 原文地址:https://blog.csdn.net/guyu2019/article/details/128173286