OK well I guess this post was more of a venting thread about all the problems I’ve had to deal with since I started.
As far as I know Unity is the easiest program to work with for 3D games, but I still think there are many areas to be improved.
I wish I had kept a log of every single problem I’ve run into and how the Unity documentation didn’t really help me solve it at all. In general I just feel that the Unity documentation is too vague. It seems like almost all the examples are just showing the syntax not any kind of practical use for the features. For a new programmer every extra little bit of info can be incredibly valuable but it seems like Unity documentation goes with the bare minimum.
I have also run into many problems that I have to solve by my own troubleshooting, guessing random solutions because nothing related seems to be in the documentation. For example certain function calls within the middle of a function can cause the remainder of the function to not execute. Why does this occur? I have no idea and cannot find any documentation which states this possibility, but simply rearranging certain parts of codes can make or break my functions even if the order of execution logic within that function should be irrelevant logically.
That is just one example but it seems like I’m constantly running into little peculiarities with Unity. I should of tracked all these problems so I could make a much more productive thread including dozens of examples, but after working for months things tend to get blended together into one big mess.
In general I just feel that Unity documentation is not specific enough. I feel like I have to personally experiment with all kinds of possibilities to find answers that should be readily available. It seems that the documentation states the bare minimum information about a component but it’s up to the user to learn pretty much EVERYTHING about how components interact together through trial and error. There has literally been countless occasions when I finally solve a problem and it makes me think “OK well that makes no sense, but at least I know how to do it now.”
I understand making a Game Engine designed to be used by anyone is extremely challenging and could always be improved. But it might go a long way for you guys working at Unity to conduct some experiments with picking up people who have little or no previous programming experience and instruct them to create a very complex game. They will likely run into many of the same issues I did and not be able to solve them through the documentation. This would allow you to see what areas of the documentation could be improved.
There are just so many common programming things people need to know to make a wide variety of games. Really any question that is asked repeatedly by multiple people on the forums is a pretty good indication that the documentation should include more information about this subject.
The biggest Unity bug that I’m currently still experiencing is that it seems the platform independent compilation does not work very well.
For example when using stuff like:
#if UNITY_ANDROID OR #if UNITY_STANDALONE_WIN
I am forced to compile the build multiple times and receive many errors. These errors in MonoDevelop should cause me to not even be able to compile my build if it was the expected behavior like all other errors I’ve seen. But no in this case just simply compile it multiple times and it will disappear and work fine.
I’m sorry if I cannot list better examples at this time, but starting from scratch as someone who knew nothing about programming I felt that Unity documentation barely assisted me at all. Maybe it’s just my learning style but I find practical examples (much more likely to be found in forums), much more helpful than a simple syntax layout followed by:
print (“There is something in front of the object!”);
And another example is the occlusion area page stating stuff like :
“When the processing is done, you should see some colorful cubes in the View Area. The blue cubes represent the cell divisions for Target Volumes. The white cubes represent cell divisions for View Volumes.”
What blue cubes? They don’t appear in my version of Unity 4.0? My Target volumes are working because moving objects are occluded, but the documentation and what I’m seeing in Unity don’t match up at all. There are likely countless similar examples if I took the time to dig them up.
I don’t know it just seems like I still experience insane amounts of unexpected behavior overall none of which seem to have any documentation for. I think the occlusion section is a perfect example, there are all kinds of very small and detailed things about this system that can’t be found anywhere online.
Like the description of Automatic Portal Generation:
“Portals are generated automatically. Static and dynamic objects are culled through portals. This allows you to open and close portals at runtime. This technique will cull objects most accurately, but also has the most performance overhead on the CPU.”
Ok well that’s a great simplified version but that doesn’t really help me, can this kind of portal generation be utilized on mobile platforms? Through trial and error I’ve found that no it is far to slow, but really I shouldn’t have to test this kind of thing if you already know it’s to slow for almost all games on mobile devices, just include that in the documentation!
You guys include absolutely no references to how different operations compare in performance for any of your features?! You could really save people a ton of time by doing so. If there’s 50 ways to program a certain event in Unity but 49 of them are a waste of time either for performance, compatibility, expandability, etc. you should probably give examples of the right way to do things.
I think most new programmers coming to Unity have at least experienced somewhat similar experiences. Even learning how to set up a character’s movement, animations, and physics from scratch without the Character Controller (never used it because it seems very inflexible), was quite the challenge for me at first. There are so many strange behaviors depending on what kind of colliders you are using, what kind of camera set up, etc. Things like this should be well documented to allow users to jump right in with a step by step guide how to set things up that 99% of new users will need to know.
You can either learn by picking up random syntax fragments from 50+ different pages and searching forums, or you could have comprehensive guides which teaches new users step by step exactly what they need to do while also explaining how to overcome unexpected behaviors as they naturally arise in this process. Unity seems to choose the former approach. If the majority of games have to go through at least certain fundamental steps to get off the ground, I think it would be worthwhile to have these fundamentals and steps explained in a format which is user friendly for complete beginners.
Maybe I’m just not smart enough to figure it out quickly with the current resources but there must be at least some people who would agree with some of these points.
All that being said, I still feel that Unity is a great Game Engine and I have no plans at this time to abandon it for a different one when starting my next project. Hopefully I have already overcome the majority of the frustrations of getting started here.
As difficult as it has been to learn all this (I pretty much had to just randomly trouble shoot the majority of problems) I never expected to come this far in such a short time period. And perhaps the majority of my problems has been due to trying to create a game far more complex than what a beginner should do. The closest comparison I have for it is Diablo 2, but designed completely for mobile so shorter levels, less complex mechanics, etc. But you can level up, equip different gear which affects your stats as well as the visuals, use different skills, customize your character with stat points and skill tree, buy stuff from stores, story dialogue and cinematic cutscenes. So hopefully by the time I’m done with this project I will not have such a hard time with the next one.
Here is a recent screenshot of the game if anyone’s curious:
http://tinypic.com/view.php?pic=2ut6qgo&s=5
That just reminded me though of one final gripe though, setting up a complex itemization system with PlayerPrefs is a huge pain in Unity. I wish there was a functionality to store entire Lists within one PlayerPref variable (or at least each individual list item as one PlayerPref) instead of having to use separate PlayerPrefs for each of the many variables required. This problem alone is really hindering my ability to create the game the way it’s meant to be. For example one item could require over 5 separate PlayerPrefs. For example the item’s name, armor, strength, dexterity, intelligence, vitality, etc. Because all this information cannot be easily stored in one PlayerPref it seems nearly impossible to have a fully robust randomized loot system. Currently I only have 2 complete armor sets in the game, about to add a 3rd and that script is already approaching 7000 lines of code due to having to meticulously deal with so many variables separately.