It seems the more I study one game engine the more I look into the features of the other engine. In this case: UDK and Unity.
The title should really be "UDK vs Unity 3?". That is, can you compare the two engines now with Unity 3 upcoming features? And I believe the answer is yes.
This post will be updated as more information is known and will reflect my thought process on the decision making between the two engines. And of course I might mention a few things here that are wrong and I will update information as they become known to me. Currently I get my information about Unity 3 from Unity forums and public press releases.
So far I cannot make up my mind in terms of what engine to choose. And therefore I have decided not to make a final decision until Unity 3 becomes publicly available.
UPDATE: I made a decision and have switched back to Unity 2.6.1.
NOTE: This blog post has been edited after switching back to Unity. So it can no longer be considered unbiased.
The most important comparison is scripting features and coding workflow
UDK has latent functions. But it turns out that Unity has the same feature with Coroutines & Yield. So this whole argument that UnrealScript is a scripting language with game specific features doesn't hold with me. More specifically, UnrealScripts support for "States" right in the language is nice, but I don't buy the argument that doing the same thing with a "non-gaming" language yields code that is hard to maintain and update. Sure in UnrealScript you can write different versions of a function in many states, but there is nothing stopping you from doing that with C# in a clean way.
However Unity's iterative workflow cannot be matched by UDK at the moment. I still have no idea why you can't compile UnrealScript code and see the results immediately without having to restart UnrealEd.
Also on a personal note, as a C/C++ developer, it is much more useful to learn C# than it is to learn UnrealScript. I gave UDK extra time of evaluation because I thought that UnrealScript did something that you couldn't do with a regular scripting language. Now I know that's not the case.
It is much harder to work with UnrealScript then it is to work with Unity C# scripting. If UDK wants to win the indie community they need to seriously address this issue. You should be able to compile UnrealScript with UnrealEd open. Also, considering that a lot of indie dev companies are funded by work done outside of the game industry, C# is useful in finding such work.
UDK of course still has more features than Unity3
- Scaleform integration for 3D UI --- UPDATE: there is nothing stopping the Unity developers from making their UI 3D. Scaleforms' advantage is that it can bring in experienced, talented flash developers to make UI. For me it's not so much the "3D tilt/inside game world" menus.
- AnimTree for blending dozens of animations together. --- UPDATE: Unity lets you do this in script
- UnrealKismet for node based logic editing with the ability to have custom nodes from UnrealScript. --- UPDATE: i'm not sure if this is important because this is sort of UDK's way of doing "iterative workflow" where Unity is designed inside and out for iterative workflow.
- key framing and cinematic system (Unreal Matinee). No cinematic system in Unity. But Unity does support key framing and has an animation curve editor.
- Node based material/shader editor --- UPDATE: this is possible now in Unity, some have made custom C# GUIs to get something similar. I don't care for this so much because Unity still lets you see the results in realtime as you write a shader. However for artists, yes a node editor is more appropriate.
- better particle effect engine? -- not sure about this one. UPDATE: Unity 3 will bring additional particle effects to the overall library.
- Physics. Currently UDK has the following features that Unity doesn't have: APEX, soft bodies, fluids, force fields, destructible environments, hardware acceleration. But the physics features in Unity are still pretty comprehensive UPDATE: Unity 3 will bring cloth physics, thick raycasts (Sweep API), collision layers, and PhysX updated to 2.8.1.
- AI. Yes UDK does come with AI features built in, but because Unity has powerful C# integration, you can modify the GUI any way you want, and some people have already built their own AI systems. So this is doable in Unity given you put effort into coding the AI system.
- SpeedTree
- FaceFX
- Distributed System (Unreal Swarm) for handling game building tasks (ex baking lightmaps)
- Blend shapes
- Procedural building generator
- Speech recognition
- of course there are more features I am not listing here
Comparing the rendering engines
It's hard to compare rendering engines because we don't have the source code to either engine. Yes UDK does have 64bit HDR rendering pipeline but I still think Unity3 will close the gap.
Lightmapping
I believe that whatever you can do in Lightmass you can do in Beast and vice versa.
Asset Management
Unity 3 will bring upgrades to its asset management that will match the important features found in UDK's Content Browser.
Unity 3 asset management features:
- asset tagging (Unity 3 calls it asset labeling).
- scene search by object or type where only the search results will show in the hierarchy view. You can then select an object from the filtered results and press 'F' to focus in on a particular object.
- clicking on a specific object and having the ability to "swap assets". For example change materials.
- preview a material by dragging an asset into a certain object in scene view.
Groups
Unity's GameObject design is much more advanced than UDK's
groups of Actors and
attachment hierarchy. Not to mention that Unity's hierarchy interface is much simpler and more efficient to work with.
Builder Brushes
People can argue builder brushes. But for me they are a problem rather than a solution. I would much rather build the outline of a level in a DCC app which Unity lets me do. As for using builder brushes to describe invisible collision volumes, triggers, etc, Unity lets you do that by creating boxes, spheres, ..., and declaring them as collidable, triggers, etc.
Audio
From the Unity web site:
Unity 3 brings Reverb Zones, filters, tracker file support and a bunch of other goodies to the table. We're also introducing editable falloff curves for all major audio parameters, so you get complete control over your sound ambience.
So I guess the only thing that UDK has over Unity 3 in terms of audio is something like the animation tree editor where you connect nodes to build a certain sound effects. Basically a node editor for sound.
Scripting
I want to give UDK some credit. The scripting is not as slow as some people are making it out to be. Where people are claiming that you must close the Unreal Editor everytime you compile scripts. First of all, there is nothing stopping you from making variables that you can edit in the editor and tweak aspects from there.
Example: var() int a; var() int b; tweak a and b as required.
And you don't have to open up the editor. If it's gameplay you're working on, you can use the Unreal Frontend to launch the game (or a small test level) for testing. It should pick up the latest UnrealScript compiled.
BUT
Unity still wins in terms of scripting speed. You change a script and press play! It's that fast, and it's very iterative. This is the selling factor for Unity, at least for me. Unity also has the ability to let you tweak variables in the game editor (inspector) and even in-game.
Complex assets
Again like I said, UDK has more physics features. Assets in UDK can be very complex. For example if you take the physics with UDK Unreal PhAT editor you can make an asset really complex with constraints, ragdolls etc.
However I'm starting to see that Unity can have this as well. I under estimated Unity's prefab feature. It appears that you can have the same complexity with Prefabs in Unity. And I will research this a bit further to see how it compares with UDK. For example, can you have an asset with a complex ragdoll, attachments to it and various scripts in one prefab?
UPDATE: Yes. You can have a prefab with multiple complex game objects (scripts have to be in gameobjects of course)
Gameplay
UDK has Actor tick groups for coding complex gameplay. For example: vehicles. It seems that Unity has the same flexibility. And I will compare UDK "Actor tick groups" to Unity to see if it can do the same thing.
UPDATE: Yes, in Unity you can do work before physics processing, during physics processing and after.
Etc
Other things like physics materials, post process effects are both very comparable between the two engines as of Unity 3.
UPDATE (post process effects): As of Unity 3, Unity will allow combinations of Depth of Field, Bloom, Motion Blur, AO, Blur and other effects obtainable with UDK.
Conclusion
The biggest thing I will be looking for is what Umbra occlusion culling does to improve Unity3 performance. UDK can take a lot of "stress". You can have very heavy scenes and UDK will not drop in frame rate. If Unity has an increase in performance, you could seriously compare it to UDK because this is a big factor.
So UDK has an efficient workflow but when compared to Unity, Unity is way far ahead. The workflow matters most for small indie developers and Unity is catching up to UDK in terms of engine features. So the two can definitely be compared and it's a tough choice.
Sinan