I hope you’re all doing well! I’m currently working on a project that involves creating compelling cutscenes featuring multiple characters, engaging visuals, sound effects, and camera animations. I want to ensure that this cutscene captivates players and enhances the overall gameplay experience.
However, I’m struggling with a few aspects and could really use your insights and tips! Here’s what I want to achieve:
Multiple Characters: How can I effectively manage and animate multiple characters throughout the cutscene?
Object Interactions: I want various objects in the scene to play a role during the cutscene. How could I incorporate animated objects in the animation?
Visual Effects (VFX): Are there any recommended resources or libraries for creating eye-catching visual effects? I’d love to know how you implement effects like particle systems during cutscenes.
Camera Animations: How can I create smooth camera transitions and animations? Should I be using specific camera manipulation scripts, and do you have any tips for keeping the focus on key elements?
GUI Elements: I’d like to integrate GUI elements (like dialogue boxes, fades, and impact frames) that appear during the cutscene. What’s the best method to synchronize these with the character dialogues and actions?
Sound Design: Lastly, sound can make or break a cutscene. What are the best ways to implement “perfectly” synced sounds into a cutscene like this?
If you have any tutorials, resources, or personal experiences to share, I would greatly appreciate it! I’m open to any suggestions or examples of cutscenes you’ve created that I could draw inspiration from. Or even better, if you could break down you’re process of creating full-fledged cutscenes. I’ve been scripting on Roblox for the past 2-ish years so I’d say I was an intermediate scripter, but for some reason I cannot figure out how to efficiently and properly create a cutscene like this.
Thank you in advance for your help, and I look forward to your responses!
Best,
NautyPotato.
Here are some examples that are similar to what I’m trying to achieve:
I forgot to mention, but I’m mostly interested third person cutscenes, but first person are also of interest.
ALSO this is very important - these cutscenes would need to play IN GAME.
For cutscenes, I use Moon Animators Cutscene Creator, which returns a list of all the CFrame values, etc etc etc. You can just play the animation if you’d like to just upload a video of what you created, but if you would like for the cutscene to play in game, you would need to cycle through the CFrame values, changing whatever is necessary accordingly. If you need help with scripting this part, I have an old script that did exactly this.
I’ve gotten the cutscenes to work inside of moon animator, but I can’t get them to play in game. Though, I’ve gotten the camera and character animations to play using a script I found, but when it comes to anything else such as parts, sounds, gui, etc, it never works. And a lot of times the camera and character animations get out of sync with each other.
But anyway, yes I mighttt need some help with the scripting because I’m probably missing something, so if you would like to share your script that would be awesome
here’s a module script for playing cut scenes in game:
local module = {}
local RunService = game:GetService("RunService")
local Character = game.Players.LocalPlayer.Character or game.Players.LocalPlayer.CharacterAdded:Wait()
local Camera = workspace.Camera
function module.Cinematic(CinematicsFolder, waitValue) --path to moon animator folder, how long it should wait at the end of the scene.
local Frames = CinematicsFolder.Frames
local LastFrame = Frames[#Frames:GetChildren()-1] -- Reference the last frame
local CurrentCameraCFrame = workspace.CurrentCamera.CFrame
local FrameTime = 0
local Connection
local lastFrameReached = false
local waitTimeCounter = 0
Character.Humanoid.AutoRotate = false
Camera.CameraType = Enum.CameraType.Scriptable
Connection = RunService.RenderStepped:Connect(function(DT)
FrameTime += (DT * 60)
local NeededFrame = Frames:FindFirstChild(tonumber(math.ceil(FrameTime)))
if NeededFrame then
Camera.CFrame = NeededFrame.Value
elseif not lastFrameReached then
-- Start wait period at the last frame
lastFrameReached = true
Camera.CFrame = LastFrame.Value
elseif waitTimeCounter < waitValue then
-- Increment wait time if we're still within the wait duration
waitTimeCounter += DT
else
-- Disconnect after wait time is completed
Connection:Disconnect()
Character.Humanoid.AutoRotate = true
Camera.CameraType = Enum.CameraType.Custom
Camera.CFrame = CurrentCameraCFrame
end
end)
end
return module
This is actually very similar to the script that I was using to animate the camera, but it was a local script in starterPlayerScripts. What would you say the benefits of using a module script are? (I’m not very familiar with module scripts)
It’s useful if you want to use the same function in different scripts or on both the server and the client. It can also make code more readable since the functions will be defined in a separate file. Essentially, it allows you to access functions or stored data in any file you want.
Ohh ok, that makes sense. I’ll be sure to incorporate more modules in my future projects.
So how would I make sure that everything stays in sync with the camera though?? Because I’ve used a script just like that before, and more often than not, the character animations get out of sync with the camera animation, and it really messes up the feel of the cutscene.