首页 > 编程语言 >[20] C++虚幻引擎热更新

[20] C++虚幻引擎热更新

时间:2024-05-22 22:30:07浏览次数:22  
标签:同步 20 Actor Client C++ 虚幻 ChangeBodyColorCpp 属性 客户端

Day1

大纲

行为树节点
网络PDF

网络系统

内容

Task节点

FinishWithResult :

MoveDirectlyToWard :

Push PawnAction : 运行至当前队列节点首节点 

Run Behavior Dynamic : 动态运行子行为树

Set Tag Cooldown :

Wait Blackboard Time :

装饰器节点

GamePlay Tag Condition : 检查目标身上有没有标签 , 做出行为

compare BBEntries :

Conditional Loop :

Cone Check && Keep in Cone :

Cooldown : 每延迟**事件执行一个节点

Does Path exist :

Is at Location :

Is Blackboard value of given Class :

重写分发节点 随机执行

网络系统

  • 监听服务器: LS 有一个用户充当房主,小范围
  • 专用服务器: DS 大范围
  • 客户端: Client

蓝图同步设置 : 

Net Load On Client : 地图加载是此Actor将在网络客户端上加载。

Replicates : 决定有没有能力在网络中进行同步 , 还要进行属性同步。

PRC

• Server 在持有当前Actor客户端调用,在服务器端执行(Server标记产生在客户端是合理的)
• Client在服务器端调用,在持有对象的客户端执行(Client标记在服务端调用是合理的)
• Multicast 在服务器端调用,在所有终端执行(Multicast标记在服务端调用是合理的)

只有PlayerController,Pawn,PlayerState才有权利发消息给服务器

设置拥有者

设置客户端的盒子所属于服务端的控制器&&pawn , 让盒子知道自己的归属终端

本地函数

TIPS

先做本地在做联网
没有返回值不能做纯函数
如果ModeBase , GameState也要用Base , 联网不要用Base , 
RPC一般在函数内部调用

节点

Switch Has Authority : 判断是否服务端

Get Game State -> Player Array : 当前玩游戏的所有玩家

Day3

大纲

属性同步
优化
2个终端链在一

内容

蓝图属性同步和带有通知的属性同步

属性同步 : 需要在Tick里面一直执行监听值的变化

带通知的属性同步有绑定函数在值个更改的时候会触发

CPP属性同步和带有通知的属性同步 && Multi、Server、Client调用

Multi、Server、Client

//--生命
UFUNCTION(NetMulticast, Reliable)//多播、标记为可靠
void Multi_ChangeBodyColorCpp(FVector Color);

UFUNCTION(Server, Reliable, WithValidation)//服务器调用、标记可靠、标记验证
void Server_ChangeBodyColorCpp();

UFUNCTION(Client, Reliable)//客户端调用
void Client_ChangeBodyColorCpp(FVector Color);

//--定义
void AMyCharacter::Multi_ChangeBodyColorCpp_Implementation(FVector Color)
{
	GetMesh()->SetVectorParameterValueOnMaterials(TEXT("Color"), Color);
}

void AMyCharacter::Server_ChangeBodyColorCpp_Implementation()
{
	ChangeMeshColor();
}

bool AMyCharacter::Server_ChangeBodyColorCpp_Validate()//如果范围False会被踢下线
{
	return true;
}

void AMyCharacter::Client_ChangeBodyColorCpp_Implementation(FVector Color)
{
	GetMesh()->SetVectorParameterValueOnMaterials(TEXT("Color"), Color);
}

属性同步

UPROPERTY(Replicated)//无通知 靠Tick变换
FVector MeshColorCpp;
UPROPERTY(ReplicatedUsing="OnRep_MeshColorRepCpp")//有通知 靠通知绑定的函数调用
FVector MeshColorRepCpp;

if (HasAuthority())//是不是服务端
	{
		// Multi_ChangeBodyColorCpp(GetRandomColor());
		
		// Client_ChangeBodyColorCpp(GetRandomColor());
		
		// MeshColorCpp = GetRandomColor(); //无通知
		
		MeshColorRepCpp = GetRandomColor(); //有通知
		OnRep_MeshColorRepCpp();//通知回调
}

//设置属性复制的声明周期
void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);
	DOREPLIFETIME(AMyCharacter, MeshColorCpp);
	DOREPLIFETIME(AMyCharacter, MeshColorRepCpp);
}

CPP调试模式按键输入

//响应按键事件 Deubgger
if (APlayerController* Pc = Cast<APlayerController>(GetController()))
{
    //按键事件
    if (Pc->WasInputKeyJustPressed(EKeys::Q))
    {
       ChangeMeshColor();
    }
}

优化

网络同步相关设置

  1. Only Relevant to Owner

    • 这个设置用于指定属性是否仅对拥有该 Actor 的客户端进行同步。如果启用了这个选项,只有拥有连接的客户端会接收到该属性的更新。
    • 举个例子,如果你在一个多人游戏中创建了一个角色,那么该角色的位置、旋转等属性将仅在你自己的客户端上同步,其他玩家不会看到这些变化。
  2. Always Relevant

    • 这个选项表示该属性始终对所有客户端进行同步。无论是否拥有连接,所有客户端都会接收到该属性的更新。
    • 如果你希望某个属性在所有客户端之间保持同步,可以启用这个选项。
  3. Replicate Movement

    • 这个设置用于控制 Actor 的移动是否在网络上同步。如果启用了这个选项,Actor 的位置、旋转和缩放等移动属性将在所有客户端之间同步。
    • 这对于需要在多人游戏中同步角色位置的情况非常重要。
  4. Net Load on Client

    • 这个选项决定了客户端是否加载该 Actor。如果启用了这个选项,客户端会加载该 Actor,否则不会加载。
    • 这对于优化客户端性能和减少不必要的资源加载很有用。
  5. Net Use Owner Relevancy

    • 这个设置与 Owner 相关。如果启用了这个选项,只有拥有连接的客户端会根据 Owner 的相关性来决定是否加载该 Actor。
    • Owner 是指拥有该 Actor 的 PlayerController。这样可以确保只有与 Owner 相关的客户端会加载该 Actor。
  6. Replicates

    • 这个属性用于标记 Actor 的属性是否需要在网络上同步。如果设置为 true,该属性将在所有客户端之间同步。
    • 如果设置为 false,该属性将不会同步,只会在拥有连接的客户端上更新。
  7. Net Dormancy

    • 这个设置用于控制 Actor 的休眠状态。如果启用了这个选项,不活跃的 Actor 将进入休眠状态,不再同步属性。
    • 这对于优化网络性能和减少不必要的数据传输很有用。
  8. Net Cull Distance Squared

    • 这个属性用于指定 Actor 在多远距离之外将不再同步。如果 Actor 超出了这个距离,它将被视为不活跃,不再同步属性。
    • 这对于减少不必要的网络流量和提高性能很有帮助。

对于动态Actor和静态的影响
动态生成的场景道具 , 如果相关性无关会隐藏 , 但是静态的道具不会 。

复制对象引用

勾选复制选项 , 网络ID , 所有网络中存在的对象都有个网络ID , 解决多终端中同步

可靠性命名

所有场景中存在的物体都叫

创建会话、加入、查找

TIPS

千万不要在Tips里面执行RPC函数切标记可靠

节点

Player State网络同步节点

标签:同步,20,Actor,Client,C++,虚幻,ChangeBodyColorCpp,属性,客户端
From: https://www.cnblogs.com/Aquakinn/p/18202613

相关文章

  • JOISC 2024 记录
    感觉我太滞后了Day1T1Fish3我们可以做的操作是单点加\(D\)和后缀加\(1\),考虑把这个操作放在差分数组上,则操作变成了:单点加\(1\)。\(i\)处加\(D\),\(i+1\)处\(-D\)。需要最小化第二种操作的使用次数,发现只有对于所有差分数组中的负数是不得不用第二种操作的,而对于......
  • 2022-06-28-《机构投资者抱团与股价崩盘风险》数据处理代码
    主要参考文献为:《机构投资者抱团与股价崩盘风险》(吴晓晖,郭晓冬,乔政)。这篇文献发表在中国工业经济杂志上,但作者只提供了处理过的投资机构团体持股数据,具体处理的代码则并未展示。这里根据这篇文献,依据如下步骤进行复原:1、下载国泰安中机构团体持股比例数据,合并为一个文件,约475万......
  • 2024版Pycharm导入conda环境
    旧版与新版的区别大致就是旧版借用python.exe文件来导入虚拟环境,而现在的新版本需要借用Anaconda3文件中的condabin文件夹中的conda.bat文件来导入已创建的虚拟环境。(1)进入设置(2)选择interpreter  (3)选择conda环境 首先浏览到condabin的位置,选择conda;然后点击加载环境,而......
  • 2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中
    2024-05-22:用go语言,你有一个包含n个整数的数组nums。每个数组的代价是指该数组中的第一个元素的值。你的目标是将这个数组划分为三个连续且互不重叠的子数组。然后,计算这三个子数组的代价之和,要求返回这个和的最小值。输入:nums=[1,2,3,12]。输出:6。答案2024-05-22:cha......
  • 2022-07-03-含有非期望产出的sbm模型python代码
    传统的径向DEA模型无法考虑“松弛变量”对效率值的影响,也没有考虑同时使期望产出增加,非期望产出减少的技术变化,以此度量的效率值是不准确或有偏的,为了解决这一问题,Tone(2001)提出了基于投入产出松弛变量的环境效率评价模型,简称SBM模型,在此基础上,他进一步提出了SBM的拓展模型,从而实......
  • 2022-06-30-和讯网上市公司社会责任综合评分数据
    和讯网发布的我国上市公司社会责任综合评分作为企业社会责任表现的度量。 该评分基于我国上市公司的社会责任报告和财务报告信息,从股东责任、员工责任、供应商、客户和消费者权益责任、环境责任和公共责任五个方面,分别设立13个二级指标和37个三级指标,对企业社会责任承担情......
  • 2022-06-29-对抗型交叉评价dea模型matlab代码
    对抗型交叉评价DEA模型matlab代码,代码来自于彭育威老师的《利用MATLAB进行DEA交叉评价分析》一文,​非常适合学习。如果您想做仁慈型DEA​,可与我联系。clearX=[3060554070;2540703090;13015012070180];%用户键入输入矩阵Y=[3543765263;6080534271];......
  • 2022-06-28-三阶嵌套泰尔指数计算工具
    三阶嵌套的泰尔指数在国内似乎是个冷门的方法,有朋友来问,查了下,只找到了一篇中文文献,英文文献也不很多。不过这个方法似乎在分解不同层级的泰尔指数时比较好用,因此写了这个小工具。关于三阶嵌套泰尔指数的公式介绍,我直接贴在这里吧:使用方法也很简单,把数据按照固定格式准备好,可以......
  • 2022-06-28-零和收益ZSG-DEA模型的求解程序
    今天要向大家推介的是DEA中的ZSG模型。Lins和Gomes等人提出了零和收益DEA模型(ZSG-DEA),该模型可以根据决策单元的DEA效率值对非期望产出的分配方案进行调整,给出改进的分配方案,该模型多用于CO2的分配问题的研究上,通过对整体中各个区域的碳减排责任进行分析,同时按照ZSG模型进行迭......
  • 2022-06-28-基于共同前沿下含非期望产出SBM模型的影子价格测算
    在影子价格研究方面,国内外学者主要利用参数化和非参数化两种方法研究生产要素的影子价格,参数化方法如根据Shephard产出距离函数法和投入距离函数法来测算影子价格,非参数化方法以数据包络分析方法为主,如以更为灵活的SBM模型测算能源的影子价格。此外,考虑到中国各省域发展不平衡的......