UE4/UE5 打包发布与补丁

目录

必要说明:

一、准备

二、项目

1.打开插件

2.添加模块到 xxx(项目名字).Build.cs 文件

3.创建GameInstance(C++类)

4.创建和配置蓝图文件

4.1.创建蓝图 Gameinstance 并继承 MyGameInstance

4.2.配置下载文件块

4.3.创建GameMode(蓝图即可)

 4.4.创建一个空白的关卡

5.创建DataAsset

6.项目设置

 6.1 DefaultGame.ini

6.2 ProjectSetting

7.项目打包设置

三、服务器

1.安装Web服务器

2.配置Web服务器

2.1.打开服务器

2.2.选择刚刚创建的服务器

2.3.选择MIME类型

2.4.在右侧空白的地方: 右键 —> 点击添加,然后填入如下信息

3.配置Web服务器的文件夹

四、启动服务器

五、测试项目


必要说明:

 本文案例仅适用于C++(加蓝图)开发的UE项目

部分代码直接拷贝官方文档的,但是会有一些避坑的修改

一、准备

1.创建一个空的C++项目(随便创建一个空的)

2.准备一个服务器,或者直接在本机上建立服务器也可以(本文使用的是Windows server 2019)

二、项目

1.打开插件

2.添加模块到 xxx(项目名字).Build.cs 文件

PrivateDependencyModuleNames.AddRange(
    new string[]
    {
        "ChunkDownloader"
    });

3.创建GameInstance(C++类)

//本文直接使用 MyGameInstance 命名

MyGameInstance实现   

.h头文件

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

#pragma once

#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FPatchCompleteDelegate, bool, Succeeded);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FManifestUpdateDelegate, bool, Succeeded);

UCLASS()
class FILEPAKTES_API UMyGameInstance : public UGameInstance
{
	GENERATED_BODY()
public:
	/** Overrides */
	virtual void Init() override;
	virtual void Shutdown() override;

	void OnManifestUpdateComplete(bool bSuccess);

	//获取下载和安装进度
	UFUNCTION(BlueprintPure, Category = "Patching|Stats")
	void GetLoadingProgress(int32& BytesDownloaded, int32& TotalBytesToDownload, float& DownloadPercent, int32& ChunksMounted, int32& TotalChunksToMount, float& MountPercent) const;

	/**启动游戏补丁过程。如果补丁清单不是最新的,则返回false。*/
	UFUNCTION(BlueprintCallable, Category = "Patching")
	bool PatchGame();
protected:
	/**文件块下载过程完成时调用*/
	void OnDownloadComplete(bool bSuccess);

	/**ChunkDownloader加载模式完成时调用*/
	void OnLoadingModeComplete(bool bSuccess);

	/**ChunkDownloader完成挂载文件块时调用*/
	void OnMountComplete(bool bSuccess);

public:
	/**补丁过程成功或失败时触发*/
	UPROPERTY(BlueprintAssignable, Category = "Patching");
	FPatchCompleteDelegate OnPatchComplete;

	//开始下载时触发
	UPROPERTY(BlueprintAssignable, Category = "Patching");
	FManifestUpdateDelegate OnManifestUpdateComp;

	/**要尝试和下载的文件块ID列表*/
	UPROPERTY(EditDefaultsOnly, Category = "Patching")
	TArray<int32> ChunkDownloadList;
protected:
	//Tracks Whether or not our local manifest file is up to date with the one hosted on our website
	bool bIsDownloadManifestUpToDate;
};

.cpp文件

#include "MyGameInstance.h"
#include "ChunkDownloader.h"
#include "Misc/CoreDelegates.h"
#include "AssetRegistryModule.h"

void UMyGameInstance::Init()
{
	Super::Init();

	const FString DeploymentName = "PatchingDemoLive";
    
    //这里是可以配置的,作为版本号使用
	const FString ContentBuildId = "PatchingKey";

	// initialize the chunk downloader
	TSharedRef<FChunkDownloader> Downloader = FChunkDownloader::GetOrCreate();
	Downloader->Initialize("Windows", 8);

	// load the cached build ID
	Downloader->LoadCachedBuild(DeploymentName);

	//注意,这里官方文档是有个坑的
	TFunction<void(bool bSuccess)> UpdateCompleteCallback = [&](bool bSuccess) { OnManifestUpdateComplete(bSuccess); };
	Downloader->UpdateBuild(DeploymentName, ContentBuildId, UpdateCompleteCallback);
}

void UMyGameInstance::Shutdown()
{
	Super::Shutdown();

	// Shut down ChunkDownloader
	FChunkDownloader::Shutdown();
}

void UMyGameInstance::OnManifestUpdateComplete(bool bSuccess)
{
	bIsDownloadManifestUpToDate = bSuccess;
	if (bIsDownloadManifestUpToDate)
	{
		UE_LOG(LogTemp, Display, TEXT("Patch Game to download file pak."));
		PatchGame();
	}
	OnManifestUpdateComp.Broadcast(bSuccess);
}

//注意,这里官方文档,头文件与cpp文件的参数名字不对
void UMyGameInstance::GetLoadingProgress(int32& BytesDownloaded, int32& TotalBytesToDownload, float& DownloadPercent, int32& ChunksMounted, int32& TotalChunksToMount, float& MountPercent) const
{
	//获取ChunkDownloader的引用
	TSharedRef<FChunkDownloader> Downloader = FChunkDownloader::GetChecked();

	//获取加载统计结构体
	FChunkDownloader::FStats LoadingStats = Downloader->GetL
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值