Home

This is the home page of the ZCutscene documentation. This plugin will help you create amazing scenes and customize them as much as possible. On this page you can find information on:

  • ZCutscene plugin features
  • How to use plugin
  • Little introduction to ZCutscene script
  • And many more!

To navigate faster, use side menu.

Before you start

Before you start, check if you are ready to create cutscenes:

  • Check if enabled Output. If not, at the top of Roblox Studio find View tab, there find and enable Output
  • Check if enabled Command Bar. If not, at the top of Roblox Studio find View tab, there find and enable Command Bar

In Output, you can see a message about successful / unsuccessful action of plugin, and brief instructions for some functions.

In Command Bar, you can quickly execute scripts like in In addition category.

(1) Insert objects

That button inserts 2 objects into workspace:

  1. Cutscene folder
  2. CutsceneScript

Click on it and put inserted objects in:

  1. You can keep Cutscene folder in workspace.
  2. If you want, you can move CutsceneScript in any of these places:
    • ReplicatedFirst
    • StarterGui
    • StarterPack
    • StarterCharacterScripts
    • StarterPlayerScripts

Preparation completed!

(2) Set folder

Sets current selection as path to cutscene folder. This is necessary for the (3) Create new and (7) Hide/Show buttons to work.

To set folder, select the folder in Explorer and click on this button.

Why does this button exist?

The fact is that this plugin differs from other similar ones in that it can be used to create an unlimited number of cutscenes, so plugin has the ability to set main folder for them.

(3) Create new

Creates new camera position, using previous as template. This is the main function, which has several uses.

The first is without selection. It won't work without (2) Set folder. When clicked, it clones most recent object in the folder and gives it a name based on how many childrens there are in folder.

The second is using selection. It will work without (2) Set folder. To do this, you need to select camera position and click on the button. It clones the selected object and gives it a name that is 1 more than the name of the selected object.

First method requires "purity" in the folder, that is, there should not be any other objects in the folder, except for camera positions.

Both methods teleport just created camera position to your camera and align its position and orientation to the grid, to change this see (6) Change grid size.

(4) Rename +1

Adds "1" to selected object names. Select camera positions and click this button. Anything you selected will increase by 1 in name.

(5) Rename -1

Subtracts "1" from selected object names. Select camera positions and click this button. Anything you selected will decrease by 1 in name.

(6) Change grid size

Grid affects on position and orientation of camera positions. You can change it to:

  1. 1
  2. 0.5
  3. 0.1
  4. 0

If 0, then grid is disabled.

(7) Hide/Show

Hides/shows all camera positions in the cutscene folder.

Create/edit camera positions

As mentioned earlier, to create a camera position, you need to click on the (3) Create new button. Then what about editing duration, animation, FOV...?

Everything is very simple - attributes! If you have created enough camera positions and want to edit them, then:

  • Select camera position
  • Look in Properties and scroll to the bottom
  • Change variable values!

You can change variable values to whatever you want. Just remember a few things:

  • If field for number, write number there
  • If field requires animation name, write name without Enum.Xx. there. Example:
    • Enum.EasingStyle.QuadQuad
    • Enum.EasingDirection.OutOut

Also, if you don't want to change any variable values, for example FOV, just click on gear next to variable → Delete. If variable is optional, script will skip it.

ZCutscene script

CutsceneScript is the script required for cutscene to work. CutsceneScript can be obtained using (1) Insert objects button.

Initially, the script is only executed when it is initialized, but you can change this.

Below are some examples of good usage.

1. Start cutscene for all players on server in one time

First create a RemoteEvent and put it in ReplicatedStorage. Name it StartCutscene.

Next, open CutsceneScript, scroll to the bottom and replace these lines:

wait()
StartCutscene(workspace.Cutscene)

With this one:

game.ReplicatedStorage.StartCutscene.OnClientEvent:Connect(function()
    StartCutscene(workspace.Cutscene)
end)

Next, you need to create a Script and put it wherever you like. I recommend putting it in ServerScriptService. Open script you just created and paste a couple of lines into it:

wait(30)
game.ReplicatedStorage.StartCutscene:FireAllClients(workspace.Cutscene)

That's it! Now, after 30 seconds, for every player on the server will start a cutscene.

2. Start cutscene for player who touched part

First create a RemoteEvent and put it in ReplicatedStorage. Name it StartCutscene.

Next, open CutsceneScript, scroll to the bottom and replace these lines:

wait()
StartCutscene(workspace.Cutscene)

With this one:

game.ReplicatedStorage.StartCutscene.OnClientEvent:Connect(function()
    StartCutscene(workspace.Cutscene)
end)

Next, you need to create a Script and put it in the part. Open script you just created and paste this code into it:

local Part = script.Parent
local Debounce = false

Part.Touched:Connect(function(Hit)
    if Hit.Parent:FindFirstChild("Humanoid") and not Debounce then
        Debounce = true
        local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
        game.ReplicatedStorage.StartCutscene:FireClient(Player, workspace.Cutscene)
        wait(30)
        Debounce = false
    end
end)

That's it! Now, after player touches the part, a cutscene will start for him, and for 30 seconds it will not be possible to start cutscene again.

In addition

Convert values to Attributes:

local CHS = game:GetService("ChangeHistoryService")
CHS:SetWaypoint("Convert Before")

local Sel = game:GetService("Selection"):Get()
for i, p in pairs(Sel[1]:GetChildren()) do
    for _, v in pairs(p:GetChildren()) do
        p:SetAttribute(v.Name, v.Value)
        v:Destroy()
    end
end

CHS:SetWaypoint("Convert After")

Information

Thanks for reading. If plugin and documentation was useful to you, please rate it!

About

AutoHotKey, Gdip - screenshots

Ezgif - creating gifs from screenshots

Visual Studio Code, Roblox Studio - coding

Material Icons - plugin icons

Github Pages - website hosting