摆动的门
Coddy Roblox 游戏:逃离黑暗 课程的第 3 课,共 25 课。
大厅的门上有一个 ProximityPrompt:玩家靠近时会看到“E 打开”(在手机上则是轻触),按下后会触发提示的 Triggered,并传入玩家。
门绕铰链转动,而不是绕中间转动。门模型边缘有一个不可见的 Hinge 部件。面板相对于铰链的位置是 hinge.CFrame:ToObjectSpace(panel.CFrame);让铰链转四分之一圈,再把这个位置变换回去,就得到打开后的门:
local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()补间会让门摆动,而不是突然跳到新位置。门打开后,会设置门的 Open 属性,并关闭提示。
挑战
简单让大厅的门摆动打开。
- 获取 TweenService。编写
openDoor(door):将它的Open属性设为 true,并关闭door.Panel.Prompt。 - 然后让
door.Panel补间 0.6 秒,到达机身的goal,旋转正四分之一圈:math.rad(90)。 - 编写
setupDoor(door):如果门还没打开,door.Panel.Prompt.Triggered就会打开它。对workspace.Rooms.Lobby.Door调用它。
按“开始”,然后在门边按 E:门会朝远离你的方向摆开。接着按“检查”。
亲手试试
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Lighting = game:GetService("Lighting")
local Settings = require(game.ReplicatedStorage.Settings)
-- 夜幕降临:没有阳光,四周只有微光,还起了雾
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")
-- 第 3 课:会摆动的门,写在这里
-- 每位玩家:每次重生都会获得一个手电筒
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
local flashlight = ServerStorage.Flashlight:Clone()
flashlight.Parent = player.Backpack
local beam = flashlight.Handle.Beam
flashlight.Activated:Connect(function()
beam.Enabled = not beam.Enabled
end)
end)
end)
Roblox 游戏:逃离黑暗中的所有课
自己练习: Roblox 在线编辑器