Unity Summer of Code Post Mortem: Cutscene Editor

If you find this article contains errors or problems rendering it unreadable (missing images or files, mangled code, improper text formatting, etc) please contact the editor so corrections can be made. Thank you for helping us improve this resource

In the final part of our Unity Summer of Code interviews we speak to Canadian programmer and filmmaker Matthew
Miner about his experiences developing his Cutscene Editor project for Unity.

How would you describe your project to someone who had
never heard of it before?

The Cutscene Editor is a tool for creating realtime cutscenes in Unity. It's inspired by existing video editing applications like Final Cut and Adobe Premiere. The developer places media clips
(animations, audio, etc.) on a timeline, where they can be rearranged and trimmed. None of this requires scripting, meaning that veteran game developers and traditional filmmakers alike can pick up
the tool and create a cutscene right away. The ability to easily modify clip timing on a timeline will hopefully allow developers the same freedom of experimentation that filmmakers enjoy, which in
turn will hopefully lead to more engaging in-game cinematics.

A goal of the project is to present the developer with a user interface that’s as user-friendly as Unity itself. It’s a lofty goal, and one that might take a while yet to achieve, but
it’s certainly attainable.

What is your background and experience game development,
Unity or coding in general?

I'm a recent graduate of Vancouver Film School and a current student at the University of Waterloo, where I'm partway through a computer science degree. Despite being an avid fan of the Unity game
engine, I don't actually play very many video games myself; a few games of chess a week against the computer are about all the gaming I get in. I find their potential though as an art form
fascinating. Human-computer interaction and interactive media are topics I find very interesting, and in the future I hope to explore new and novel ways for developers to build engaging experiences
for their audience.

I've been tinkering with Unity since it was released in 2005. I have yet to complete a full game — most times I start one then drop it shortly afterwards for another when a new idea strikes.
I have a folder overflowing with half-completed projects. Only recently have I been exploring the ability to extend the Unity editor itself, which oddly I've found more rewarding than game
creation.

As far as coding goes, I've been doing a little bit of everything since secondary school. I’ve done a fair amount of Java programming in the past, which has made learning C# (one of the
three languages in Unity) a breeze. And while arguably not coding, I've spent many years building websites using all the usual languages.

I'm a huge fan of programming and an even bigger fan of cinema. If you're a filmmaker there's fantastic tools for cutting the footage you've shot, but if your films happen to be inside a video
game then your options are limited. As game projects grow in scale I imagine the expertise of traditional filmmakers will become an essential part of building cutscenes, and they’ll demand
tools as flexible and powerful as the ones available in the film industry. I figured I might as well start building those tools.

And I must say, I’ve sat through many a terrible cutscene. I realize they’re not easy to make, so hopefully my project can help.

What does your project bring to the table that isn’t
available already?

The Cutscene Editor doesn't do anything new that can't already be done by a developer and several scripts. What it provides is a visual environment to build your cutscene, which I think is a more
natural way of putting one together. I honestly don’t know if other tools like this exist; as far as I’m aware it’s the first of its kind for Unity.

Unity - Summer of Code

How would you describe Unity to someone who has never used
it before?

Unity is the glue that holds all the elements of a game together. You get a 3D environment, a physics engine, an audio and video playback system, and a slick user interface to tie it all together.
The excellent asset importing system provides a smooth workflow for artists and developers to collaborate. Basically, Unity takes care of all the stuff you don’t want to do while building a
game and allows you to focus on the fun part of development (relatively speaking of course — if you have no love of programming, Unity won’t suddenly make writing code pleasurable). It's
about as easy to use as a game authoring tool can foreseeably be without limiting the developer's creativity.

What originally attracted you to use Unity?

I was just becoming interested in game development when Unity rolled along. Its ease-of-use was attractive to a newcomer programmer like myself. I didn’t have to compile every time I wanted
to tweak a value; I could just hit play, make changes, and see the results instantly. Making a game before was something that would take me a month and still look like garbage. With Unity I could
make something that actually looked and played decent in a weekend. It allowed me to do things I previously thought to be the realm of professional game studios only.

Which platforms do you target with Unity when making
games?

I’m mostly interested in web deployment. High quality 3D games are a rarity on the web, and it’s an area that I think has huge potential. Social networking sites like Facebook and
MySpace have enormous amounts of users who love to interact with each other, and video games are a great way to have fun with other people online. It’s a real untapped market.

While the web player penetration isn’t as high as it could be, it provides the easiest install of a browser plug-in that I’ve experienced. Web deployment is simply one of the best ways
for an indie developer to get their game out and enjoyed; no publisher needed. So while I don't actually make many games myself, if I did that's the platform I would target. A year ago I would have
answered the iPhone, but with over 21,000 games on the App Store, getting exposure looks to be an intimidating challenge.

What inspired you to enter Unity’s Summer of Code
competition this year?

It looked like an interesting competition, and the timing was right. Any other summer I wouldn't have been able to participate, but it just happens that I'm working for the summer as a freelancer
and have a flexible schedule. I have a long list of Unity projects I'd like to work on, so the prospect of getting paid for one was attractive.

A local company named OverInteractive Media offered any winners from the Vancouver area a spot in their office to work for the duration of the program, which sweetened the deal even more. Being
surrounded by other Unity enthusiasts in a fast-paced startup company sounded like a valuable experience (which, I might add, it was).

Would you have created your project without the
competition?

Yes, though it would have taken a much longer time. For whatever reason I tend to be much better at meeting deadlines imposed by others than at ones that I set for myself. Time management is
easier when someone's waiting to see results. With money involved I treated the project like a full-time job, which I wouldn't have done had I viewed it as a hobby.

What does being selected as a final project in the Summer
of Code competition mean to you?

Yes, though it would have taken a much longer time. For whatever reason I tend to be much better at meeting deadlines imposed by others than at ones that I set for myself. Time management is
easier when someone's waiting to see results. With money involved I treated the project like a full-time job, which I wouldn't have done had I viewed it as a hobby.

Development – Post Mortem

After you had the original idea, describe the process you
took in prototyping the idea and finally bringing it to completion...

I took a look at video editing applications and wrote down features that I felt were essential for editing together a scene. I then thought about how they would have to be modified to work with
media in a video game cutscene. I wanted to keep the basic concepts the same. After all, camera shots in a video game and camera shots in a film are basically the same thing. I didn't spend very long
in the planning stages, as I had a concrete idea of what I wanted the final product to be when I first applied to the Summer of Code. The day after I learned I was accepted I dived right into the
coding.

Did you plan the project in detail, or did you let it
evolve along the way?

When I started I had a clear idea of what I wanted to achieve. Once my initial plan was in place I didn't make many changes to it. With more time I might have tried out different solutions to
problems, but my mentality throughout the development period was just "make it work." In its current state the Cutscene Editor looks and behaves fairly close to how I originally envisioned it.

How did you go about testing the project?

I tossed together a small scene with assets from past projects and used the Cutscene Editor to make it come alive. Putting the tool to use gave me insight into where improvements needed to be
made, what worked well and what didn't. I tried to approach the task of creating a cutscene as someone first using the editor would.

The interface is responsive and feels natural. The timeline in, say, Final Cut doesn't feel very different from the timeline in the Cutscene Editor. When I started I wasn't sure if I would have
difficulty making Unity do my bidding, but fortunately it wasn't limiting at all. Once you understand how the GUI system in Unity works and how it can be used to manipulate objects in the scene
you're really able to build whatever you like.

What didn’t go so well?

The transitions and filters system is a bit rough around the edges. It's almost just as easy to add a filter yourself by dropping a fullscreen effect onto a camera manually. This was the last
feature I worked on before the submission deadline, and it's admittedly very rushed. Lots of work has yet to be done to make this system as easy to use as it's intended to be. Fortunately I don't
think it's the most essential feature and some may not notice its crude state.

If you were to go back and do your project again, what
would you do differently?

I made the mistake of working on everything at once; over the course of a day I'd do some coding for the scissors tool, work a while on media importing, and tweak the GUI a bit. In the final week
of development I had a lot of features that didn't work particularly well and desperately needed polishing (like the transitions and filters I mentioned above), and I was scrambling to finish them
up. Looking back, this most certainly wasn't the best way of approaching the project. A better development path would have been to work on each feature one at a time – build it and make sure it
works great before moving on to the next one.

What would you do the same?

Keeping the feature set limited was a good choice. This project could have easily spiralled out of control if I had attempted to include all the features I want in a cutscene editor.

Which part of the project did you find the most
interesting or fun?

Designing the GUI was really enjoyable. I've always been obsessed with user interfaces; making sure things appear exactly right tends to be a priority. Most of my interface designing
experience comes from building web sites, so it was a nice change to be creating something more application-like.

... and which part did you find the least interesting or
fun?

Trying to get a list of objects of a particular type from the project's assets still has me stumped. I spent a while on this specific problem, and they weren't the most enjoyable hours of my
life.

Did you have enough time to complete your project?

A month and a half was, I think, enough time to complete a project. It certainly wasn't enough time to complete the project I initially had in mind. I realized that from the start though
and limited the features I planned to implement.

Is there anything else you’d like to have added or
spent more time on if you had the time?

Customizing the display of subtitles isn't as easy as it could be and will require some effort by the developer to get exactly right. Ideally you could simply drop in a background image and
position it on the screen by dragging with the mouse, but unfortunately this isn't yet the case. A seasoned developer should have no trouble getting it to appear as they want it to, but beginners
might have a more difficult time. I've read several requests on the Unity forums for easy dialog scripting, and I think the Cutscene Editor could offer a really attractive solution given a bit more
development time.

Is there any advice you’d like to offer any
developers based on your experience in this project?

If you have a problem, there's a good chance that it's already been encountered and solved by somebody else. I learned a lot by looking at somebody else's solution. Reinventing the wheel is only a
good idea when you have the time and resources to make a better one; most of the time that existing wheel will work just fine.

Unity Development

Have you ever developed an addon for Unity before?

I’ve never developed an addon of this scale. In the past I've written a few editor scripts that manipulate game objects in the scene view, but that’s about all. Needless to say, I
learned quite a lot about editor scripting during the past two months.

How did you find the process of creating an addon of
Unity?

At times it was incredibly frustrating. The documentation on editor scripting has a little ways to go. It’s not always particularly obvious what a particular function does – some
functions have extensive documentation with example code snippets while others lack even a sentence describing their purpose. Editor scripting is relatively new and not the focus of most Unity
developers, so I can understand that this area of the script reference might not be a priority. There's also not a huge number of examples to learn from, unlike actual game creation where there's a
wealth of resources.

With that said, just having the ability to create an add-on indistinguishable from the tools the Unity team makes is incredible. I wish every application could be extended so easily. There's been
some amazing addons built, and I imagine we'll see many more as time goes on. Every new Unity release makes it easier to extend the editor.

Would you create another addon for Unity?

Most definitely. Almost all the projects I hope to work on in the future involve creating addons for Unity.

What support did you get along the way?

The Unity forums were a constant source of reference. Answers to a lot of the questions I had were a quick search away. The Unify Community Wiki was also a valuable source of knowledge. It
contains a wealth of scripts that beginner and veteran developers alike will find useful.

Looking forward...

What do you plan to do next?

The Cutscene Editor is far from being perfect, and it has a long way to go until it can match the power of the video editing software that inspired it. I intend to keep developing it as much as
possible and add in all the features that got put on the backburner. To hopefully gain some additional developers I plan to place the Cutscene Editor under a liberal open source license and encourage
community involvement. I imagine there’s many areas where it can be improved that I haven’t even considered yet.

Would you enter another Unity Summer of Code
competition?

Absolutely. By being a participant I’ve met a lot of cool people that I wouldn’t have met otherwise, and being able to talk directly to the Unity developers has been a great
opportunity. For a student like myself it’s been a very positive experience. I would encourage anyone with a good idea and some spare time to apply when the next Summer of Code rolls
around.

Do you have any other comments you’d like to make
about Unity, Unity Summer of code, your project or development in general?

If you're a game developer (or have dreams of being one) and haven't yet checked out Unity, I highly encourage you to do so. I continue to be impressed by its capabilities. And the Unity
community's usefulness can't be understated. I have yet to find a friendlier, more resourceful group of people.

As for my own project, if it sounds interesting to you and you'd be interesting in helping with its development, I'd love to hear from you. The project hasn't yet been released to the public, but
it hopefully will be after Unity 2.6 is released.