前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE4学习笔记: Replication

UE4学习笔记: Replication

作者头像
逍遥剑客
发布2018-05-21 11:34:47
2.1K0
发布2018-05-21 11:34:47
举报

Actors

客户端复制actor被spawn出来时, 只有Location和Rotation在PreBeginPlay()和PostBeginPlay()时是合法的

被复制的Actor只有在服务器关闭他们的复制通道时才被销毁

Actor的属性复制是可靠的. 只会从服务器往客户端同步

FReplicationFlags

属性

描述

bNetOwner

在目标机器上被PlayerController控制

bNetInitial

初始网络更新

bNetSimulated

Actor是 RemoteRole 模拟的.

bRepPhysics

Actor的ReplicatedMovement.bRepPhysics 为true

Components(组件)

多数componet是不复制的, 因为多数逻辑是在actor中完成的, 只需要同步compoent相关的调用即可, 除非component本身需要直接进行属性和事件的复制.

组件复制分两种:

  • 静态组件(actor创建时创建的)会在spawn actor时自动创建
  • 动态组件(服务器运行时创建的)会像actor复制一样创建和删除

AActorComponent::SetIsReplicated(true)

Variables(变量)

服务器的变量改动时会发送到客户端进行更新, 客户端的自行更改会被覆盖.

代码语言:javascript
复制

UPROPERTY(Replicated)

TArray<UAttributeSet*> SpawnedAttributes;

UPROPERTY(transient, ReplicatedUsing=OnRep_IsActive)

uint32 bIsActive:1;

函数调用

其实就是RPC. 

服务器调用客户端执行

代码语言:javascript
复制
UFUNCTION( Client );
void ClientRPCFunction();

客户端调用服务器执行

代码语言:javascript
复制
UFUNCTION( Server );
void ServerRPCFunction();

服务器调用, 服务器和客户端执行

代码语言:javascript
复制
UFUNCTION( NetMulticast );
void MulticastRPCFunction();

一些注意事项:

  • 必须从actor中调用
  • actor必须是复制的
  • client必须拥有相应的actor
  • 多播的函数如果是客户端调用的, 不会被同步到服务器

默认RPC是不可靠的, 除非加个标记:

代码语言:javascript
复制
UFUNCTION( Client, Reliable );
void ClientRPCFunction();

RPC函数可以加入校验函数:

代码语言:javascript
复制
UFUNCTION( Server, WithValidation );
void SomeRPCFunction( int32 AddHealth );

如果校验不没通过, 服务器会踢掉这个客户端

代码语言:javascript
复制
bool SomeRPCFunction _Validate( int32 AddHealth )
{
    If ( AddHealth > MAX_ADD_HEALTH )
    {
        return false;                       // This will disconnect the caller
    }
return true;                              // This will allow the RPC to be called
}

void SomeRPCFunction _Implementation( int32 AddHealth )
{
    Health += AddHealth;
}

其它

并不是所有的actor都会被同步的, 而与你”相关”的, 比如不在你视野范围内的就不需要同步

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年02月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档