如何为多人游戏创建客户端权威玩家

0

【以下的问题经过翻译处理】 我想使用Gamelift创建一个基本的多人游戏,但我遇到了一些问题,比如创建一个像“玩家”一样的东西,任何连接到Gamelift会话的人都可以进行控制。

我不确定如何实现这个目标。开始我想只需将“Netbinding-Component”添加到我的玩家预制体中即可,但这并不起作用。

然后我对一些多人游戏示例进行了逆向工程,并且现在我知道了它们是如何使用客户端主控数据和RPC调用来实现的。

但是实现这样的东西需要我花费大量时间。难道没有更简单的方法来创建像“玩家”一样的东西,它可以在每个连接的网络中进行复制吗?

我真的需要写自己的C++服务器?

除此之外,我还有一些关于多人游戏示例的问题:

1.)我无法弄清楚游戏服务器如何终止游戏会话。当我尝试时,我可以使用大厅创建一个会话,但没有真正的方法来删除会话吗?

2.)创建的玩家会话也不会断开,这意味着随着每个客户端与游戏会话新连接的创建,活动玩家会话的数量都增加了一个,但即使我终止了客户端程序,也没有减少。

profile picture
EXPERTE
gefragt vor 5 Monaten7 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 你走在正确的道路上!添加一个网络绑定组件是必须的,以便将实体“绑定”到网络上,从而使其数据得到复制。我之前已经发布了一个简单的示例程序,演示了一个网络化的玩家控制器:https://forums.awsgametech.com/t/networked-player-controller-example/2277/1

这个示例程序有一些需要更新的lua代码,使其能够与1.9一起工作,但如果你认为这对你的游戏有用,我很乐意为你更新它。

它是客户端主导的,每个加入服务器的玩家都有自己控制的角色。

关于你的问题

0.)你是否必须编写自己的C++服务器?

Lumberyard默认附带一个既拿既用的专用服务器,因此,如果你只想使用Lua,就不需要编写任何C++代码。尽管如此,大多数多人游戏都会添加/修改其专用服务器的C++代码,以优化性能并获得更好的安全性。如果你正在制作一个的简单游戏(例如原型),那么你不需要编写任何C++服务器代码。

1.)我没有搞清楚游戏服务器如何终止游戏会话。当我尝试这样做时,你可以使用大厅创建一个会话,但真的没有办法删除一个会话吗?

有C++命令可以从服务器终止GameLift游戏会话,不过在这个多人游戏示例中,专用服务器在关闭之前等待GameLift收到终止消息。因此,在示例中,这意味着客户端发起了会话创建,但是GameLift用来处理会话终止。如果你想让服务器终止GameLift会话,你可以调用AWS::GameLift::Server::TerminateGameSession() (http://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-terminategamesession)

2.)创建的玩家会话也不会断开,这意味着随着每个客户端与游戏会话新连接的创建,活动玩家会话的数量都增加了一个,但即使我终止了客户端程序,也没有减少。

这似乎是玩家错误地被断开而且服务器禁用了断开检测功能。当用户和服务器断开连接时应该调用Aws::GameLift::Server::RemovePlayerSession (line 247 of GameLiftServerSession.cpp in OnReplicaDeactivate).

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt