参考项目:
【蘩】[Godot教程]局域网联机小游戏制作教程 ep6 - 基本联机功能的制作_哔哩哔哩_bilibili
基础知识:
远程调用RPC (remote procedure call)
RPC的修饰属性(不常用的未列举)
1. remote函数
调用远程的函数或者设置变量
2. remotesync函数
同事调用远程和本地的函数或者设置变量
调用函数
1. 远程端(函数调用)
rpc("remote_func",args)
rpc_id(peer_id,"remote_func",args)
2. 执行端(函数执行)
定义函数 remote func remote_func(args)
最终,从远程端调用的rpc会在执行端执行对应的remote函数
设置变量
1. 远程端
rset("a1",args)
rset_id(peer_id, "a1", args)
2.执行端
remote var a1
场景树的获取
get_tree() #调用当前的场景树
场景树信号
server
network_peer_connected #客户端连接出发的signal
network_peer_disconnected #客户端断开连接触发的signal
client
connected_to_server #client连接到server成功触发的signal
connection_failed #client连接到server失败触发的signal
server_disconnected #server 断开连接触发的signal
开启联机
创建对等点(开启联机)
var peer = NetworkedMultiplayerENet.new() #基于udp协议的底层库
服务器
peer.create_server(port) #在localhost创建一个port端口号
客户端
peer.create_client(server_address,port) #传入服务器地址和端口号, 会开始创建客户端,并且会触发对应的信号
在创建完client和server后,需要吧对应的peer赋值给场景树的network_peer属性方便后续调用
get_tree().network_peer = peer
Peer ID
用于识别唯一的客户端(服务器固定为1)
NetWork Master
其实就是peer id,默认为1,那么就是服务器,一般用于判断是否是本地操作的玩家判断是否为本地操作
get_network_master() == get_tree().get_network_unique_id() OR is_network_master()
游戏架构:
GameSystem (单例,游戏系统, 可以在全局访问)
-- GameManager(UI管理)
-- 各种UI界面,UI音效
-- ChatDisply(聊天框)
-- 游戏世界
-- 静态物体
--场景地图
-- 网络物体(NetworkIdentifier)
-- PlayerManager (玩家管理器)
-- Cat (NetworkTransform,用于同步坐标)
-- Mouse (NetworkTransform)
-- Ball
-- GameConsole (游戏控制台,发送游戏信息,游戏指令)
-- NetworkManager(网络管理器,游戏的核心,用来管理网络方面)
-- ClientProxy(客户端代理,在服务器负责管理对应的客户端)
-- LinkingContext (链接表,分配,记录网络物体ID)
-- CompetitionManager (竞赛管理器)
标签:Godot,联机,network,--,server,小游戏,peer,remote,客户端 From: https://www.cnblogs.com/lengblog/p/17022032.html