场景内玩家传送¶
Time:5 分钟
“传送”一词用于描述将一组部件(通常是玩家的角色)移至某一坐标的动作。在 Roblox 中,设置一个部件的 Position
属性会断开该部件与任何其他相连部件的连接,从而破坏模型。因此,不可使用以下方法传送玩家,因为这会将躯干与头部断开。
game.Workspace.Player.Torso.Position = Vector3.new(0, 50, 0)
要在不消灭玩家的情况下正确传送玩家,必须使用 Cframe 属性并改用 Articles/Understanding CFrame|CFrame
数据类型。
game.Workspace.Player.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(0, 50, 0))
Cframe 对 MoveTo¶
Humanoid/MoveTo|MoveTo
可用于设置模型中的一块砖的 Cframe。仅当 Parent 属性为 Workspace 时,MoveTo 才会更改模型中部件的 Position/CFrame。
传送全部玩家¶
可通过迭代每一玩家角色并相应设置 Cframe 传送游戏中的全部玩家。
同时传送一组玩家时要小心:偏移目标位置,以免各玩家躯干重叠。
target = CFrame.new(0, 50, 0) --可能会是在砖块旁边或新的区域内
for i, player in ipairs(game.Players:GetChildren()) do
--确保角色及其 HumanoidRootPart 存在
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
--为每个角色添加值为 5 的偏移
player.Character.HumanoidRootPart.CFrame = target + Vector3.new(0, i * 5, 0)
end
end
上述代码会将每个玩家传送至位置(0,50,0),为其提供最大为 5 的偏移,以免其重叠。显然,将玩家向上偏移有助于避免相互碰撞,但如果玩家正在被传送至建筑物或房间中,则可能最终会将玩家放置于天花板或房顶上。在创建传送逻辑时要耐心谨慎,以免出现此类逾越边界情况。
传送效果¶
可使用 Articles/For Loops|for 循环
逐步增加肢体的透明度,从而加入淡出效果。
player = game.Players.Player --或许需要在这里进行改变……
target = Vector3.new(20, 10, 20) --……还有这里
function fadeTo(a, b, c)
for transparency = a, b, c do
--从 a 到 b,以 c 为计
for _, part in pairs(player.Character:GetChildren()) do
--对于此角色中的每一个对象
if part:IsA("BasePart") then
--都需要检查其是否为部件
part.Transparency = transparency
--若是则设置其透明度
end
end
wait(0.1)
end
end
fadeTo(0, 1, 0.1) --淡出
player.Character.HumanoidRootPart.CFrame = target --传送玩家
fadeTo(1, 0, -0.1) --淡入
其他效果可包括:更改 BasePart/Reflectance
以让玩家从地面腾空而起、闪闪发光,或使用 BodyAngularVelocity
让玩家旋转。
***Roblox官方链接:场景内玩家传送