Unreal Engine添加UGameInstanceSubsystem子类

server/2024/10/19 3:24:35/
  1. 点击C++类文件夹,在右边的区域点击鼠标右键,在弹出的菜单中选择“新建C++类”
  2. 在弹出的菜单中选中“显示所有类”,选择GameInstanceSubsystem作为父类, 点击“下一步”按钮
  3. 输入子类名称“UVRVIUOnlineGameSubsystem”,选择插件作为新类的目标模块,点击“公共”选择器
  4. 打开C++工程,找到".Build.cs"文件,在“PublicDependencyModuleNames”下,添加"MultiPlayerPlugin"

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    public class LandMaster : ModuleRules

    {

        public LandMaster(ReadOnlyTargetRules Target) : base(Target)

        {

            PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

      

            PublicDependencyModuleNames.AddRange(new string[] { "Core""CoreUObject""Engine""InputCore""UMG""Http""Json""JsonUtilities""Sockets""Networking""OnlineSubsystem""OnlineSubsystemUtils""MultiPlayerPlugin" });

      

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

        }

    }

  5. 设置“MultiPlayerPlugin.uplugin”文件

    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

    {

        "FileVersion": 3,

        "Version": 1,

        "VersionName""1.0",

        "FriendlyName""MultiPlayerPlugin",

        "Description""plugin for multi player ",

        "Category""Other",

        "CreatedBy""VRVIU_Jacky",

        "CreatedByURL""",

        "DocsURL""",

        "MarketplaceURL""",

        "SupportURL""",

        "EngineVersion""4.26.0",

        "CanContainContent"true,

        "Installed"true,

        "Modules": [

            {

                "Name""MultiPlayerPlugin",

                "Type""Runtime",

                "LoadingPhase""Default",

                "WhitelistPlatforms": [

                    "Win32",

                    "Win64"

                ]

            }

        ]

    }

  6. 设置插件“.Build.cs”文件,添加需要引用的模块

    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

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    // Copyright Epic Games, Inc. All Rights Reserved.

      

    using UnrealBuildTool;

      

    public class MultiPlayerPlugin : ModuleRules

    {

        public MultiPlayerPlugin(ReadOnlyTargetRules Target) : base(Target)

        {

            bEnableUndefinedIdentifierWarnings = false;

            PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

            //bUsePrecompiled = true;

            PublicIncludePaths.AddRange(

                new string[] {

                    "MultiPlayerPlugin/Public"

                }

                );

                      

              

            PrivateIncludePaths.AddRange(

                new string[] {

                      

                }

                );

                  

              

            PublicDependencyModuleNames.AddRange(

                new string[]

                {

                    "Core"

                    // ... add other public dependencies that you statically link with here ...

                }

                );

                  

              

            PrivateDependencyModuleNames.AddRange(

                new string[]

                {

                    "CoreUObject",

                    "Engine",

                    "Slate",

                    "SlateCore""UMG""Http""Json""JsonUtilities""Sockets""Networking"

                    // ... add private dependencies that you statically link with here ... 

                }

                );

              

              

            DynamicallyLoadedModuleNames.AddRange(

                new string[]

                {

                    // ... add any modules that your module loads dynamically here ...

                }

                );

        }

    }

  7. 获取本机IP地址

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    FString UVRVIUOnlineGameSubsystem::GetIpAddress(bool bHasPort /*= true*/)

    {

        FString IpAddr("NONE");

        bool canBind = false;

        TSharedRef<FInternetAddr>LocalIp = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, canBind);

        if (LocalIp->IsValid())

        {

            IpAddr = LocalIp->ToString(bHasPort);

        }

        return IpAddr;

    }

  8. 创建会话

    1

    2

    3

    FString cmd = "open " + Map + "?listen";

    UGameplayStatics::GetPlayerController(GetWorld(), 0)->ConsoleCommand(cmd);

    m_ServerAddress = ServerAddress.Len() == 0 ? GetIpAddress(false):ServerAddress;

  9. 加入会话

    1

    2

    3

    4

    5

    UE_LOG(LogTemp, Warning, TEXT("UVRVIUOnlineGameSubsystem::ConnectServer %s"), *IntranetIP);

    FString cmd = "open " + IntranetIP;

    UGameplayStatics::GetPlayerController(GetWorld(), 0)->ConsoleCommand(cmd);

    m_ServerAddress = IntranetIP;


http://www.ppmy.cn/server/24015.html

相关文章

[激光原理与应用-91]:不同焦距的透镜对成像效果的影响:光斑大小、公差要求、成像效果、视角

目录 一、凸透镜的工作原理 1.1 凸透镜对平行光的聚焦作用 1.2 凸透镜的成像原理 二、不同的凸透镜焦距对视角的影响 三、透镜不同焦距对焦斑的影响 四、透镜不同焦距对镜片与焦点距离的影响 五、透镜不同焦距对公差的要求 六、球差、色差、相差、景深的影响 6.1 球差…

商城数据库(73-76)

73——店铺角色表&#xff08;wang_shop_roles&#xff09; CREATE TABLE wang_shop_roles (id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,shopld int(11) DEFAULT 0 COMMENT 店铺ID,roleName varchar(100) DEFAULT NULL COMMENT 角色名称,privilegeMsgs text COMMENT …

关于发布 npm 包镜像库,马上 pnpm 安装报未找到版本的问题?

关于发布 npm 包镜像库&#xff0c;马上 pnpm 安装报未找到版本的问题&#xff1f; 背景&#xff1a;我们在发布共有 npm 包时&#xff0c;npm 官方镜像发布成功&#xff0c;但是淘宝源下载却没有找到刚发布的版本&#xff0c;下面是我遇到问题心路历程 文章目录 关于发布 npm…

5-用户权限控制(前端)

1.登录成功后&#xff0c;调用状态管理中对应的设置菜单的方法 //调用store中的setMenu函数 this.$store.commit(setMenu,data.data.data)2.将后端返回的菜单数据存入Cookie中 //设置菜单的方法setMenu(state, val) {state.menu valCookie.set("menu", JSON.strin…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中&#xff0c;Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂&#xff0c;myCobot 600以其600mm的工作半径和2kg的末端负载能力&#xff0c;满足了多样化的操作需求。…

Java NIO

1. IO分类概述 1.1 阻塞与非阻塞 阻塞&#xff08;Blocking&#xff09;和非阻塞&#xff08;Nonblocking&#xff09;是在计算机编程中用于描述I/O操作的两个重要概念。阻塞与非阻塞描述的是线程在访问某个资源时&#xff0c;在该资源没有准备就绪期间的处理方式。 1、阻塞&a…

解决Oracle锁表的方法

在实际工作中&#xff0c;并发量比较大的项目&#xff0c;经常会出现锁表的问题&#xff0c;下面我将复现这个问题&#xff0c;并给出解决方法。 一、问题复现 1、session1修改aabb表的B字段为迪迦奥特曼&#xff0c;但是不提交该事务。 2、session2也修改这行的这个字段。 发…

AIGC:开启内容创作新纪元,我们如何看待它的影响与前景?

AIGC的概念 AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;的概念主要是指人工智能生成内容。 这是一种新的人工智能技术&#xff0c;它利用人工智能模型&#xff0c;根据给定的主题、关键词、格式、风格等条件&#xff0c;自动生成各种类型的文本、图…