1) Mono hasn't been updated for five years due to licensing issues on iOS. GC pauses with a complex game can be hundreds of milliseconds, being stop the world non generational.
2) A similar story of PhysX, though I can't pin down the exact date, 2010 at the latest
3) They added a new particle system with flashy features, but no scripting access. I don't even...
4) Unity 4 added next to nothing useful (DX11 naturally on Windows only, Mechanim which was broken etc), though it was necessary to purchase to keep getting bug fixes
5) No 64 bit editor is very painful (I have 32gb of ram laying around doing nothing)
6) The project is riddled with bugs, being added and removed each release, though probably much less than hacky in house solutions which are the norm in the game industry
7) Nasty serialization formats make programatically changing the hundreds of meta files in a project next to impossible
However, I'm getting the impression that the new Unreal licensing scheme has been a real kick in the ass for UT, and they're taking the competition seriously. Nearly every major problem I've had with Unity seems to be being worked on now, for Unity 5, after a long period of atrophy.
I fully expected Unity to die a slow death, and that it was just a question of when to switch to something else (there is not much high quality competition), but now I'm not so sure. If they pull off their roadmap, it'll finally be an engine I will be happy to use and recommend. Right now my feeling is: it does the job, mostly.
Note that the experience making small puzzle games for iOS etc may be very different, I've done that kind of thing but not with Unity.
I really don't get why this is like this still.
Currently they seem more willing to implement their own IL2C++ generator, than agreeing with Xamarin about a new license.
Personally, specially given that C++11/14 is quite an improvment over C++98, I would go Unreal instead.
Sorry, but your "resting on its laurels" is clearly not true. If you had bothered to track the improvements made to Unity's rendering engine (or the addition of Unity 2D support) over the last two years (well before the Unreal engine subscription launch), you'd see they actually have been doing quite a bit.
I do agree that the situation around Mono is pretty unfortunate, and that is clearly a business decision they've made. But they're also trying to find a way to mitigate that as should be clear from announcements made over the last year.
If the timing were purely coincidental, and the effort routine, you'd expect to see a big problem being solved every now and then. Instead we've gone from radio silence to a barrage of activity.
You also seem to be making the mistake of assuming that the Unreal engine subscription public announcement was the first Unity Technologies realized the threat. It's a small industry, and the default assumption should be that people talk to one another and know which way the wind is blowing.
Unity2D is actually one of the things I had in mind when I wrote the post. It seemed to me to be aimed at increasing the potential market size for Unity, rather than something that made life better for existing developers.
My post was not to claim that Unity was doing nothing; only that they were not acting like they had a fierce competitor. I believe that now they are. And that is a fantastic thing. It makes me much more comfortable being on the Unity platform, because my ideal preference is to stay on something like this for a decade. I want Unity to succeed.
We are only a two-person team, making a fairly limited-scope 3D puzzle racer game. Thus we didn't hit the major issues with collaboration bugs (we did a few times) or platform switching (we're focusing only on PC). We were able to build our MVP in less than 2 weeks of hacking, and it felt amazing. The asset store was also an amazing resource to circumvent the artist issues.
However, it's been nearly a year since then, and polishing the game to the standards we'd like has been presenting larger and larger challenges -- performance, obscure shader behaviour, limited editor extensibility (it's good, but not quite good enough), and reading this post, it looks like at this stage of development Unreal would have served us much much better.
If we can get our studio rolling and increase our team size to actually incorporate dedicated artists, we'll have to seriously consider switching to UE4 for our next game.
Jeff's write-up sheds insight that few people can have, given not everyone has spent the time to get well-enough acquainted with both engines in the team setting to know their professional tradeoffs as well, and I appreciate it a lot.
I don't think Unity is targeting AAA developers at all. Its targeting small studios that want to get ideas built quickly. It's got great, simple Oculus integration as well. If you're planning on building something AAA (or close), you probably have modellers, artists and level designers and don't need the asset store. You probably need, or are already using Unreal.
But the worst was the support. It was worthless. Anytime we would open a ticket, they would simply google and return us links to forum threads that didn't address our issue. When we asked about missing important features or bug fixes, they told us to buy something on the asset store.
This won't solve the problem at all - the asset files are still fairly inscrutable and the slightest change in the editor can result in all kinds of seemingly unrelated changes - but at least you'll have text diffs instead of huge binary files in the repo.
I heard good things about Havok's game engine too, and their support is the best I've ever seen.
I need the pro version of Unity3d to generate iOS, Android or VR games for the Oculus Rift. For someone who is just doing a bit of indie development, that's too expensive.
So I checked out UE4 also. You can subscribe for a month for $19 and then continue using the version that was the current version during your one month of subscription. If you need updates later on, subscribe for another month.
UE4 is harder to learn but looks a lot better than Unity OOTB.
Anyway, I hope Unity will be competitive again regarding pricing with the imminent announcement of their 5.0 release.
If you think I'm exaggerating just as a quick overview, there are no object literals (e.g. {value: true}), there is no array literals (e.g. [1]), you have to use new Array() which is deprecated in real JavaScript, they also implement some of the JS native functions but forget others making everything more confusing (for example parseInt exists but btoa doesn't), colons don't do anything they do in JavaScript, nothing, they are use to specify type, because UnityScript is a semi-typed language. Functions are not first class citizens and is not prototype based; at the end is just a mask for C# and that would be okay if it wasn't for them calling it "JavaScript" or even gasps "Unity-Flavored JavaScript"
The last couple of paragraphs from this Unity blog post from today seem to indicate that they are happy with the current pricing:
http://blogs.unity3d.com/2014/08/14/building-and-maintaining...
By default Unity provides support for UnityScript, C#, and Boo. However, since it's just IL all the way down, you can easily use IronPython, IronScheme, ClojureCLR, F#, etc., etc. just as easily.
Not true anymore. You can generate iOS and Android versions of your game with the free version of Unity3d (although with a reduced featureset in comparison to the pro version).
- Always use prefabs wherever possible. But avoid nesting prefabs
- Always save your prefabs, then save the scene before pushing. Thus the .prefab files are also updated through git: these are more robust and have higher priority than the scene.
- Make sure source control uses meta files (unless you're using Unity's Asset Server) so that scene references are stored again in separate files updated through git.
- Make sure individual developers have a lock on individual prefabs. Unlike scripts, Unity will bomb changes from one side of the merge on binary files, but this is expected when using git on binary files. Of course you can treat the scripts as any other code project, and they merge fine.
It's still not ideal, and we occasionally wind up with merge issues or a day of having to carefully iron out scene conflicts when doing larger branch merges, but they haven't been so dreadful as to make us decide never to use it again because of the collaboration issues.
> Make sure individual developers have a lock on individual prefabs.
Can you elaborate on that? Git doesn't have file/directory locking unless you use something like gitolite, so what kind of locking do you mean?
I found UnityLock in the asset store, which is supposed to let you lock assets against editing, but it doesn't seem to work in 4.5:
https://www.assetstore.unity3d.com/en/#!/content/4851
The code seems straightforward enough, so I may see about getting it working if the author doesn't do it.
- How does UDK build apps for iOS natively on Windows without requiring a Mac? Are they doing some kind of insider thing that Unity can't replicate?
- I see Unity as massively extensible and that's one thing I like about it. Comparisons are often made between vanilla Unity and UDK; what about Unity + PlayMaker + UFrame + Level Builder, etc. I don't see this ease of editor extensibility with UE4 (I'm sure it's there; but the Unity Asset Store just lets me cherry-pick one, click buy and then just have it to use immediately after download - I like that).
- My biggest gripe with the editor is the font size. Will the new UI that's coming in 4.6 and/or 5.0 allow me to increase the font size used by the Unity editor to actually make it comfortably usable rather than fatiguing?
FWIW I've preordered Unity 5 and I use UE4 at the moment as well. Nothing big completed in either engine (just some side work here and there) but no fanboy-ism for any particular one (though a bit of a fondness for Unity as I encountered it back in the old Mac days when Unity were called Over The Edge Entertainment; GooBall was pretty cool by the way).
For visual programming in Unity, there's PlayMaker -- an add-on available from the asset store. It allows creation and graphical editing (and graphical runtime debugging) of FSMs (though not hierarchical FSMs). It's quite a good implementation of a FSM / event / action framework. It's basically superior to some tech I spent half of 2013 developing for an in-house proprietary engine.
I agree on the collaboration problems. Even with purely text-based serialization, collaboration is one of Unity's weak points.
However, for smallish projects (smaller than Republic Sniper, I mean) sometimes it's the right choice. I see a lot of indies struggling with lugging around and maintaining a huge engine (unity, especially, but even cocos2d), and running up against the limitations like difficulty integrating with native sdk features, and their game's requirements are modest enough that they could probably code it from scratch in not too much time.
There are some free assets out there but they're mostly low-quality and the few production-quality ones are used in numerous low-quality games.
For audio I rely on Looperman for free music and sound fx.
Are there any tutorials out there that explain your process a bit?
Things were synced using subversion.
I never really jumped in that. I did not continue at that school.
I really think a video game is something that should be made with your custom tools. A good smith makes his own tools. Of course if you want to save time, you can use an expensive, well-made tool, but it will be at the expense of something else.
I'll always remember at that school, quickly arguing with a guy, that in C++ a vector is just a linked list.
Game programming is often highly technical, and often much more complex than what you're expecting it to be. That's why you should not neglect your tools and highly concentrate on making choices that fit your work.
The problem is, this can be taken to infinitely far ends.
Editor annoys you? Modify it to your desires. Don't like the compiler? Write your own. Get sick of the programming language? Invent your own. Get annoyed with how the OS does something? Change it or invent your own. Bump up into x86's limitations? Start on custom FPGAs.
Ten years later, you might still have 0% completion on your videogame, and indetermine completion on your ever-fractaling toolchain. (And this isn't just a thought exercise; I remember a HN submission earlier this year that was nigh-identical to what I describe)
I would rephrase what you said as "A good smith knows his tools and their limitations, and knows when it's appropriate to make his own tools". Even when talking in analogy... a smith's apprentice would not presume to make his own tools before experiencing his master's, and even further I suspect most smiths did NOT make their own anvils, or mine their own steel... ;)
There's also a healthy serving of "Worse is better" in this line of argument.
You could say there's a spectrum of low level/high level tools you will either work with or build yourself.
Most low level tools are now quite good enough. The more you go high level, the more will deal with specific cases that will restrain your ability to do thing the way you intended. Like the article said, Unity will fit for very small teams and very simple games, but it will be hard to do anything really complex.
I think compilers, languages and engines are better suited for more use cases than an editor like unity is. It's a dilemma of flexibility versus speed and ease of development.
ease of development/flexibility:
ease<|--#-------------------------|>flexibility
ease<|-----#----------------------|>flexibility
ease<|----------#-----------------|>flexibility
ease<|--------------#-------------|>flexibility
ease<|------------------#---------|>flexibility
ease<|----------------------#-----|>flexibility
ease<|-------------------------#--|>flexibility
Unity seems like it was built with ease of of entry as a first consideration. As people do larger and more ambitious projects with it they are hitting some of the tradeoffs and limitations. I am sure UE4 is a good choice as well.
I moved because I was originally a C++ developer. Had code lying around I could use easily.
That really doesn't seem like a great way to run a railroad.