Page 1 of 2

Lua Codes slows down game in cutscenes

Posted: Fri Nov 19, 2021 6:47 am
by OneManOnMars
Hey there, I use the sequence functions quite a lot in my game to generate cutscenes.

This can look like this:

Code: Select all

AnimatorPlay(WALK_S, LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Female_Soldier/Female_Soldier_Sprite); MoveTo(WP_Plant, Female_Soldier, 1.75); AnimatorPlay(ATTACK, Female_Soldier_Sprite)@1.75; AnimatorPlay(ATTACK, Female_Soldier_Sprite)@2.25; SetActive(LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Ballon_Pop_effect_cs, true)@2.5; SetActive(LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Balloon00, true)@2.75; Parent(LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Female_Soldier, LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Balloon00, true)@3.5; AnimatorPlay(HANG2BALLON, LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Female_Soldier/Female_Soldier_Sprite)@3; MoveTo(WP_Plant, Sargent, 1)@5; MoveTo(WP_Plant, Male_Soldier, 1)@4.5; AnimatorPlay(WALK, Sargent, 1)@4.5; AnimatorPlay(WALK, Male_Soldier, 1)@4.5; FlipObject(Sargent_Sprite)@4.5; CustomFader(ScreenBlackOutIn, 2, 1)@5; required GoToNextCinTarget(CameraSequence)@6; SendMessage(StopConversation,,Play_SpecialMovement)@7; required PersistentSetActive(Soldier_Sequence_Start, false)@8; Continue()@7.1; required SetActive(JS_sfx_rescue_begins_rope_snap, true)@2.5; required SetActive(JS_mus_rescue_begins_ducks_volume, false)@8;
The issue is that this leads to some very long frame times on certain occasions during this sequence. Especially on Nintendo Switch. My levels are quite big and can contain thousands of game objects. So I guess the heavy usage of "find by name" leads to this problem. I tried to use the direct path [LEVEL_ARCHITECTURE/LEV_ELEM_00a/PLAYGROUND/SEQUENCES/Soldier_Sequence_Start/Actors/Balloon00] to the game object to ease this issue. This helps a bit but does not solve it entirely and it would consume an extreme amount of time to go through all the conversations and find all the direct paths to every game object.

So, I was thinking about if there is a way to find all the objects on start so all the assignments would happen when the level is loaded and not at the very frame the object is needed.

Any help is appreciated.

Re: Lua Codes slows down game in cutscenes

Posted: Fri Nov 19, 2021 7:45 am
by Tony Li
Hi,

That's a great idea. I will add a script for this in version 2.2.23.

BTW, minor point: That isn't Lua code; they're sequencer commands.

Re: Lua Codes slows down game in cutscenes

Posted: Mon Nov 22, 2021 7:59 am
by OneManOnMars
Hi Tony,

great to hear that the idea seems to be a good one and can be implemented. Are there any chances you can provide these changes also for the version I am using? 2.2.0

I would not like to update since the current version seems to be somewhat slower when saving. So if this is possible. I would be grateful.

Ah, right. Sequencer Commands, thanks.

Re: Lua Codes slows down game in cutscenes

Posted: Mon Nov 22, 2021 8:48 am
by Tony Li
It will be pretty deeply integrated into the Dialogue System and may depend on changes in the 23 releases since 2.2.0. You may be able to back-port it to 2.2.0, but I recommend that we take a look at your saving issue instead. Can you describe what seems to be slower about saving? It you think it's related to the speed of saving quests and items (i.e., things defined in the Dialogue Editor's Quests/Items section), there is a significant optimization in 2.2.23.

Re: Lua Codes slows down game in cutscenes

Posted: Mon Nov 22, 2021 11:44 am
by Tony Li
Hi,

Here's the patch:

DS_SequencerShortcutsPatch_2021-11-22.unitypackage

You can try backing up your project and importing it. It adds a 'Referenced Subjects' list to the Sequencer Shortcuts component.

Re: Lua Codes slows down game in cutscenes

Posted: Wed Nov 24, 2021 4:06 am
by OneManOnMars
Thanks so much, Tony! This sounds great. I will import it and give it a try. This should fix the issue! I will give you feedback once implemented. However, this will take a few days at least. :)

-------------------

Alright, I was too curious and wanted to know if this works. And I stumbled over a few questions:

If I use a sequence Trigger I would simply add the Sequencer Shortcut script to the same game object and assign all used references to the Subjects list?

Will this work also if I have sequences in conversations? If yes, where would I add the Sequencer Shortcuts script?

I think I do not understand the functionality of the Shortcuts. Can you explain this?

-------------------

Another Update:
I simply gave it a try. So, Sequence in the conversation node - added the Sequencer Shortcut to the Trigger that starts the sequence. Added all objects used in the sequence into the list.

Image

I created a quick switch build with the given sequence and it does run butter smooth! It's a big improvement. But there is one big stutter at the beginning of the sequence.

Check out the video here:
https://www.dropbox.com/s/4q7diqxtto5nl ... r.mp4?dl=0

So it is much smoother, the part where the soldier woman spawns the balloon and flies away had big stutters before. But it looks like that all references are now caught at the very beginning of the sequence. Is that right?

It would be even better if this happens on awake when the hole scene is loaded. The screen is black in that case anyway and stutters would not be visible.

Re: Lua Codes slows down game in cutscenes

Posted: Wed Nov 24, 2021 8:50 am
by Tony Li
Hi,

If your sequence trigger GameObject starts inactive, move the Sequencer Shortcuts component to a GameObject that starts active in the scene. You can create a new, empty GameObject for it. Then the Sequencer Shortcuts will register all those GameObjects as soon as the scene loads.

If there's still a stutter, it could be due to other conversation startup activity. If this is the case, try setting the Dialogue Manager GameObject's Other Settings > Warm Up Conversation Controller to Extra.

And if there's still stutter and the start of the conversation checks a lot of conditions, see: How To: Use Group Nodes To Reduce Condition Checking Time

Re: Lua Codes slows down game in cutscenes

Posted: Wed Nov 24, 2021 12:29 pm
by OneManOnMars
Awesome! Thank you Tony for the detailed answer. Your help is very much appreciated!

Re: Lua Codes slows down game in cutscenes

Posted: Wed Nov 24, 2021 1:42 pm
by Tony Li
Happy to help!

Re: Lua Codes slows down game in cutscenes

Posted: Sun Jan 16, 2022 4:16 pm
by ffyhlkain
Hi Toni.

I'm one of the programmers helping OneManOnMars. Thanks for the quick help on this topic. I wanted to write some lines about a couple of pitfalls we found :)

1. Dictionary keys are GO names
This leads to overriding old entries with new ones in case the name is the same (e.g. Enemy, Enemy,...). Is okay when dealing with one scene, provides to be troublesome with loading multiple scenes, because...

2. Null entries are not removed
The UnregisterSubject method does nothing at the moment when the Transform is null. In case the current scene is unloaded, all Transforms become null (this is Unity code design. The GOs are not deleted from the cache yet, but all their properties are set to null) and then try to unregister will leave a lot of keys with a null value in the dictionary.

3. Static dictionary in SequencerTools.cs
Again this proves to be troublesome with multiple scenes, but mostly because of the previous points.

I know this was a quick shot and it helped us to get an idea how to improve the performance. We'll adjust the scripts to fix the mentioned problems for us. If you plan to add this to DS you may find this info useful.

Bests and thanks again!