I am trying to make a butterfly that can fly around everywhere randomly. My issue is that it flies away from the baseplate meaning you can no longer see it. I've tried many ways trying to make it turn around when it hits the edge and none of them have been working, the butterfly either down right stops at the edge or it doesn't fly at all. My newest attempt is adding parts, then if the butterfly touches the part it turns around. Here is my current script and I'll try to explain it the best I can.
local Body = script.Parent.PrimaryPart -- The body of the Butterfly, so I can use its CFrame local region = Region3.new(Vector3.new(-270, -8, -270), Vector3.new(270, 100, 270)) -- This is the region where the butterfly can fly in, when the butterfly leaves this region it just stops. It used to just fly off local b1 = game.Workspace.ButterflyBoundaries.Baseplate -- Not referring to the actual baseplate but instead this directory takes you through a couple of folders to then find the Baseplate boundaries local boundary = { -- All the boundaries that are in the Baseplate folder b1:WaitForChild("boundary1"), b1:WaitForChild("boundary2"), b1:WaitForChild("boundary3"), b1:WaitForChild("boundary4"), b1:WaitForChild("boundary5"), b1:WaitForChild("boundary6") } while true do wait() local partsinregion = workspace:FindPartsInRegion3(region, nil, math.huge) -- checks parts in region3 for i, part in pairs(partsinregion) do if part.Parent:FindFirstChild("ConfirmedButterfly") then -- checks if the part is a butterfly script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(math.random(-5,5)), math.rad(math.random(-5,5)), math.rad(math.random(-5,5)))) -- rotates the butterfly in a random direction wait() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.new(1,0,0)) -- makes the butterfly fly in whatever direction it is looking boundary[1].touched:Connect(function() -- from here onwards is where my script isn't working. When the butterfly touches the boundary it flies right through it script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) -- Here onwards is repeated for what I did with boundary[1] but with each of the other boundaries boundary[2].touched:Connect(function() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) boundary[3].touched:Connect(function() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) boundary[4].touched:Connect(function() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) boundary[5].touched:Connect(function() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) boundary[6].touched:Connect(function() script.Parent:SetPrimaryPartCFrame(Body.CFrame*CFrame.Angles(math.rad(90), math.rad(90), math.rad(90))) end) end end end
I'm unsure if there is a quicker or easier way to do this, any help would be appreciated. I'm fairly new to scripting and this is my first full fledged script that I've written by myself.
Lua is case sensitive. Use Touched instead of touched.