Let me warn you up front, this game engine is nowhere near production ready. It’s very much a work in progress, with missing documentation, missing features and crashes are far too common. This is certainly not a game engine to choose today for game development, that’s why this is just a preview instead of a Closer Look. It is however a shocking capable game engine that you should keep your eye on!
There is also a video available here.
What is the Banshee Engine?
So, what is the Banshee Engine? Currently at release 0.3, Banshee Engine is an open source, C++ powered 2D/3D game engine with a complete game editor. On top of that there is a managed scripting layer, enabling you to develop game logic using C#. It is available under a dual license, LGPL and a Commercial “pay what you want” license… and yes, what you want to pay could be $0 if you so chose.
Banshee is available on Github, there are binaries available for download, although for now the engine is limited to Windows only. The engine also only targets Windows at the moment, but is being written with portability in mind.
The Editor
Here is the Banshee Editor in action:
The layout is pretty traditional. On the top left you have the various resources that make up your game. Below that you have the Hierarchy view which is essentially your current scene’s contents. At the bottom we have the logs. On the right hand side is the inspector, which is a context aware editing form. Of course centered to the view is the Scene view, which also has a Unity like Game preview window. The interface is extremely customizable, with all tabs being closable, undockable or even free floated. It works well on high DPI monitors and on multiple displays. It does occasionally have issues with mouse hover or cursor and sadly tab doesn’t work between text input fields, but for the most part the UI works as expected.
The 3D view you can Orbit the camera using RMB, pan with MMB and zoom in with the scroll wheel. Of course LBM is used for selection. There are the traditional per axis editing widgets for Transforms, Rotations and Scales. You have a widget in the top right corner for moving between various views as well as shifting between Perspective and Orthographic project. Oddly there doesn’t appear to be an option for multiple concurrent views, nor puzzlingly enough, are there axis markers ( color coded lines to show the location of X,Y,Z axis ). The editor idles nicely, using only 4% or so CPU at idle, meaning the engine is fairly friendly to laptop battery life.
There are several built in Scene objects, including geometric primitives.
The engine also takes an Entity/Component approach, with several components built in that can be attached to a Scene Object:
Importing assets into the engine is as simple as dragging and dropping to the Library window:
With a resource selected, you can control how it is imported in the Inspector:
The importer can handle FBX, DAE and OBJ format 3D files as well as PNG, PSD, BMP and JPG images. You can also import fonts as well as shaders, both GLSL and HLSL formats.
Coding
Coding in Banshee is done in one of two ways. You can extend the editor and engine using C++ code. The code itself is written in modern C++ 14, although documentation on native coding is essentially non existent at this point in time.
For games, the primary going interface is using C#. It current supports C# 6 language features. To script a component, create a new Script in Resources panel:
Next, select a scene object, then drag and drop the script onto the bottom any the form in the inspector. Double clicking the script will bring it up in Visual Studio if installed. The script will have full IntelliSense in Visual Studio:
Scripting a component is a matter of handling various callbacks, such as OnUpdate() which is called each frame. You can access the attached entity (er… Scene Object) via the .SceneObject member. Here is a very simple script that moves the selected object by 0.1 pixels each update:
namespace BansheeEngine { public class NewComponent : Component { private void OnInitialize() { } private void OnUpdate() { this.SceneObject.MoveLocal(new Vector3(0.1f, 0.0f, 0.0f)); } private void OnDestroy() { } } }
Documentation
This is very much a work in progress. Right now there is a solid reference for the Managed API, the Native API (C++), but the tools user manual is essentially a stub. There is an architecture cheat sheet which gives a pretty broad overview of the engine and how the pieces fit together. There is also a guide to compiling the engine from source. For those that are interested in giving things a go from C++ only, there is a C++ game example available here. Unfortunately there are no downloadable projects or managed examples, a glaring flaw at this point that make it a lot harder to learn.
As of right now, the lack of editor documentation or samples to get started with, really do make it hard to learn, especially if you are trying to figure out if something isn’t working because you are doing it wrong, the feature isn’t implemented or there is simply a bug.
That said, these are all things that should improve in time.
Conclusion
This is a game engine for early adopters only. It’s not even close to ready for primetime. On the other hand, the kernel or core is there and remarkably robust. While not the most stable by any stretch of the word, and with lacking documentation, I think you will be surprised with just how capable this engine actually is. The potential for a great game engine is here under the surface, just waiting for a community to make it happen.
The Video