标签:layer 引用类型 制作 tps character cto com _for work
一个服务器,两个客户端,让他们连接后分别生成不同的Pawn,并且在不同的位置生成。
这是个项目需求,但是我发现如果能够彻底理解并制作出这个功能,会对虚幻4内置的网络功能以及一些重要的Gameplay 的类有更深入的了解。
在Google上也搜了好久,但是相关信息并不多,比较靠谱的最终都指向同一个wiki页面:Spawn Different Pawns For Players in Multiplayer,但是他的解决方案有个缺陷:需要读取外部文本才行。另外他的方案是采用的C++版本,很多人在论坛里求蓝图版本的实现方法。
我采用了蓝图实现。区分不同的客户端主要是依靠OnPostLogin的连接顺序。
在GameMode中设置一个int变量作为用户索引,每次OnPostLogin后递增1。因为服务器(Listen Server)的PostLogin肯定是第一个(没哪个客户端的连接速度会快过本机),所以服务端连接时索引为0。而其他两个客户端在项目中并不需要立即区分其角色,只需要先分别给一个不同的角色,后面如果需要修改,在服务端提供界面进行手动修改即可。
NetWorking and Multiplayer 其中的ActorReplication章节非常重要需要仔细阅读和理解,MultiPlayer in Blueprints章节是个引导概况性质的章节,也需要仔细读
先使用ThirdPerson模板创建工程,然后创建ThirdPersonCharacter的三个子类,给不同的颜色作为标记,分别是红,绿,蓝,其中红色准备作为服务器的Pawn,其他两个作为客户端的。
以GameModeBase为基类创建一个GameMode蓝图,这里命名为MyGameMode
以PlayerController为基类窗机一个Controller蓝图,这里明明为MyPlayerController
创建一个Enum,命名为ClientType,包含三个值:Server, ClientA, ClientB
在ThirdPersionExampleMap中,删掉场景中的Character,然后把PlayerStart复制2个出来,摆放好位置,分别给三个PlayerStart的Player Start Tag属性设置为Server,ClientA,ClientB
在MyGameMode中,创建两个变量:
ClientIndex : int型,默认设置,用于标记不同的客户端连接,每次OnPostLogin后会递增1
PlayerStarts:PlayerStart引用类型,数组,其他默认,用于存放所有的PlayerStart
这样连接的意思是:当有玩家连接进来后(包括服务器自身连接自身),把该玩家的PlayerController转为我们自己创建的MyPlayerController类,调用其中的DeterminPawnClass方法(目的是让PlayerController去判断自身的Pawn类型)。GameMode始终有Authority
标签:layer 引用类型 制作 tps character cto com _for work
原文地址:http://www.cnblogs.com/AnKen/p/7897076.html