设计多人游戏

Time:10 分钟

作为社交平台,Roblox 上最成功的游戏都利用了促进玩家之间进行有意义的互动的机制。通过特定的设计选择来鼓励社交游戏,开发者将可以大幅提升玩家的参与度和留存度,以及游戏利润。

设计选择

平衡世界尺寸

考虑游戏世界的尺寸与最大玩家数量。少数玩家在巨大的地图上会让人感觉游戏人数稀少,而拥挤的大厅则会让人觉得不适。

以下是一些平衡地图尺寸与玩家数量的技巧:

  • 在较大的地图上创造关键点来聚集玩家,例如 FPS 中重要的 NPC 商店或建筑。

  • 使用头目战或假日挑战之类的社区活动将大量玩家聚集到一起。

  • 在开发过程中,以不同的玩家数量进行游戏测试,直到空间与玩家数量达到理想的比例。

考虑游戏类型

根据游戏类型,开发者可以用不同的方式设计环境。以角色扮演游戏 Welcome to Bloxburg(欢迎来到方块堡)为例,其环境设计中包含了多种用途的玩家聚集中心,让玩家可以去上班、购车及在饭店、俱乐部或者家庭聚会中社交。大地图并不是问题,因为玩家会聚集在这些社交中心。相比之下,Phantom Forces(幻影力量)这样的竞技类战斗游戏将地图设计得较小,以迫使玩家之间频繁交战。

https://developer.roblox.com/assets/bltefce3ee46dbbbfa7/bloxburg.png

欢迎来到方块堡 作者:Coeptus

https://developer.roblox.com/assets/blt7475ca5da83d057c/phantom_forces_ds.png

幻影力量 作者:StyLiS Studios

避免分裂玩家基数

以多种游戏模式发布游戏时,可能带有分裂玩家基数的风险。例如,如果游戏是大逃杀类,在玩家基数足够多之前请考虑发布一个“小队”模式。一旦开发者认为游戏已有足够多的玩家,即使分段也不会影响服务器上的玩家数量,再考虑加入单人游戏等更多模式。

提供登录奖励

维持健康而稳固的社区的方法之一,是确保玩家经常返回。在 Roblox 中一种常见的办法是提供登录奖励,例如/articles/Developer Products In Game Purchases|游戏内物品/articles/Badges Special Game Awards|徽章等。只要玩家为获取奖励而返回,游戏就会成为他们日常习惯的一部分,使其维持一定的活跃玩家基数。

可激励奖励的方式包括:

  • 如果玩家连续多天登陆可获得比普通奖励更好的奖励。例如,角色扮演游戏 Adopt Me!(领养我!)为每天登录的玩家提供游戏内货币,并在连续五天后提供一份神秘礼物。

  • 提供认可玩家连续登陆的方式,例如奖励专属的外观物品。这会提醒其他玩家连续登陆奖励的价值。

社交功能

友谊和社区可提高玩家的留存度与参与度。虽然 Roblox 包含诸如游戏内聊天和好友系统这样的功能,您也可以用特定的社交功能来增强游戏。

提示好友互相加入

Roblox 提供 SocialService 函数,让玩家可以邀请好友加入其当前的游戏服务器。

https://developer.roblox.com/assets/blt68abe5b46fb198c0/InviteFlow1.jpg

以下代码示例演示如何使用 SocialService API 实现此功能:

发送游戏邀请 ```

local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer

local function canSendGameInvite(targetPlayer)
	local res, canSend = pcall(SocialService:CanSendGameInvite(targetPlayer))
	return res and canSend
end

local function promptGameInvite(targetPlayer)
	local res, canInvite = pcall(SocialService:PromptGameInvite(targetPlayer))
	return res and canInvite
end

local function openGameInvitePrompt(targetPlayer)
	local canInvite = canSendGameInvite(targetPlayer)
	if canInvite then
		local promptOpened = promptGameInvite(targetPlayer)
		return promptOpened
	end
	return false
end

local function invitePromptClosed(senderPlayer, recipientIds)
	-- 处理被发送者邀请的玩家的自定义逻辑
end

local function inputBegan(input, gameProcessed)
	local inputType = input.UserInputType
	local touch = Enum.UserInputType.Touch
	local mouse1 = Enum.UserInputType.MouseButton1

	if inputType == touch or inputType == mouse1 then
		openGameInvitePrompt(player)
	end
end

script.Parent.InputBegan:Connect(inputBegan)
SocialService.GameInvitePromptClosed:Connect(invitePromptClosed)
要使此代码示例生效,必须将其置于 `GuiButton` 下的一个 `LocalScript` 中。当玩家激活按钮时,它将执行 `openGameInvitePrompt()` 函数,检查是否可以通过 `SocialService/CanSendGameInviteAsync|CanSendGameInviteAsync()` 发送游戏邀请。然后它将用 `SocialService/PromptGameInvite|PromptGameInvite()` 打开邀请提示。

### 凝聚玩家

通过添加凝聚玩家的系统来鼓励自然的社交互动。这可以是一个需要不止一位玩家参与的挑战,例如战斗游戏中的头目战,或社交游戏中的电影剧院。

### 在游戏内庆祝玩家的成功

认可玩家在游戏内的成就不仅奖励其个人,也会引起讨论或激励其他玩家追求该奖励。例如:

  * 给获得奖励的玩家加上临时粒子效果。
  * 向大厅里的全体玩家广播一条消息。
  * 使用排行榜来展示玩家的成就。

[Egg Farm Simulator(鸡蛋农场模拟器)](https://www.roblox.com/games/1828509885)就是一个认可玩家成就的例子。它包含一个排行榜,策略性地置于游戏区域的中央,以便展示最专注的玩家的成就。

## 更多资源

  * [社交游戏的社交机制](https://www.gdcvault.com/play/1014555/Social-Mechanics-for-Social-Games)
  * [经典社交机制:多人游戏背后的引擎](https://www.gdcvault.com/play/1013827/Classic-Social-Mechanics-The-Engines)



***__Roblox官方链接__:[设计多人游戏](https://developer.roblox.com/zh-cn/articles/designing-for-multiplayer)