Here's my script.
I tried using if Part:GetTouchingParts() ~= nil but that didnt work to well as it wouldnt fire if there were no parts touching it to fire the event.
script.Parent.MeshPart1.Touched:Connect(function(Part)
script.Parent.MeshPart1.BrickColor = BrickColor.new("Really red")
script.Parent.MeshPart2.BrickColor = BrickColor.new("Really red")
script.Parent.MeshPart3.BrickColor = BrickColor.new("Really red")
end)
script.Parent.MeshPart1.TouchEnded:Connect(function(Part)
script.Parent.MeshPart1.BrickColor = BrickColor.new("Deep blue")
script.Parent.MeshPart2.BrickColor = BrickColor.new("Deep blue")
script.Parent.MeshPart3.BrickColor = BrickColor.new("Deep blue")
end)
I couldn't really find any non laggy uncomplicated ways that dont involve things such as while true loops etc.

3 comments
Part:GetTouchingParts()returns a table. https://developer.roblox.com/api-reference/function/BasePart/GetTouchingPartsnote that gettouchingparts only returns baseparts that are literally intersecting the part's boundaries. that is, only a part inside another part will be included in the table. simply touching the surface does not count
diy