Menu
CoddyTech

ゴールライン

CoddyのLuaジャーニー「Robloxゲームのスクリプティング」セクションの一部。レッスン 23/24。

ゴールラインは勝利を記録し、勝者をスタート地点に戻します。player:LoadCharacterAsync()を使うと、リスポーンタイマーを待たずに、プレイヤーのスポーン地点に新しいキャラクターを出現させます。

少し時間がかかります。新しいキャラクターが現れるまでの間、ゴールは古いキャラクターのほかの身体パーツに対してもTouchedを発火し続け、そのたびに勝利が記録されてしまいます。これを防ぐのがデバウンスです。また、ゴールにはプレイヤーごとに1つ必要なので、2人のプレイヤーが同時にゴールした場合は、両方の勝利が記録されます。プレイヤーをキーとして、テーブルに状態を保存します:

local busy = {}
if not busy[player] then
	busy[player] = true
	-- 勝利をカウントし、プレイヤーを元の場所に戻す
	task.wait(1)
	busy[player] = nil
end

busy[player]は、そのプレイヤーに対応するテーブルの項目を読み取ったり設定したりします。項目がない場合はnilになります。busy[player] = nilとすると項目が削除されるため、次にゴールを通過したときには、再び勝利が記録されます。

challenge icon

チャレンジ

中級

金色のパッドがゴールで、このスクリプトはその中にあります。すべてのプレイヤーにはすでにleaderstatsがあり、Winsは0に設定されています。また、プレイヤーごとのデバウンスも設定済みです。

  1. プレイヤーのWinsに1を加えます。
  2. player:LoadCharacterAsync()でプレイヤーをスタート地点に戻します。
  3. その後、デバウンスを解除して、次の走行がカウントされるようにします。

Playを押して、ゴールまで2回走り、その後Checkを押してください。

自分で試してみよう

local Players = game:GetService("Players")
local finish = script.Parent
local busy = {}

finish.Touched:Connect(function(hit)
	local player = Players:GetPlayerFromCharacter(hit.Parent)
	if player and not busy[player] then
		busy[player] = true
		-- 1. プレイヤーのWinsに1を加える
		-- 2. プレイヤーをスタート地点に戻す
		-- 3. 1秒後、プレイヤーが再び勝てるようにする
	end
end)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Robloxゲームのスクリプティングのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ