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();
}
}
优化
网络同步相关设置
-
Only Relevant to Owner:
- 这个设置用于指定属性是否仅对拥有该 Actor 的客户端进行同步。如果启用了这个选项,只有拥有连接的客户端会接收到该属性的更新。
- 举个例子,如果你在一个多人游戏中创建了一个角色,那么该角色的位置、旋转等属性将仅在你自己的客户端上同步,其他玩家不会看到这些变化。
-
Always Relevant:
- 这个选项表示该属性始终对所有客户端进行同步。无论是否拥有连接,所有客户端都会接收到该属性的更新。
- 如果你希望某个属性在所有客户端之间保持同步,可以启用这个选项。
-
Replicate Movement:
- 这个设置用于控制 Actor 的移动是否在网络上同步。如果启用了这个选项,Actor 的位置、旋转和缩放等移动属性将在所有客户端之间同步。
- 这对于需要在多人游戏中同步角色位置的情况非常重要。
-
Net Load on Client:
- 这个选项决定了客户端是否加载该 Actor。如果启用了这个选项,客户端会加载该 Actor,否则不会加载。
- 这对于优化客户端性能和减少不必要的资源加载很有用。
-
Net Use Owner Relevancy:
- 这个设置与 Owner 相关。如果启用了这个选项,只有拥有连接的客户端会根据 Owner 的相关性来决定是否加载该 Actor。
- Owner 是指拥有该 Actor 的 PlayerController。这样可以确保只有与 Owner 相关的客户端会加载该 Actor。
-
Replicates:
- 这个属性用于标记 Actor 的属性是否需要在网络上同步。如果设置为 true,该属性将在所有客户端之间同步。
- 如果设置为 false,该属性将不会同步,只会在拥有连接的客户端上更新。
-
Net Dormancy:
- 这个设置用于控制 Actor 的休眠状态。如果启用了这个选项,不活跃的 Actor 将进入休眠状态,不再同步属性。
- 这对于优化网络性能和减少不必要的数据传输很有用。
-
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