使用事件
碰撞事件是一个用于检测物体碰撞最常用且普遍的事件,通过它可以实现很多功能的逻辑。比如拾取道具,拾取金币等。
具体用法
这里将制作一个拾取金币获得积分的功能。
演示
教程
1、首先做一个金币,可以使用基础零件、自定义模型等,但确保碰撞体合适。搭建一个合理的UI,用于显示积分。
按照如图所示,将对象进行分组
2、接着我们创建一个值对象:这用于存储积分,在多人游戏中,最好的是不要放在Workspace中。
3、我们再来创建一个服务器脚本(Sciript)和客户端脚本(LocalScript)。
并且将客户端脚本的禁止状态(Disabled)设置为启用(true)
4、接着我们在客户端脚本(LocalSciript)中写入以下代码:
这里我们使用到了碰撞事件,将会检测到玩家和金币之间的碰撞,最后使积分增加。
local player = game.Players.LocalPlayer
local Model = game.Workspace:FindFirstChild("金币积分系统"):FindFirstChild("Folder")
for k,v in pairs(Model:GetChildren())do
v.Touched:Connect(function(Part)
if Part and Part.Parent and Part.Parent:FindFirstChild("Humanoid") then
local CoinNum = player.PlayerGui.UI_CoinNum.Frame.CoinNum
CoinNum.Value = CoinNum.Value + 1
player.PlayerGui.UI_CoinNum.Frame.TextLabel.Text = CoinNum.Value
v:Destroy()
end
end)
end
5、在服务器脚本(Sciript)中写入以下代码:
这里会将UI复制到玩家的界面中,并开启客户端脚本,且添加了金币旋转的效果。
wait(1)
local TweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new(
0.5, -- Time
Enum.EasingStyle.Linear, -- EasingStyle
Enum.EasingDirection.Out, -- EasingDirection
-1, -- RepeatCount (小于零时 tween 会无限循环)
false, -- Reverses (tween 完成目标后会反转)
0 -- DelayTime
)
for k,v in pairs(script.Parent.Folder:GetChildren()) do
local tween = TweenService:Create(v, tweenInfo, {Orientation = Vector3.new(0, 360, -90)})
tween:Play()
end
for k,v in pairs(game.Players:GetChildren()) do
local UI_CoinNum = script.Parent.UI_CoinNum:Clone()
UI_CoinNum.Parent = v.PlayerGui
UI_CoinNum.Frame.LocalScript.Disabled = false
end
6、最后整理分组,即可实现拾取金币获得积分的效果,这里只需要一个Model(金币积分系统),不断的在Folder里复制Coin即可,请记住Model(金币积分系统)一定要放在Workspace下面。
7、如果没看明白,这里附上源文件,好了教程就到这里
金币积分系统.rbxm (20.5 KB)