使用事件
碰撞事件是一个用于检测物体碰撞最常用且普遍的事件,通过它可以实现很多功能的逻辑。比如拾取道具,拾取金币等。
具体用法
这里将制作一个拾取金币获得积分的功能。
演示
教程
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)
 
      
    