8.プロジェクトの終了

おめでとうぎざいます! マルチプレイヤーゲーム「バトルロイヤル」が作成しました。
このシリーズで学んだことは次の通りです。

  • プレイヤーのテレポートなど、様々なゲーム機能を処理するモジュールスクリプトを作成しました。
  • 試合の開始と終了のカスタムイベントの使い方を学びました。
  • 配列を使用して、プレーヤーがゲームを開始、勝利、または終了するのを管理しました。

しかし、あなたのゲームにはまだアップデートの余地が残っています。アリーナをユニークなものに変え、目を引くサムネイルを作成することで、プレイヤーをゲームに引き付けましょう。

オプションの改善

以下に、ゲームを向上させるいくつかの方法を示します。

マップのビジュアルを改善する

視覚的に面白いマップがあれば、ゲームの第一印象が強くなり、プレイを始めるきっかけになります。グレーボックスレベルを本物のマップにするために時間をかけてみましょう。

このシリーズの最初に、ゲームの舞台の説明を書いていたことを覚えていますか?マップを作る際には、明確な設定があることを確認してください。以下にRobloxの開発者が作成したマップの例をいくつか紹介します。

Luxeyesによるマップ
Janedelによるマップ

Roblox Studio で構築することもできますし、プリメイドアセットを使うこともできます。以下はRobloxによってアップロードされた、環境構築に使える推奨アセットです。各パックには高品質なフルテクスチャモデルが含まれています。

フォースフィールドの変更

ゲーム中、プレイヤーがリスポーンするときにフォースフィールドが表示されていることにお気づきでしょうか。SpawnLocationプロパティで、フォースフィールドの継続時間を変更します。

  1. 該当する SpawnLocation をクリックします。
  2. Forcefield プロパティで、Duration の値を変更します。

テストプレイと変数の確認

Roblox で成功したゲームは、ゲームプレイの楽しさと公平性を確保するために頻繁にテストプレイが行われています。

ゲームを仲間と一緒にプレイし、次のことを確認します。

  • 試合時間は適切ですか? 試合に勝てるプレイヤーがいないのに試合が早く終わったり、時間がかかりすぎたりしていませんか?
  • マップの広さは適切ですか? 空っぽすぎると感じるエリアはありませんか? 他のプレイヤーと遭遇するのに時間がかかりませんか?

ゲームプレイを向上させるために、変数をテスト、評価、修正します。いくつかの例をあげます。

  • GameSettings.matchDuration を変更して、より大きなマップで試合時間を長くします。
  • 休憩時間が短すぎると感じた場合は、GameSettings.intermissionDuration を変更して長めに設定します。

ロビーを社交的にする

Robloxの人気ゲームには、休憩時間中も楽しく交流できるようなミニゲームが追加されています。これは、プレイヤーが遊べるように物理シミュレーションが生かされた球体のパーツを入れたり、ミニ障害物コースを作ったりすることもあります。

アップデートのチャレンジ

多くのRobloxゲームはリリース後もアップデートを続けています。以下は、あなたのゲームに新しい機能を追加することができるものです。

トラップ

プレイヤーにダメージを与えるトラップや障害物を追加して、マップをより難しくします。
トラップの作成は、プログラミングの基礎「3-2 IF/THEN の練習ートラップ」をご覧ください。

リーダーボード

誰が何回勝利したかを表示するリーダーボードを追加します。ロビーにランキングボードを設置してもいいでしょう。
リーダーボードの作成は、アドベンチャーゲームの作成「2.リーダーボードのコーディング」をご覧ください。

パワーアップ

プレイヤーのスピードや道具の攻撃力を変更するようなパーツを作成します。試合終了後は、resetMatch() を使ってパワーアップの設定をリセットすることを忘れないでください。
パワーアップの作成は、プログラミングの基礎「3-3 IF/THEN の練習ーパワーアップ」をご覧ください。

アリーナを追加

異なる設定でより多くのアリーナを構築し、ランダムなマップ選択をプログラミングします。プレイヤーが試合を開始するたびに、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
-- Stores all maps that can be rotated between
local availableMaps = mapsFolder:GetChildren()

-- Stores the current map in play
local activeMap

-- Used to get random maps.
local randomGenerator = Random.new()

-- Gets a random map from the available maps table
function MapManager.pickNewMap()
    local whichMapKey = randomGenerator:NextInteger(1,#availableMaps)
    activeMap = availableMaps[whichMapKey]
    print("New map: " .. activeMap.Name)
end

-- returns a table with the maps current spawn points
function MapManager.getSpawnLocations()
    local spawnPoints = activeMap:FindFirstChild("SpawnLocations")
    local availableSpawnPoints = spawnPoints:GetChildren()
    return availableSpawnPoints
end

return MapManager

コメントを残す