✓ Accepted answer
Surprisingly enough, I had this same issue a couple days ago. I tried everything. I figured it out with one bit of code. Here's your code fixed:
for i=1,100,1 do
wait(0.05)
expl.CanCollide = false
expl.Size = Vector3.new(i*2,i*2,i*2)
expl.CFrame = script.Parent.CFrame + Vector3.new(0,-6,0)
expl.BrickColor = BrickColor.Random()
expl.CanCollide = true
end
I made small adjustments. First up I changed the repeat loop to a for loop. You were essentially using a more complicated for loop. A for loop takes 3 arguments. The first is the starting number. The second is the final number. The third is the increment by which it increases. I added two CanCollide lines to make sure that when the brick is growing bigger if it hits something it doesn't move upwards, or to any other location. First, it waits 0.05 seconds. Next, it makes the brick uncollidable. Then it changes the size. Now comes the position. I replaced Position with CFrame as it's more predictable and works more efficiently. Now the brickcolor is set to a random brickcolor. Finally, it's set collidable again. This should work fine. Let me know if you have any issues.