Using Unity Profiler for Optimization

While working on my most recent pull request to Fungus, I was told that Linq and foreach really shouldn’t be used with Unity because it can cause significant slowdowns. Noooooo! So I came up with an idea of what I wanted to implement based off of some provided reading(1)(2) but I wanted to SEE the change in speed for myself. So I decided to use Unity’s built-in Profiler.

To open the Profiler, go to Window->Profiler or hit Ctrl+7.

You can run the profiler and get a broad overview of how much your game hogs resources. But to test a specific method or chunk of code, you can create a custom profiler sample like I did here on my potentially bad bit of code:

I ran the profiler and I watched as the graph went up and down, not much of it making that much sense. Then I saw a spike in the graph where I was sure the problem bit of code ran. I entered the name of my sample, which was “CharacterSearch”, into the search bar to make it easier to find, then I navigated back through the frames until I saw it pop up in the hierarchy view. And that’s where I found this:
Spike before optimization
Garbage Collection Allocation of 0.7kb and time of 2.28ms. It might seem small but this stuff adds up, especially if you want to port to mobile. Let’s see if I can do better!

So I changed my code around to use a struct with a custom compare.

When I ran the profiler again with the new optimized code, I got much better results:

Less of a spike after optimization

0B GC Alloc and .34 ms! Wow…I really didn’t expect that much of a change.

Let me know if this is totally wrong or if there’s anything else I could do to speed this up in the comments. 🙂

Share on FacebookTweet about this on TwitterShare on RedditShare on TumblrPin on PinterestEmail this to someone


From what I’ve read of other visual novel developers and in game design in general, rapid prototyping will get you far. You can test your game, make changes easily and quickly without stressing out your writers with overly technical languages and unnecessary details. So I’ve created something that will help with that. I’ll call it SimpleScript for now.
Example use of SimpleScript
The new command is extended from ExecuteLua, so it’s pretty similar. The difference is that you can use a different syntax to write dialog faster, either within the provided text box or dragging and dropping a txt file into the SimpleScript TextAsset spot. If both are provided, it will run the TextAsset first and the contents of the TextBox second.

I’ve also allowed for inserting code blocks using Markdown’s standard three-backticks.

There’s still a lot of work to do on it, but since it’s still in the beginning stages of development, if you wanted something of your own in there or if you have any suggestions, let me know soon! Maybe I can add it.

Here’s what I have so far in the pull request.

Share on FacebookTweet about this on TwitterShare on RedditShare on TumblrPin on PinterestEmail this to someone

New Portrait Functions in Fungus+Lua

Rinku on Stage

My Pull request was merged!

The new instructions on how to use the portrait functions I made are on the wiki.

I also created an example project if you prefer to see it in action. It’s in the FungusExamples/FungusLua/Narrative folder and called PortraitControlExample.unity.

It was pretty easy working with Chris Gregan on planning for the portrait refactor. Next time I’ll make sure to rebase my pull request commits into one commit to make it easier to read and so I get that sweet, sweet contribution line count.

Share on FacebookTweet about this on TwitterShare on RedditShare on TumblrPin on PinterestEmail this to someone
1 2 3 4 5 6 9