I finally started to learn Unity3D after having observed it from distance over a couple of years now. Something I've done and I am still doing for many real-time technologies like i.e. Ogre3D, Shiva3D, DxStudio, Visual3D, Blade3D, Quest3D etc. etc.
I am using an older PowerBookG4 – as I am still not motivated to buy a new Mac – which seems to be ok for my purposes. Unfortunately shortly after I got the Eval version my working days became very long and very quickly 2 weeks went by where I nearly did not had the time to look at it. I then bought the restricted Indie version to be able to continue but I won't be able to look at Windows deployment and plug-in development – which are two very important topics to me – but maybe later, when I learned the basics, I'll reask for a Pro Eval Key.
You may ask: what is the difference between the Indie and the Pro version … well … I think there is currently unfortunately no overview chart for this. Some Pro features are: Real-Time Shadows, Render-To-Texture, Windows .Exe deployment, custom plug-in using C++, OpenGL low-level access via Scripting and support for the Unity Asset Server.
I'll blog about my experiences with Unity – especially from a Virtools Users perspective – while I learn and think about it. Please keep in mind that I am a complete Unity3D newbie, therefore I might state things that are not true or I try to make things in a complicated/unusual way etc. Of course I am happy for any hint etc. I can get, so don't hesitate to comment or write me an eMail.
Unity Basics
Unity is a Mac only authoring system for real-time 3D content. It has a webplayer for Mac OS-X and PC Windows. You can also export to standalone applications on both platforms thought windows deployment needs the Pro version. A PC version of the authoring system is planed but probably nothing that will be released soon.
Unity's architecture is using the GameObject (GO) and Component approach. GameObject are containers without much functionality. You add Components to your GOs to define its functionality. If you want to learn more about Component-Architectures I suggest you to search for presentations about Engines like Dungeon-Siege, Thief, Spellforce etc. They all use component based systems.
From a Virtools perspective a GameObject would be something like a BeObject (Behavioural Object) and a Component a mix of an Attribute and a BuildingBlock. Of course you could also compare a behavior graph with components but in Unity you cannot compose Components via other components or Buildingblocks.
A custom component (a script) is implemented via Scripting which is based on .Net/Mono. The available languages are JavaScript, C# and Boo. JavaScript performance can be improved by defining the types of variables. There are several callbacks that can be implemented – the most important one is the Update function. More on this later.
The GUI
Resize-able Window Panes
The GUI is quite nice!
Basically the main window is composed by smaller, embedded window panes. Each pane can be resized or maximized by hitting the SPACE key while having the mouse over it. The content of a pane is not fixed – a drop down control allows you to use that place for any kind of content you want (3D Views, inspectors etc).
Something very nice is the possibility to split or join windows (like in blender) vertically or horizontally. This allows to setup window layouts in a flexible and easy way. You can also save your layout and recall it anytime you want or use one of the predefined layouts via the drop down-menu in the top-right corner.
Detaching windows (i.e. for multi monitor setups) seems not to be supported, but I don't know. I have no idea how a Mac supports Multi-Monitor setups and maybe Unity has none either.
3D Views
First of all you can have as many 3D views as desired which is a big plus over Virtools. There are 2 versions of the 3D view: Game View and Scene View. You can select and manipulate the 3d content only via the Scene View. The Game View is simply the view from the player's/user's perspective. This is sometimes confusing as I often try to select something in the Game View which of course fails.
One can nicely navigate inside the scene view using the 3d mouse buttons while holding the ALT key. This allows to zoom, pan and rotate the view. This is also more usable than the Virtools way in regards of how one quickly switch between each navigation mode. I haven't found a Fly-Through mode like the hidden one in Virtools (use the Y key) yet and it seems that there is no "rotate-around selection" mode in Unity – something I nearly use all the time in Virtools.
As in Virtools you can hold the SHIFT key to accelerate Panning. But it seems that you cannot redefine the amount of panning, zooming or rotation via the preferences in Unity.
Although you can select multiple objects by adding one by one, you can't do Rectangle-Selections like in Virtools. Virtools does even include two modes: selected has to be inside completely or partly.
One can move objects inside the 3D Scene view interactively by using Gizmos/Handles like in 3ds max or Maya. Actually I think this is more the Maya version as I am missing the 2-axis corners that allow one to drag along a plane in the select coordinate system. As I am mentioning coordinate systems: Virtools offers a variety coordinate systems: local, world, screen, grid etc. I can't see such option in Unity. The Transformation Gizmos seem to operate in local space mainly.
Lights and Cameras are displayed inside Unity's 3D Views as 3D Sprites – Virtools uses real 3D geometry. Currently I have no preferences about this.
Something I haven't found yet in the docs is how to change the camera for a Scene View?!
… to be continued …
(p.s. will add pictures later)
Regarding "how to change camera for a Scene View": take a look "Align With View" and "Align View to Selected" under GameObject menu. The first one moves selected object where the scene view camera is at (useful to position in-game cameras and lights), the second one moves scene view camera where the selected object is (useful to position scene view to view from in-game cameras and lights). Keep the reviews coming 🙂
Dom, I found your blog while searching for the Unity equivalent of Virtool's "Set Active Camera". I am also new to Unity coming from Virtools. I have been working heavily with Virtools for about a year and a half because it is used in the Game Design Program at George Brown College. I enjoyed working with Virtools and was able to publish some attention-getting games. There are a couple of reasons I am migrating to Unity. As an independent developer, Unity's $1500 Pro entry point is ten times cheaper than Virtools $15000 Commercial+Physics license. Gamers love shaders, particles and effects. Virtools has extensive shader support, but after a year and a half I am not convinced its shader support is as strong as Unity's. The "have to buy a Mac" factor is a bit of an obstacle, until you start customizing your Mac computing environment in was Windows makes thoroughly impossible. Plus, I have always been a fan of Unix. What makes it wall click though is Mono: .NET development on Unix/Linux has lead to even further cross platform development. “Windows .Exe deployment, custom plug-in using C++” In evaluating Unity for my company, we had to get it to work with a custom DLL that our product uses. Unity passed the test of making function calls from a C# script to our custom C++ DLL. I am now able to make function calls from a JavaScript script that calls the functions from the C# “script” that have been mapped to the functions in the C++ DLL. All of this is to get data from an optical sensor system that tracks the movement of a real golf ball or a real football around the game area. (For details, see http://www.visualsportssys.com) Even though the DLL was compiled for an x86 machine and was not recognized by the MacOS, we were able to develop the test app on the Unity Mac, then deploy it on a PC, and have it successfully call the DLL. Dom, I am interested to see your further observations regarding Unity; especially how you adapt to the straight-ahead scripting (if you compile a script, isn't that a program???) environment compared with the Schematic approach (behaviour graphs and building blocks) employed by Virtools. I appreciate your list of real-time dev platforms; I will have to round-out my education by getting some baseline familiarity with each of those. Personally, I have a background in Web development, so JavaScript and Boo (Python) are not a hurtle for me; but they are to many of my designer friends. – Shannon
I'm using Virtools more then 3 years and i think that now is a deadman for indie developers because: It price is too high. Have small GUI system, i was have real pain to create List or Scroll boxes in Virtools. There not terrain editor and tree generator to create buty landscapes. There many many bugs in physic module and it is old. There not good real time shadows (only stencils). There many bugs, really many. I wrote about its to Virtools with screenshots, but they didnt fix its after 1,5 years. And i think when will realised new version of Virtools for gamedev, there not be license for indie, because Dassault Systems never like indie and targeted on big companys with big budjets. This is why i'm searching for alternative engine too. I was try: DXStudio – nice engine, but it have bug with script compilation and it FPS is slow. Blade3d – good engine, but in beta now. Visual3d – in development too (i wait for indev scripts). NeoAxis – same problem, there not indev scripts. So if i will need to develop games in Visual Studio – i will use Nebula/Ogre/IttLicht/TV3D and etc. Deep Creator – impossible and not good interface of program, and shity script system. Quest3d – after Virtools, Quest building blocks is real pain. Anark – i think it not for gamedev and just for PLM. TV3D – i don't like it syntexis (for example in C# to create object i must wrote creation code 2 times). Torque – there too many codes, and need many times to clean it, if you need too create simple 3d game (not shooter with network). and many others engines So i'm watching for Unity more then 1 year too :). But i can't buy Mac. Now i buy and try to use Stontrip Shiva engine, because it have real good features and good interface. But anyway i hate LUA (and like C#/Java syntaxis) :). I hope, that in 1Q of 2008 we will get Unity for Windows. And i know that many developers wait for this event. But anyway, when i was write to Unity3d developers and ask – "when we can wait for Unity for Windows?", i was get answer "we don't know, but this is our main task now". So, Dom's thank you for testing and writing about Unity3d, this is really interesting. Ans please, publish some screenshots from dev in next time ;). Misterion was try and say, that Unity3d have many bugs in render engine and slow FPS, and i hope it isn't and it will good alternative fore Virtools indie users. P.S: sry4my_eng.
Shannon: There is no "active" camera in Unity. All cameras render, all of the time (if their GameObject is active and the Camera component is enabled, that is). The "Set Active Camera" BB in Virtools translates to Unity as disabling all but one camera. It threw me off at first, too. If anyone has Unity questions feel free to email me: flashbangstudios.com (mwegner@ that domain). I was very active on The Swap Meet and used Virtools for five years or so. I'd be glad to help out.