Unity vs. a more "lean" game engine

Started by
27 comments, last by Ocimum 8 years, 2 months ago


So yeah, maybe try to step outside your own shoes and think about what would make your artist friend more productive. Chances are he will have MUCH more work to do than you as a programmer, depends on the project you are working on of course. But with the engine taking away lots of the low level plumbing, if the game is actually reasonable simple, the code might not be so hard to do anyway, while the amount of assets and level design needed might still be quite overwhelming.
If he is able to work faster in Unity, and you just "don't like it because the code looks unclean", but can work in it, maybe you should give in and let him have his way.

This is good advice. When we first discussed using Unity, by my reaction he was pretty sure I was going to say no. We've talked about since then and have decided to give it a try, but in a few months after my game development course is over. [I don't really have the mental bandwidth to learn two game engines at once, go to school, and work 100%. =) ] But we are going to give Unity a try.

In the meantime, we're going to work on something together using Blender and jMonkeyEngine. He's already done not only modeling but entire level design (relatively simple stuff) purely in blender, so we'll see how it goes. I'm going to be alert to the pains of the modeling/level design/art pipeline which are likely to come up, and then I'll probably have more of an appreciation for Unity. =)

Advertisement

I share "love-hate" relationship with Unity smile.png I'm engine/tech developer. With the rise of modern big game engines, my role became less significant for game dev companies. Why to make own tech, when you can save lots of time taking what's easy to use and already pretty advanced. For small companies time is money, and money doesn't grow on trees. But on the other hand I observe and use Unity for research work. It gave me plenty of ideas for my own tech. Also I must admit - I really like Unity editor and I even considered it to make it "editor of choice" for my tech. Like most of people, at first I just bounced back from it, but the more I've been using it, the better I found it. Also easy portability, nice scripting language ( which is an actual programming language! ), the way it manages assets etc. It has lots of limitation though cause by being a general purpose product. This is the price you have to pay. So as much as I dislike Unity, there's part of me liking and appreciating it.

It was mentioned before that it's very important to consider what artists and designers will like to use. What would make their job more comfortable. It's not a secret that over last years there was a shift in the industry and it's now little less programmers-oriented and lot more artists-oriented. Of course, without programmers artists wouldn't be able to do much, but 90% of today games are about their content - graphics, animations, sounds, story, scripts, overall UI experience ( which programmers usually are very bad at designing it ). Game contains number of DLLs, main executable and tons, gigatons of resources. We may like it or not, but this is today's games industry. Unity makes it easy. As far as I remember even famous "The Room" ( not the film, although it's also very famous ;) ) was made just by artists and designers with use of Unity. I mean - no actual professional programmers got harmed in the process of making the game, because there were none involved smile.png

As tech developer I prefer to make my own engines but also I am totally aware that if it comes to make a commercial product this may not be an option (unless I have lots of money to sink). I think in the past I pasted on this forum few pictures from my remake of the "Desert Strike" game which was my attempt to "befriend" with Unity. It failed but not because of Unity. I could make it from very beginning to the end. What failed was my attitude of engine rather than game developer. I just don't find it exciting to work on actual game, but I like to see when the game builds on all the fundamental blocks delivered by the tech.

So as final note, Unity is and isn't great smile.png


I just don't find it exciting to work on actual game, but I like to see when the game builds on all the fundamental blocks delivered by the tech.

I can really relate to this, actually.


Overall, I like unity, but as I've become a more advanced programmer, I find it more constraining.

In what way? Can you share an example?

There are alot of examples, but I'll use my most recent. I'm trying to seemlessly blend 2 sprite animations ( say, move from "walk-cycle with gun frame 5" to "walk-cycle with sword frame 6" ) so the movements match up. Unity forces animations to restart when jumping from one to another. If unity was open source, it would probably just be a matter of tweaking the source. However, it's not and my choice are:

1) write a custom machine-state script that offsets the following animation based on where the previous one ends. However, I'm already using unity's animation-events, so that will upset the order (if a script runs on frame-1, jumping to frame 6 will ignore the frame-1 event until the cycle restarts) If unity allowed it, i could offset the events too, but it's not possible.

2) write my own sprite animation system. - which would take forever and i'd lose all of the great benefits of their current animation system.

3) suck it up and seperate the legs and torso so they can animate independently - which means reworking all of my sprites.

So in the end, #3 is the best solution because it's the quickest, but it's going to introduce its own problems. Primarily layers and a constraint on how I design the sprites.

The reason this kind of thing becomes a problem as a I become a better coder, is often when facing an 'unknown', especially one that seems really simple and like a non-issue, I'll go ahead as planned and hope to find a coding solution. 90% of the time, I can find a solution. However, occasionally, I'll run into a situation when unity simply says "NO", and there's absolutely nothing I can do except either spend a month writing my own elaboriate custom solution (because of some tiny annoyance with unity) or just give in and follow the 'intended' workflow.

The further exacerbate the problem, if I opted to write my own animation system that interfaced with unity's editor, I'd more than likely run into big issues there too. I've gone down this path before, and it's a consistant problem. Their code for the editor scripting isn't as well-developed as the rest of their program. So, really, if i STILL wanted to do my own animation system, It would be better to write my own animation-maker external tool, then write more code to load the generated files into unity to get them to run correctly. At that point the question becomes "why don't i just use a more primitive library and design it all from the ground up?"

So if you want control and want things to work in a specific way, you often end up getting brick-walled by unity due to minor annoyances that end up with giving you the choice of comprimising and giving in to unity's workflow or writing you own system within unity - which is even harder than if u were using something more primitive.

So right now my relationship with unity is like one with an old girlfriend i've grown to dislike. I want to leave and have some independence and control, but it's not worth it to lose the many existing perks of the relationship. So, in the end, I often just say "yes dear" and do what unity tells me to do because fighting it ends up just being a headache.

The good reason is it gives them more fine control. The bad reason is it makes them feel superior and smart. (I'd rather not reinvent the wheel.) The third reason is not bad and it is simply that some people can't get their heads around Unity.

Good point. I do like having not only control but also _understanding_ of what's going on. But you have to draw the line somewhere, else we would all still be writing in assembly. =)

The more I've progressed in my career and the more games I've released at work I've cared less and less of what is going on under the hood. Getting results done faster and with (usually) less hassle is more important then being able to fiddle with all the knobs. And thus Unity has become more and more my go to tool. But when you want to do something that Unity wasn't built for then it is a massive pain because there are no knobs. The native extension system for Unity is pretty good even on Windows and Mac if you need to do things Unity wasn't made for. You can't change the physics system that Unity uses but if you need fluids or something you can write that in C++ to run fast in native land and pipe the results to your scripts. Community support is super as well. Nearly every question I've ever had has already been answered on Unity Answers.

One huge gripe I have is you are going to have a bad day if multiple people need to make updates to the same scene. You can negate a lot of this by prefabing everything out but it sucks to go commit your change and see that somebody else has committed it first. Scenes are saved as YAML so you can merge them by hand but it is a pain. The other big thing is if you have a good sized project with a few hundred or more scripts Unity seems to like to recompile all of them if you make a code change so it can take several seconds to get Unity responsive again.

One huge gripe I have is you are going to have a bad day if multiple people need to make updates to the same scene.

I've been using Unity for gamejams recently (previously I hadn't used Unity in a collaborative setting), and this is a very major pain point. Basically any connections that end up wired up via the UI are going to break on merge conflict, and you end up hand-merging the data in the UI.

Really makes me wish someone would build an engine with real-time collaboration. Probably leveraging the verse protocol, or something similar.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

I've been using Unity for gamejams recently (previously I hadn't used Unity in a collaborative setting), and this is a very major pain point. Basically any connections that end up wired up via the UI are going to break on merge conflict, and you end up hand-merging the data in the UI.

Really makes me wish someone would build an engine with real-time collaboration. Probably leveraging the verse protocol, or something similar.

Hero Engine claims to have this ability (collaborative editing)... they had some vids online that where quite convincing, haven't tried it though. And the last time I was looking at their stuff is most probably 5 years ago.

When I last checked, it was also what the dev behind Esenthel Engine was working on. No idea what came out of it though, my interest in that engine waned as I got back in to Unity about 4 years ago, and I rarely checked progress on the engine after that.

Collaborative editing sounds awesome, but I have my doubts how well it works when put under pressure (when 2 guys try to modify the same terrain patch at the same time for example).


Collaborative editing sounds awesome, but I have my doubts how well it works when put under pressure (when 2 guys try to modify the same terrain patch at the same time for example).

You don't care about that level of granularity, for the most part. If I can see a visual representation of what other people in the environment are working on, I'll just avoid editing that object until they are done (and automatic locking/unlocking on an object level can enforce this).

Where it would be really useful is in collaborating with the artists. These days the workflow has the artists dropping art and music assets in Slack/DropBox, and then an engineer downloads them and wires them into the scene. With collaborative editing, the artist themselves can load them into the engine, and I can just define a list of triggers for them to drag-and-drop assets on to.

(I realise that actual game studios likely have workflows that already handle this, but when I grab another engineer and 2 artists for a game jam, we don't necessarily have time to design a decent workflow)

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

I started with Unity 9 months ago, and it is the first 3d emgine I've ever used.
Before I created apps with xCode. So at the beginning it was a big change, and like you already mentioned it, you have so much stuff at once. Furthermore there was the problem that I also didn't know how to connect everything because I still was used to work just with classes like @Crossbones already mentioned.

It took me some time to understand how you connect classes to objects and all the mistakes you can make at the beginning. I think you need too spend some time with it, you will need to use it some weeks so you can work with it and beeing able to focus on your work. But to be sure, each IDE is different, different error messages which need to be understood and so in my opinion it wouldn't make much sence trying many different IDEs than working with one engine more efficient... In the long t

I started also to create editor extensions. Its a lot of fun because you can just build customized editor windows ( like the one you already have 5 of ) and create the interface dependent on your needs.
Furthermore you can also access the SceneView and extend it. In the game Chromagun I was working on, i created a tool where you can select several points in the scene and it creates a line between them, creates a mesh with rounded corners, on a specific position and saves it as prefab.

You can also add handles ( theese three arrows for position change ) or other visual stuff to the sceneview.

There where many changes and a lot of stuff added to the engine. Its about little peaces which will be good to have at specific points. Having unity analytics setup with some small clicks moght seem unneccessary, but if your game is ready and you like to check how people play it you would need to worry about another tool again. So I think having features like analytics with the possibility of creating heatmaps is very helpful, as an example.
And its cool its for free as long as you are not too big.

You've probably already seen the learning section on the website, there is a lot of stuff uploaded which tells you how to work with the tools. There is always a new live training too and you can access the past one too, http://unity3d.com/learn/live-training .

Like I sayed I never used another one and this is the experience I made till now.

Indie Unity & iOS Developer

[twitter]xandru.cea[/twitter]
Website

This topic is closed to new replies.

Advertisement