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.
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.
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
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.
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.
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.
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).
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
Most definitely. Almost all the projects I hope to work on in the future involve creating addons for Unity.
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...
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.
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.
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.
I am very interested in articles like this because I am new to this field. I recently started to develop, and friends advised me to contact the company to get started with the discovery phase of a software project. At first, I thought it was superfluous, but it turned out that this is a great service that helps to evaluate yourself with someone else's eyes