完成项目

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

恭喜!您刚刚创造了多人战斗模式!在这个系列中,您有:

  • 创建模块脚本,处理各种游戏功能,例如传送玩家。
  • 学习如何为开始和结束比赛的自定义事件
  • 用于管理玩家加入、赢得或离开游戏时。

但是,您的游戏已经准备好让其他人游玩了。通过让您的缩略图场独一无二,吸引玩家来您的游戏。

可选的改进

以下是一些提升您体验的方法。

改进地图视觉

有一个吸引人的地图可以为你的游戏增添新鲜感,让更多人开始游玩。花一些时间把你的灰箱等级变成真实地图。

在这个游戏开始时记得写一个游戏设置的描述?随着您的游戏的开版本,确保您的地图有一个清晰的设置。为了获取灵感,以下是一些由 Roblox 开发者打造的示例地图。

地图由 Luxeyes 制作
地图由 Janedel 绘制

您可以在 Studio 中构建,或使用预制资产。以下是 Roblox 上传的一些建议资产,可以用于构建环境。每个包包括高质量、完全纹理模型。

改变力场

在游戏中,您可能已经注意到玩家重生时会产生的力场。在“生成地点”属性中更改力场的持续时间。

  1. 点击相关的生成地点。
  2. 在 Properties > Forcefield 中,改变 Duration 值。

测试并确认变量

Roblox 上的成功游戏经常进行游戏性能测试,以确保游戏玩法公平。

与他人玩测你的游戏,并检查以关注中/正在关注内容:

  • 是否满意? 是否匹配结束太快,或是否取得胜利玩家?
  • 地图的大小是否合适?有没有区域感觉不太空?会花很长时间才能碰到另一个玩家吗?

测试、评估和修改变量以改善游戏玩法。一些示例:

  • GameSettings.matchDuration 更改,以在更大的地图上让比赛更长。
  • 如果玩家感觉它太突然,请延长中场休息时间。

让大厅社交

在 Roblox 上,人们经常会添加小游戏来鼓励玩家在中场休息时玩耍并交际。这可以包括把球体部件与物理学打在一起,以便玩家可以游玩,或甚至是小障碍路线。

可选挑战

许多 Roblox 体验在发布后仍然会获得更新。以下是一些可以为您项目添加新功能的可选挑战。

陷阱

通过添加捆棘或阻碍玩家而让地图更难以挑战。请在创建陷阱中了解更多信息。

追踪分数

创建一个排行榜,该排行榜跟踪人在回合中获胜的次数。使用此文章上的代码在 排行榜 上。

能力提升

创建脚本部分,例如修改玩家的速度或工具的攻击力。记住,在游匹配结束后,使用resetMatch()重制能力设置。为了获取更多信息,请参阅能力设置教程。

添加更多竞技场

使用不同的设置和随机地图选择来建造更多竞技场。 每当玩家开始一场匹配时,一个名为 MapManager 的模块脚本将选择一个随机地图,然后根据需要分配玩家到那些生成位置。 查看下面的代码框如果您需要提示或要查看实现一种实现。


-- [[
Setup Notes:
1. In Workspace, create a folder named Maps. Store all parts of a map in individual folders.
2. For each individual map, include a folder named SpawnLocations
3. When starting a match, use pickNewMap() to get a random map. When assigning player spawn points, use
GetSpawnLocations() to get a table with all locations.
]]
local MapManager = {}
local mapsFolder = workspace.Maps
-- 储存可以在之间旋转的所有地图
local availableMaps = mapsFolder:GetChildren()
-- 存储当前游游玩中的地图
local activeMap
-- 用于获取随机地图。
local randomGenerator = Random.new()
-- 从可用地图表中获得一个随机地图
function MapManager.pickNewMap()
local whichMapKey = randomGenerator:NextInteger(1, #availableMaps)
activeMap = availableMaps[whichMapKey]
print("New map: " .. activeMap.Name)
end
-- 返回一个包含当前生成点的表
function MapManager.getSpawnLocations()
local spawnPoints = activeMap:FindFirstChild("SpawnLocations")
local availableSpawnPoints = spawnPoints:GetChildren()
return availableSpawnPoints
end
return MapManager