沿路径行走
Coddy Roblox 游戏:塔防 课程的第 3 课,共 22 课。
Humanoid 使用 MoveTo 行走,到达目的地时会触发 MoveToFinished 事件。等待 8 秒后,它会放弃并触发 false,因此在较长路段上移动缓慢的敌人会被再次发送移动指令,直到到达目的地:
repeat
humanoid:MoveTo(points[4].Position)
until humanoid.MoveToFinished:Wait()走完整条路径需要时间,因此 walkPath 会在自己的线程中通过 task.spawn(walkPath, enemy) 运行,而 spawnEnemy 会继续执行并返回。
挑战
简单让 Zombie 沿着路径行走。
- 编写
walkPath(enemy):对于i = 2, #waypoints,重复执行enemy.Humanoid:MoveTo(waypoints[i].Position),直到MoveToFinished:Wait()表示它已到达,或not enemy.Parent;如果敌人不在了,就返回。 - 在
spawnEnemy中,return enemy之前,添加task.spawn(walkPath, enemy)。
按“运行”:Zombie 会沿着路径走到蓝色基地。然后按“检查”。
亲手试试
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")
-- 按顺序排列的路径点(名称依次为 1、2、3……)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- 每个玩家的排行榜上都有 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)
-- 第 3 课:在这里添加沿路径行走的代码
-- 一个新敌人出现在入口处,沿路径行走
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- 放在第一个路径点的正上方
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
return enemy
end
-- 目前只有一个敌人
spawnEnemy("Zombie")
Roblox 游戏:塔防中的所有课
自己练习: Roblox 在线编辑器