経路を歩く
Coddyの「Robloxゲーム:タワーディフェンス」コースのレッスン 2/18。
敵は、workspace.Path.Waypoints内の目に見えないパーツで示された経路を歩きます。名前は1から6です。GetChildrenは順序を保証しないため、まず名前の数字で並べ替えます。
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)各敵はServerStorage.Enemies内のモデルです。これを複製し、PivotToを使ってウェイポイント1の上に配置し、workspace.Enemiesを親に設定します。
HumanoidはMoveToで歩き、到着するとMoveToFinishedイベントが発火します。8秒後に諦めてfalseを返すため、長い区間を進むのが遅い敵には、到着するまで再度指示を送ります。
repeat
humanoid:MoveTo(waypoints[i].Position)
until humanoid.MoveToFinished:Wait()歩行には時間がかかるため、walkPathはtask.spawnを使って独自のスレッドで実行され、スクリプトはそのまま処理を続けます。
チャレンジ
簡単ServerStorageとlocal enemies = workspace.Enemiesを取得します。- ウェイポイントをリストに入れ、番号順に並べ替えます。
walkPath(enemy)を作成します。ウェイポイントの2番目から最後まで、到着したとMoveToFinishedが示すまでMoveToを実行します。敵がいなくなったら(not enemy.Parent)、停止します。spawnEnemy(kind)を作成します。モデルを複製し、ウェイポイント1の5 studs上に配置し、enemiesを親に設定して、task.spawnでwalkPathを開始し、それを返します。"Zombie"を1体スポーンします。
Play を押して、歩く様子を見ます。その後、Check を押します。
自分で試してみよう
local Players = game:GetService("Players")
local Settings = require(game.ReplicatedStorage.Settings)
print("The base can take " .. Settings.BaseHealth .. " hits")
-- すべてのプレイヤーのリーダーボードにMoneyが追加される
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local money = Instance.new("IntValue")
money.Name = "Money"
money.Value = Settings.StartMoney
money.Parent = leaderstats
end)
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。