基地に到達する
Coddyの「Robloxゲーム:タワーディフェンス」コースのレッスン 3/18。
経路の終点に到達した敵は拠点にダメージを与えます。拠点の体力はサーバー上で管理する必要がありますが、すべてのプレイヤーの画面に表示されるため、ワークスペースの属性として保持しましょう。サーバーで設定した属性は、すべてのクライアントから見えます。
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount)は体力を減らしますが、0未満にはなりません(math.max)。最後のウェイポイントを通過した後、敵はこれを呼び出し、Destroyでゲームから退出します。
チャレンジ
簡単- ウェイポイントを並べ替えた後、workspace属性の
BaseHealthをSettings.BaseHealthに設定します。 damageBase(amount)を記述します。これはBaseHealthをamountだけ減らし、0未満にはしません。walkPathの最後のウェイポイントの後に、damageBase(1)を呼び出して敵を破壊します。
Playを押してから、Checkを押します。
自分で試してみよう
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local enemies = workspace.Enemies
print("The base can take " .. Settings.BaseHealth .. " hits")
-- 順番に並んだwaypoints(名前は1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- すべてのプレイヤーにleaderboard上で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)
-- 敵をpathに沿って移動させる。MoveToは8秒後に諦め、そのことを通知する
-- (MoveToFinishedがfalseになる)ため、遅い敵には到着するまで再び移動を指示する。
local function walkPath(enemy)
local humanoid = enemy.Humanoid
for i = 2, #waypoints do
repeat
humanoid:MoveTo(waypoints[i].Position)
until humanoid.MoveToFinished:Wait() or not enemy.Parent
if not enemy.Parent then
return
end
end
end
-- ゲートに現れ、pathを進む新しい敵
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- 最初のwaypointの真上に配置する
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- 今のところ敵は1体だけ
spawnEnemy("Zombie")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。