Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

This Bezier Cutscene script works in studio, but not in game. How do I fix it?

Asked by 6 years ago

Hi, I'm having trouble with this Bezier CFrame script. For some reason, the script is not working in game, but working in studio. Here's this script:

                        local pointsModel = workspace.Points:GetChildren() -- this is a model with all the points we want to
                                                                           -- interpolate through. They are named in numeric order (1, 2, 3, 4 ,etc)

                        local pointsTable = {} -- we are going to create a table to store the points.

                        for k,v in pairs(pointsModel) do -- loop through the model
                            table.insert(pointsTable,v.CFrame) -- add the CFrame to the table
                        end 

                        local BezierModule  = require(workspace.BezierCFrame) -- I shouldn't have to tell you what this means.

                        -- this next little bit is a cool trick I use to make perfect timing and smooth interpolations
                        -- I'll tell you when things start getting relevant to the READ ME.

                        local runService    = game:GetService("RunService") -- access run service


                        local duration  = 5 -- duration of the camera interpolation in seconds
                        local start     = tick() -- we can use this to find out how much time has passed                        

                        runService:BindToRenderStep("BezierCamera",Enum.RenderPriority.Camera.Value, function() -- we do this to make the function run every frame, creating a smooth interpolation,

                            -- This is where things start to be relevant


                            local elapsedTime = tick() - start -- find out how much time has passed
                            local ratio       = elapsedTime/duration -- our Zero through One number
                                if elapsedTime >= duration then
                                    runService:UnbindFromRenderStep("BezierCamera") -- disconnect the function


                                else

                                    local cf = BezierModule:getCF(pointsTable, ratio) -- gets the CFrame based on the points and ratio. Simple as that.                     

                                    workspace.CurrentCamera.CoordinateFrame = cf -- sets the CFrame on the camera.
                                    workspace.CurrentCamera.Focus           = cf * CFrame.new(0,0,-1) -- makes the camera look forward
                                    workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
                                end 
                        end)

Are there any ways this is fixable?

Thanks! ;)

Answer this question