Engine / Libraries / Work environment

Started by
8 comments, last by wurstbrot 7 years, 1 month ago

Hello,

I'm interested in knowing if there's an engine more focused on OOP programming than anything else. Rather than, say, something like Unity, which has a huge focus on interacting through the interface.

Maybe a library for Java, C# or even C++ would be better, but I'd like to know the options.

I have experience with Java (And J2EE), web languages, some C#, a bit of C++ and other typical dev stuff like ORM/hibernate, databases, MVC, other models, whatever.

I find it somewhat frustrating to have to resort to the workflow of a specific engine/IDE instead of allowing me to create the workflow I want, with the models I'd like, and the methodology I prefer.

So, does anybody know of an engine that's more focused on the end of a programmer or can suggest a library?

Advertisement

What game are you trying to write? If your plans are vague all that can be recommended are portable libraries for low-level functionality that's almost always needed, e.g. C++ with SDL2 and BGFX, but if your supported platforms are more limited and your needs are more defined many specialized and "opinionated" game engines might be a better fit; modding a sufficiently close existing game might be enough.

What is your problem with Unity? How can it be considered not object oriented?

Omae Wa Mou Shindeiru

These are the ones I know: libgdx if you like Java, MonoGame if C# is your thing and Cocos2dX for C++

Have a look at Ogre3D which is all developed through code (C++). Sometimes the amount of OOP makes it a little fiddly (similar if using Unity entirely through code).

If you want an OOP engine like Ogre3D but perhaps with more functionality included by default (but a tad less powerful), have a look at Irrlicht.

Finally, check out the Unreal Engine which as long as you avoid blueprints and keep with the standard C++ interface, can mostly be done through code.
http://tinyurl.com/shewonyay - Thanks so much for those who voted on my GF's Competition Cosplay Entry for Cosplayzine. She won! I owe you all beers :)

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.

What game are you trying to write? If your plans are vague all that can be recommended are portable libraries for low-level functionality that's almost always needed, e.g. C++ with SDL2 and BGFX, but if your supported platforms are more limited and your needs are more defined many specialized and "opinionated" game engines might be a better fit; modding a sufficiently close existing game might be enough.

What is your problem with Unity? How can it be considered not object oriented?

My dislike of Unity is the abuse of the interface for everything :).

I.e. instead of having to drag and drop the classes and creating prefabs I'd like to code it, to me it's simply much more intuitive and it allows me to prototype and try stuff faster. When I need to keep figuring out on the internet where I gotta drag and drop stuff it's frustrating, specially when I could just write, say, a ScenarioManager to manager the objects and events of a map.

Regardless of the game I just want to be able to do and try out stuff fast (fast prototyping).

Also, thanks to everyone for the recommendations.

My dislike of Unity is the abuse of the interface for everything :).
I.e. instead of having to drag and drop the classes and creating prefabs I'd like to code it, to me it's simply much more intuitive and it allows me to prototype and try stuff faster. When I need to keep figuring out on the internet where I gotta drag and drop stuff it's frustrating, specially when I could just write, say, a ScenarioManager to manager the objects and events of a map.


You are not alone in this. It makes the architecture of code very scattered which is why a lot of Unity projects are simply messy.

- It also works completely against documentation systems like Doxygen which cannot hope to follow a call graph or reverse call graph through the Unity black box
- It also makes going between versions of Unity difficult. Prefabs get orphaned and their data gets munged whereas code stays consistent with a clear deprecation scheme if one arises.
- It also makes continuous integration awkward because a headless UNIX build server obviously cannot reliably run an OpenGL accelerated GUI.
- It also makes unit testing a bit of a joke because there isn't an idea of a "unit", it is just a bunch of weirdly linked prefabs and serialized binary data.

But remember, Unity is not a professional tool (and neither is Blueprints from UE4). It is targeted towards "prosumers" and as such is designed to get things done as quickly and as "dirty" as possible. That said you can do pretty much anything through code if needed. I.e:

GameObject go = new GameObject();
MeshFilter mf = go.AddComponent<MeshFilter>();
mf.mesh = ...
But if you do ever work with Unity developers, the chances are they will not share the same views and so will just trash everything you do ;)

Whenever I am dumped with a Unity project because of bad choices made by management earlier on, I try to think of the editor as a simple "programmer friendly" level maker and then have proper initialization code attached to some ratty game object kicking around the scene. At least then I only need to fight with .NET (UnityScript or C#) being an inflexible scripting language whilst at the same time being a retarded systems language.

(Though 99% of the time I simply will not take on a contract if I smell something like Flash or Unity is going to potentially be involved further down the line haha)
http://tinyurl.com/shewonyay - Thanks so much for those who voted on my GF's Competition Cosplay Entry for Cosplayzine. She won! I owe you all beers :)

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.

Unity is not a professional tool (and neither is Blueprints from UE4)

The professional games shipped with both would disagree with that assessment. Getting things done "as quickly and as "dirty" as possible", as you put it, is the difference between hitting milestones and missing them.

It's important not to lose sight of the fact that these engines don't just exist for the benefit of programmers. They exist for the benefit of artists and designers, and they want to be able to assemble game content and logic without waiting for a programmer to do it for them, and without needing to learn a programming language.

By all means, if you're just a programmer and you want a programmer-oriented engine, that is perfectly reasonable. But I think it's easy to get overwhelmed with a new interface and assume it's somehow harder to assemble new objects than it is in code, when really it's much easier - once you know how.

Well, thanks for the replies. They were definitely useful!

I'm interested in knowing if there's an engine more focused on OOP programming than anything else. Rather than, say, something like Unity, which has a huge focus on interacting through the interface.

When you're writing a game in Unity as a programmer, you spend far more time in your programming IDE than you do in the Unity level editor. Depending on your role you might not even touch the editor at all. The code that you're working on might not even interact with any Unity specific APIs - it might be completely unaware of which engine it's running on.

Also, anything you can do through the editor, you can do via code. Unity is basically a framework for building your own game engine, so one of the big tasks at any professional studio is writing extensions to the editor to implement the tools that your specific game needs... and libraries of code that implement the gameplay frameworks that your game developers need. It's just a massive head start on making an engine compared to starting completely from scratch.

i.e. instead of having to drag and drop the classes and creating prefabs I'd like to code it, to me it's simply much more intuitive and it allows me to prototype and try stuff faster. When I need to keep figuring out on the internet where I gotta drag and drop stuff it's frustrating. Regardless of the game I just want to be able to do and try out stuff fast (fast prototyping).

That's more of a complaint about it being harder to use things that you haven't yet learned how to use. The whole point of tools like Unity is that they should give you a productivity gain - they have no value otherwise. It will take time to learn all the APIs of their engine, and all the editor features though... so it always takes some time until those eventual time savings become greater than the initial learning time...

FWIW, in my experience with game jams (where people are trying to make a game in 48 hours for example) Unity is by far the most popular choice for development environment precisely because it lets people prototype game ideas incredibly quickly, assuming they've already learned how to work with it... The same goes for any engine though -- until you learn how to use it, you're going to be going extremely slowly.

But remember, Unity is not a professional tool (and neither is Blueprints from UE4). It is targeted towards "prosumers" and as such is designed to get things done as quickly and as "dirty" as possible.

- It also works completely against documentation systems like Doxygen which cannot hope to follow a call graph or reverse call graph through the Unity black box
- It also makes going between versions of Unity difficult. Prefabs get orphaned and their data gets munged whereas code stays consistent with a clear deprecation scheme if one arises.
- It also makes continuous integration awkward because a headless UNIX build server obviously cannot reliably run an OpenGL accelerated GUI. - It also makes unit testing a bit of a joke because there isn't an idea of a "unit", it is just a bunch of weirdly linked prefabs and serialized binary data.

That's not really true... Maybe you've not been lucky enough to work with professionals on a Unity project, but that doesn't mean it's not used professionally. It mostly certainly is a professional tool, which happens to be used by millions of newbies as well. That just means that statistically, if you pick a unity project at random, it will almost certainly be newbware :P

Almost all the successful developers that I know in my local indie scene are Unity studios... One in particular makes over a million dollars a month, and they have documented code with the ability to traverse call graphs, they regularly migrate across versions of unity, and they have amazing CI and automated QA practices, including a massive unit test suite, integration tests and million-monkey-testing (automatically deploying CI-generated builds to all sorts of devices and having an AI press a lot of buttons). As mentioned above, in a professional / clean code-base, most of your gameplay code won't even care about what engine it's running on top of, so of course you can separate bits of that logic out and write unit tests. Not being able to write unit tests is just a sign of bad code :P

Not a Unity anecdote, but on a previous contract job, I've been hired to help port a game from one generation of console to the next, and in the process we threw out the old engine and developed a brand new one. The gameplay team didn't care and weren't even aware of the fact that they were running on a different engine now, because it had been written cleanly enough that all the engine-specific details were abstracted from the game logic and netcode :)

Hello!

JMonkeyEngine ( http://jmonkeyengine.org/ )is exactly what you're looking for. I'm a bit surprised that it wasn't mentioned here already.

It's Java, open source, (OOP) programming-centric, very flexible and quite powerful. I can't compare it to other engines like Unity or Unreal, since I haven't used any of them yet, but I love JME since I discovered it two years ago. You should definitely try it!

This topic is closed to new replies.

Advertisement