From 52fd1c0db780b7a5c598e0c224c4a151db768cba Mon Sep 17 00:00:00 2001 From: majianting Date: Mon, 23 Oct 2023 15:56:22 +0800 Subject: [PATCH] add windows unreal sample code --- unreal/win/Config/DefaultEditor.ini | 0 unreal/win/Config/DefaultEngine.ini | 17 ++++ unreal/win/Config/DefaultGame.ini | 3 + unreal/win/Content/Home.umap | Bin 0 -> 35790 bytes unreal/win/Content/UI.uasset | Bin 0 -> 34447 bytes unreal/win/NertcSampleCode.uproject | 17 ++++ unreal/win/Plugins/PlaceHolder.log | 0 unreal/win/README.md | 50 +++++++++++ unreal/win/Source/NertcSampleCode.Target.cs | 14 +++ .../NertcSampleCode/NertcSampleCode.Build.cs | 23 +++++ .../NertcSampleCode/NertcSampleCode.cpp | 6 ++ .../Source/NertcSampleCode/NertcSampleCode.h | 6 ++ .../NertcSampleCodeGameModeBase.cpp | 5 ++ .../NertcSampleCodeGameModeBase.h | 17 ++++ .../NertcSampleCode/NertcUserWidget.cpp | 81 ++++++++++++++++++ .../Source/NertcSampleCode/NertcUserWidget.h | 49 +++++++++++ .../Source/NertcSampleCodeEditor.Target.cs | 14 +++ 17 files changed, 302 insertions(+) create mode 100644 unreal/win/Config/DefaultEditor.ini create mode 100644 unreal/win/Config/DefaultEngine.ini create mode 100644 unreal/win/Config/DefaultGame.ini create mode 100644 unreal/win/Content/Home.umap create mode 100644 unreal/win/Content/UI.uasset create mode 100644 unreal/win/NertcSampleCode.uproject create mode 100644 unreal/win/Plugins/PlaceHolder.log create mode 100644 unreal/win/README.md create mode 100644 unreal/win/Source/NertcSampleCode.Target.cs create mode 100644 unreal/win/Source/NertcSampleCode/NertcSampleCode.Build.cs create mode 100644 unreal/win/Source/NertcSampleCode/NertcSampleCode.cpp create mode 100644 unreal/win/Source/NertcSampleCode/NertcSampleCode.h create mode 100644 unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.cpp create mode 100644 unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.h create mode 100644 unreal/win/Source/NertcSampleCode/NertcUserWidget.cpp create mode 100644 unreal/win/Source/NertcSampleCode/NertcUserWidget.h create mode 100644 unreal/win/Source/NertcSampleCodeEditor.Target.cs diff --git a/unreal/win/Config/DefaultEditor.ini b/unreal/win/Config/DefaultEditor.ini new file mode 100644 index 0000000..e69de29 diff --git a/unreal/win/Config/DefaultEngine.ini b/unreal/win/Config/DefaultEngine.ini new file mode 100644 index 0000000..ccb64eb --- /dev/null +++ b/unreal/win/Config/DefaultEngine.ini @@ -0,0 +1,17 @@ + + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/Engine.Engine] ++ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/NertcSampleCode") ++ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/NertcSampleCode") ++ActiveClassRedirects=(OldClassName="TP_BlankGameModeBase",NewClassName="NertcSampleCodeGameModeBase") + +[/Script/EngineSettings.GameMapsSettings] +EditorStartupMap=/Game/Home.Home +GameDefaultMap=/Game/Home.Home + diff --git a/unreal/win/Config/DefaultGame.ini b/unreal/win/Config/DefaultGame.ini new file mode 100644 index 0000000..aaf77d4 --- /dev/null +++ b/unreal/win/Config/DefaultGame.ini @@ -0,0 +1,3 @@ + +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=2696690546CC2874D37E89AE01510A16 diff --git a/unreal/win/Content/Home.umap b/unreal/win/Content/Home.umap new file mode 100644 index 0000000000000000000000000000000000000000..07f0fe9b4ec4a42694da38eee23cac8bbb6ac507 GIT binary patch literal 35790 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 aDhvO%l59QV2cj*HM1a;R`i=`n-|$}&aiS3b literal 0 HcmV?d00001 diff --git a/unreal/win/Content/UI.uasset b/unreal/win/Content/UI.uasset new file mode 100644 index 0000000000000000000000000000000000000000..e25cee34726b8f8214800062bd7996637f772f7b GIT binary patch literal 34447 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 literal 0 HcmV?d00001 diff --git a/unreal/win/NertcSampleCode.uproject b/unreal/win/NertcSampleCode.uproject new file mode 100644 index 0000000..34f9e4d --- /dev/null +++ b/unreal/win/NertcSampleCode.uproject @@ -0,0 +1,17 @@ +{ + "FileVersion": 3, + "EngineAssociation": "4.25", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "NertcSampleCode", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "UMGEditor", + "UMG" + ] + } + ] +} \ No newline at end of file diff --git a/unreal/win/Plugins/PlaceHolder.log b/unreal/win/Plugins/PlaceHolder.log new file mode 100644 index 0000000..e69de29 diff --git a/unreal/win/README.md b/unreal/win/README.md new file mode 100644 index 0000000..3d17e22 --- /dev/null +++ b/unreal/win/README.md @@ -0,0 +1,50 @@ +您可以通过跑通 Sample Code,体验网易云信音视频通话功能。 + +## 前提条件 +请确认您已完成以下操作: + +>* 创建应用并获取 App Key。 +>* 开通音视频通话 2.0 服务。 + +## 开发环境要求 +请确保开发环境满足以下要求: + +>* 开发环境:Microsoft Visual Studio 2017(推荐)及以上版本 +>* 开发环境:Unreal Engine 4.25(推荐)及以上版本 +>* 操作系统:Microsoft Windows 7 及以上版本 +>* 编译器:Microsoft Visual C++ 2017 及以上版本 + +## 快速跑通 Sample Code +在运行示例项目之前,请在云信控制台中为指定应用开通调试模式。调试模式建议只在集成开发阶段使用,请在应用正式上线前改回安全模式。 + +1. 下载[示例项目](https://github.com/netease-im/G2-API-Examples)源码至您本地,并在SDK [下载中心](https://doc.yunxin.163.com/nertc/sdk-download?platform=UE)下载 Unreal engine Plugin 压缩包。 + +2. 进入到 Unreal Engine Sample Code 的 G2-API-Examples\unreal\win 目录,将 NertcPlugin 压缩包解压到 Plugins\ 目录下 + +3. 右键单击 NertcSampleCode.uproject ,选择 Generate Visual Studio project files, 生成 Visual Studio 解决方案。 + + ![](https://yx-web-nosdn.netease.im/common/45f0c71b96872f6e452e7500a5b5f574/%E5%9B%BE%E7%89%871.png) + +4. 双击上一步骤中生成的 NertcSampleCode.sln,打开解决方案。 + +5. 在 NertcUserWidget.cpp 配置文件中设置您的 AppKey 和 channeName 等信息。 + ![](https://yx-web-nosdn.netease.im/common/514d0000e4e5587d74cad332f4f084db/%E5%9B%BE%E7%89%872.png) + + | 参数 | 是否必选 | 描述| + | ------- | ------- |-----| + |g_appKey | 必选 | 请替换为云信控制台上您的应用对应的 AppKey。获取 AppKey的方法请参见[创建应用并获取 AppKey] (https://doc.yunxin.163.com/console/docs/TIzMDE4NTA?platform=console#%E8%8E%B7%E5%8F%96-appkey)。 | + |g_logPath|必选|设置日志路径| + |g_channelNam|必选|自定义的房间名。运行 Demo 时会加入该房间。| + |g_userID|必选|自定义的用户 ID。需要保证同一个房间中 g_userID 的唯一性。运行 Demo 时会使用该用户 ID 加入房间。| + + +6. 将 NertcSampleCode 工程设置为启动项目,按 F5 编译并运行工程。 + +7. 单击 Play 按钮,运行程序。 + ![](https://yx-web-nosdn.netease.im/common/dff0716bfce56deaef9c07cbf56eedf2/%E5%9B%BE%E7%89%873.png) + +8. 体验 Demo。 + +>* 单击 JoinChannel 按钮加入房间,房间名即为步骤 5 中您设置的 g_channelNam。若有两个人同时加入该房间内,即可进行语音通话。 + +>* 单击 LeaveChannel 离开房间。 diff --git a/unreal/win/Source/NertcSampleCode.Target.cs b/unreal/win/Source/NertcSampleCode.Target.cs new file mode 100644 index 0000000..8576c02 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode.Target.cs @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class NertcSampleCodeTarget : TargetRules +{ + public NertcSampleCodeTarget( TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + DefaultBuildSettings = BuildSettingsVersion.V2; + ExtraModuleNames.AddRange( new string[] { "NertcSampleCode" } ); + } +} diff --git a/unreal/win/Source/NertcSampleCode/NertcSampleCode.Build.cs b/unreal/win/Source/NertcSampleCode/NertcSampleCode.Build.cs new file mode 100644 index 0000000..633b587 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcSampleCode.Build.cs @@ -0,0 +1,23 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class NertcSampleCode : ModuleRules +{ + public NertcSampleCode(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "NertcPlugin" }); + + PrivateDependencyModuleNames.AddRange(new string[] { }); + + // Uncomment if you are using Slate UI + // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + // Uncomment if you are using online features + // PrivateDependencyModuleNames.Add("OnlineSubsystem"); + + // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true + } +} diff --git a/unreal/win/Source/NertcSampleCode/NertcSampleCode.cpp b/unreal/win/Source/NertcSampleCode/NertcSampleCode.cpp new file mode 100644 index 0000000..2d521f6 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcSampleCode.cpp @@ -0,0 +1,6 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "NertcSampleCode.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, NertcSampleCode, "NertcSampleCode" ); diff --git a/unreal/win/Source/NertcSampleCode/NertcSampleCode.h b/unreal/win/Source/NertcSampleCode/NertcSampleCode.h new file mode 100644 index 0000000..73cb863 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcSampleCode.h @@ -0,0 +1,6 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + diff --git a/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.cpp b/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.cpp new file mode 100644 index 0000000..764f4d3 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.cpp @@ -0,0 +1,5 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + + +#include "NertcSampleCodeGameModeBase.h" + diff --git a/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.h b/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.h new file mode 100644 index 0000000..cc34b12 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcSampleCodeGameModeBase.h @@ -0,0 +1,17 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "NertcSampleCodeGameModeBase.generated.h" + +/** + * + */ +UCLASS() +class NERTCSAMPLECODE_API ANertcSampleCodeGameModeBase : public AGameModeBase +{ + GENERATED_BODY() + +}; diff --git a/unreal/win/Source/NertcSampleCode/NertcUserWidget.cpp b/unreal/win/Source/NertcSampleCode/NertcUserWidget.cpp new file mode 100644 index 0000000..d47ca08 --- /dev/null +++ b/unreal/win/Source/NertcSampleCode/NertcUserWidget.cpp @@ -0,0 +1,81 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "NertcUserWidget.h" +#include + +const std::string g_appKey = "your appkey"; +const std::string g_logPath = "your log path"; +const std::string g_channelName = "your channel name"; +const uint64_t g_userID = 123; //your userID + +void UNertcUserWidget::NativeConstruct() +{ + Super::NativeConstruct(); + InitNertcEngine(g_appKey, g_logPath); +} + +void UNertcUserWidget::NativeDestruct() { + ReleaseNertcEngine(); + Super::NativeDestruct(); +} + +void UNertcUserWidget::InitNertcEngine(std::string appKey, std::string logPath) { + nertc_engine_ = nertc::createNERtcEngine(); + + if (!nertc_engine_) + return; + + nertc::NERtcEngineContext context{}; + context.app_key = appKey.c_str(); + //���������¼��ص���ȷ��YourProjectClass�̳���IRtcEngineEventHandler + context.event_handler = this; + context.log_dir_path = logPath.c_str(); + context.log_level = kNERtcLogLevelInfo; + + auto ret = nertc_engine_->initialize(context); + if (ret != 0) { + ReleaseNertcEngine(); + return; + } + + //������Ϸģʽ����ø��õ���Ƶ���� ����ѡ�� + nertc_engine_->setParameters("{\"sdk.enable.plugin.game.mode\":true}"); + + //��ȡ��Ƶmanager�������ڲٿ���Ƶ�豸 ����ѡ�� + nertc_engine_->queryInterface(nertc::kNERtcIIDAudioDeviceManager, (void**)(&audio_device_manager_)); + if (!audio_device_manager_) { + return; + } + + //����ý��״̬�ص���ȷ��YourProjectClass�̳���IRtcMediaStatsObserver ����ѡ�� + nertc_engine_->setStatsObserver(this); +} +void UNertcUserWidget::ReleaseNertcEngine() { + if (!nertc_engine_) + return; + nertc_engine_->release(); + delete nertc_engine_; + nertc_engine_ = nullptr; +} +void UNertcUserWidget::OnJoinChannelClicked() { + nertc_engine_->joinChannel("", g_channelName.c_str(), g_userID, NERtcJoinChannelOptions{}); +} + +void UNertcUserWidget::OnLeaveChannelClicked() { + nertc_engine_->leaveChannel(); +} + +void UNertcUserWidget::onJoinChannel(channel_id_t cid, nertc::uid_t uid, NERtcErrorCode result, uint64_t elapsed) { + std::cout << "onJoinChannel"< +#include "NertcUserWidget.generated.h" + +/** + * + */ +using namespace nertc; +UCLASS() +class NERTCSAMPLECODE_API UNertcUserWidget : public UUserWidget, public IRtcEngineEventHandler, public IRtcMediaStatsObserver +{ + GENERATED_BODY() +public: + void NativeConstruct() override; + void NativeDestruct() override; + + void InitNertcEngine(std::string appKey, std::string logPath); + void ReleaseNertcEngine(); + + UFUNCTION(BlueprintCallable) + void OnJoinChannelClicked(); + + UFUNCTION(BlueprintCallable) + void OnLeaveChannelClicked(); + +public: + //��дonJoinChannel�麯��������joinChannel��SDK���Զ����øú�����֪ͨ��� + void onJoinChannel(channel_id_t cid, nertc::uid_t uid, NERtcErrorCode result, uint64_t elapsed) override; + //��дonConnectionStateChange�麯��������״̬�������ʱ��SDK���Զ����øú��� + void onConnectionStateChange(NERtcConnectionStateType state, NERtcReasonConnectionChangedType reason)override; + //��дonLeaveChannel�麯�����뿪�����SDK���Զ����øú��� + void onLeaveChannel(NERtcErrorCode result, uint64_t channel_id) override; + //����setStatsObserver֮��SDK�ᶨ�ڻص�onRtcStats��������SDK�ڲ����ݣ�����CPUʹ���ʵȣ�֪ͨ���� + void onRtcStats(const NERtcStats& stats) override; + +private: + //��������SDK��������ָ�� + nertc::IRtcEngineEx* nertc_engine_; + //����������Ƶ�豸��������ָ�� + nertc::IAudioDeviceManager* audio_device_manager_; +}; diff --git a/unreal/win/Source/NertcSampleCodeEditor.Target.cs b/unreal/win/Source/NertcSampleCodeEditor.Target.cs new file mode 100644 index 0000000..91b5452 --- /dev/null +++ b/unreal/win/Source/NertcSampleCodeEditor.Target.cs @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class NertcSampleCodeEditorTarget : TargetRules +{ + public NertcSampleCodeEditorTarget( TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V2; + ExtraModuleNames.AddRange( new string[] { "NertcSampleCode" } ); + } +}