As consultants we choose to do client work. The client has the idea (complete or vague), and the budget, and we help them realize their dream. With game projects, determining what will be engaging and fun is a welcome challenge. Many game developing consultants also create their own internal projects. In both cases understanding the principles of good game design can turn a good idea into a great game.
What is Game Design?
Game design is the game development process of designing the content and rules of a game in the pre-production stage and design of gameplay, environment, storyline, and characters during production stage. The designer of a game is very much like the director of a film; the designer is the visionary of the game and controls the artistic and technical elements of the game in fulfillment of their vision. Game design requires artistic and technical competence as well as writing skills.
Game designers will use a Game Design Document. The GDD will be the bible which your team follows during pre-production and production of the game.
Separate from games and game design is gamification. Its a newer buzzword in the industry and many clients, big and small are clamoring for this ‘new shiny thing.’ Gamification is the use of game design techniques, game thinking and game mechanics to enhance non-game contexts.
I am constantly dreaming up new ideas for games. Sometimes I think about it for just 5 minutes, and then the itch goes away. Other times an idea stays with me for years. I’m often just as excited to see someone else create the game (so I can play it!) as I am to create the game myself.
In the near future, I’ll publish a few of my game idea prototypes to share my concise process game game design.
You’re going to want a piece of paper for this. I like legal pads, but you’ll definitely want to see the work outside of a monitor. Divide the paper into thirds (horizontally); Act 1, Act 2, & Act 3. Start simple.
We’re going to chart the basic player’s (ideal) experience in-game.
Act 1 – This is all things creation and introductory. Players should in theory develop themselves (conceptually, and mechanically) and learn about the basics of the world. Immersion here is critical, as no one wants to play a game where the rules are either too vague, too restrictive or too discouraging (i.e. railroading). In story context, this is where adventure/campaign plots are hatched and world-base concepts (“the feel of the world”) is born. Act 1 ends when the Players enter the most intense and forward-progressive drive in the plot.
Act 2 – Characters by this point are INTO a plot/campaign, and are developing forward according to their brought-in goals (things they brought to the table) as well as open-goals (things the game offers). Combat here is more common, and risk is also introduced. This is also the largest Act of play, generally being 1.5 or 2 times larger than Act 1. Should the game be episodic, serialized or weekly, it will be so because of a long Act 2 that offers either complexity (lots of small steps put together) or intensity (there’s so much to do and it takes time) or potential (lots to do, of mixed length). Act 2 ends when they feel prepared to finish the plot or wrap up significant material in the campaign.
Act 3 – This endgame is the shortest but is often the most mechanically driven of all the acts. It begins when the characters make that final push towards resolution, and ends when the conflict(s) introduced in Act 1 are resolved. They may not, and need not be resolved in a way satisfying to the character, (although the player will be satisfied in all but the most power-gamer circumstances).
Like any good creative process, we work iteratively with these ideas. Create TONS of ideas. Some are best fit to stay on the drawing board. Other ideas show enough promise to be prototyped. With limited time budget a small team can communicate the bare essence of the game in a simple, concise, playable demo.
Ludum Dare is a well known incubator for game designers to brainstorm AND implement new game ideas. It is a regular accelerated game development Event. Participants develop games from scratch in a weekend, based on a theme suggested by community. Ludum Dare was founded by Geoff Howland, and held it’s first competition in April of 2002. Since then the community has run more than 22 regular Events, several dozens of practice competitions, collectively creating many thousands of games in just a weekend each. The event attracts developers from all sides of the industry. Students, hobbyists, industry professionals from many well respected game studios, as well as many independent game developers. For many people, it can be difficult to find or make the time create a game or prototype for yourself. We’re here to be your excuse.
References
Here is an AMAZING COLLECTION of game design information. It is very thorough. Start there.
Educational Game Design Model (NMSU Learning Games Lab)
Barbara Chamberlin, with the NMSU Learning Games Lab, shares the Educational Game Design Model developed at NMSU. Addresses various aspects of the process of game development.
Feedback Loops in Games and Learning
This is a nice paper on feedback loops in learning by Bert Snow and Matt Seegmiller. There is a bit of a marketing slant, but interesting points about which technology to support a feedback approach.
Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development. As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello. There is incredible momentum in the Unity3D product and its community. Here is more information on using Unity3D with Augmented Reality.
Augmented Reality
Augmented reality (AR) is a field of computer science that involves combining the physical world and an interactive, three-dimensional virtual world. I originally wrote a complete demo, source code, and article for my client Adobe – “Augmented Reality With Flash“. Now I’ve updated the information regarding Unity3D. In a future article I may make the full Unity demo source code available. While mainstream audiences are now becoming aware of AR, it is not new. Its background is intertwined with decades of computer science development. Virtual reality (VR), AR’s more familiar counterpart, is the replacement of the user’s physical reality (particularly that which is experienced through sight and hearing) with a computer-generated reality. The idea of a virtual experience is exciting — creating entertaining and educational sensory encounters that do not exist in our everyday lives.
From a consumer standpoint, it seems that AR advances have come out of nowhere to surpass VR advances. The acceleration in AR technology is due to two major factors: First, users are still experiencing reality, so believability is easier to achieve. Adding simple graphics (such as text or simple shapes) and color effects (such as night vision or thermal vision) to reality creates a better user experience. The user is still seeing a mostly familiar world. Second, this more subtle use of computer graphics is less expensive with today’s technology, making it more feasible than VR. Let’s take a look at augmented reality, its current uses, and its future potential.
Practical Uses of AR
The video game industry has released major augmented reality products for more than a decade. The Eye Toy for Sony PlayStation 2 and 3 takes input from an inexpensive video camera and composites the live video feed with CG onto the TV screen. This toy detects the user’s body position in front of the camera as an alternative input method to the typical joystick or gamepad, deepening the user’s immersion into the game world. Detection schemes continue to advance, allowing for more engaging interaction.
There are AR applications outside of console games, including military and consumer products, too. Night-vision goggles and targeting-assistance technology help marksmen in battle, and children’s stories come to life with AR-enhanced books. The uses are vast. With AR-enhanced books, each page of a real-world book is outfitted with a marker — a pattern that is detectable by AR. As the child turns each page, a computer is able to place a virtual 3D animation on top of a physical image printed on paper. While the marker is often an image as in this example, it could also be the user’s face.
Basics of AR
Marker Detection – The marker is located by the application. Typically the device webcam is used. The webcam inspects the physical reality near the user to find a predetermined marker (image or the users face).
Transform Mapping – The transform (position, rotation, scale) of the marker are interpreted. Move the marker and the transform updates.
Rendering – Now the 3D model is updated to rendered to the screen.
Essential Libraries
Because of the growing popularity of AR, many platforms have 3rd party packages (free and premium) to facilitate development. Unity too. While you could create you own system from scratch, it is highly recommended to find the best 3rd party library and use it. Your end product will be higher quality and you will save greatly on time to market. You can choose any one from this list; Unity3D Packages for AR
Vuforia is the best and free to use. I tried with Metaio, it’s easy to use than Vuforia, but the tracking quality don´t convince me. Vuforia handles the pattern occlusion is robust, and it’s framerates are high, much higher than Metaio and NyARToolkit. – 3rd Party Blog Comment
There are pros and cons to each. In a future article, I may evaluate each of these options. Some of the key differences are cost, ease of use, completeness of documentation, breadth of features, and accuracy (speed) of tracking the marker from the camera and transforming the model. Each package surely has its own workflow and API, however the major concepts are the same. So once we choose a package, we follow this the basic setup.
Developing Augmented Reality
Marker Setup
The marker image is a graphic drawn, printed, and shown to the end application as it runs. Your AR package, with help from the marker data file and parameters file, will detect this shape via webcam. To design a graphic, fit the desired shape within a white square that is centered within a larger black square. Keep your shape simple for best results. Note the sun shape in the graphic. This helps the application detect which way is up for the marker and assists its angle and rotation detection. Your design doesn’t need to have this shape per se, but it should be asymmetrical in some way for best results. Webcam Setup Unity features webcam support. As the application runs and a camera is detected, Unity will show the video onscreen. This functionality may or may not be included in the AR package you choose. AR Package Setup
A cornerstone of this project is marker detection. As the marker graphic is detected via webcam, its position, rotation, and scale in the user’s physical space are calculated. This calculation will be used in the next steps. The AR package will search each still-frame of webcam footage for the predefined marker graphic (Pattern object). The detection scheme uses just the latest still-frame of video at any given time. Model Setup
The 3D model is loaded and inserted into the 3D scene, and the view into that scene. Luckily 3D is a strength in Unity and much of this work is all done for you. In the final project, this view is layered on top of the 2D webcam Video object shown earlier so the composite (See Figure 4.) of 2D and 3D will look believable. Repeated Loop: Detect-And-Update
Generally speaking your loopToDetectMarkerAndUpdate3D function will be called 60 times per second. Each frame the latest frame of the webcam footage is grabbed. The AR package runs detection on the frame. If the marker is detected the AR package will update the position, rotation, and scale data. This modifies the 3D model so it appears to be at the same position in the user’s physical space as the marker. The resulting effect is nothing short of amazing for first-time viewers.
There is incredible momentum in the Unity3D product and its community. Here is a look at the successful game ‘Rochard’ which developers Recoil Games, Ltd created using Unity3D.
Rochard
From the IGN review of the game we learn that Rochard puts you in the role of John Rochard, an astro-miner who works for a megalithic company known as Skyrig. The game’s look works extremely well. Rochard is a comedic game at its core, and its character design, environments, enemies, sound effects and other sonic touches certainly lend to it moving in that direction.
QA With Developers
The site VideoGameWriters presented a terrific interview with Samuli Viikinen (Lead Level Designer), Juhana Virtanen (Lead Designer) and Sampsa Lehtonen (Programmer) detailing Rochard‘s use of Unity3D.
What was Unity’s appeal to your team?
The beauty of Unity is that the game can be published on any of the supported platforms with relative ease. Unity is also really fast and easy to use, making prototyping and implementing new features a breeze.
Often when any of our designers had new tech requirements, a programmer just sat next to the designer and implemented the new feature right there on spot together with the designer.
Did certain features change from the original design during development?
Yes, much. The gameplay itself was done iteratively. Unity did not impose any strict limitations to us, quite the contrary actually.
For instance, originally we didn’t have such a strong physics-based gameplay, but after seeing what Unity was capable of and learning what was possible with its physics engine we gradually implemented a more and more elaborate physics system for the game.
What are Unity’s advantages?
The strong point of Unity is the speed of the iteration cycle when developing the game. Some of the previous engines required us to shutdown the editor for compiling scripts, but in Unity the changes are immediately applied to the engine. This keeps the flow of development going instead of interrupting your work. Extending the editor was also really easy, and we ended up doing quite a lot of tools and small scripts to get rid of some of the laborious repetitive work.
Another feature is the use of so-called prefabs, which stands for “prefabricated game objects”. This allows you to build a palette of game objects that can be easily maintained and placed in the game world. This feature was found in the previous engines too, but they were far more clunky and error-prone.
What are Unity’s disadvantages?
Unity is not packed with rendering and animation features out-of-the-box. You can always go under the hood and implement things the way you want – that’s the whole purpose. For the games that we are making, it’s just perfect.
How has the Unity engine used by artists, programmers, level designers?
Unity is an all-around engine, and it caters to everybody in the team. Because it’s so expandable, you can improve the work flow for any discipline if such need should arise. For example, we ended up doing our custom prefab browser for the editor as our requirements for levels in our game were quite specific. We were originally using the industry standard Perforce for version control, but the built-in Asset Server in Unity had better integration to the engine so we ended up using that instead even though it was not as feature-complete as Perforce is.
Critics’ Review
IGN game the game very positive reviews. You can see gameplay footage on Youtube too.
Your Thoughts On Unity?
Are you considering using Unity for your next commercial project? Comment thoughts below.
Already completed a game? Complete this poll and add a link to your project too.
There is incredible momentum in the Unity3D product and its community. Here is a look at key announcements.
Top Unity3D Announcements
1. November 2007 – The Unity3D.com Blog section launches (link)
2. January 2009 -Unity targets iOS/Android – Develop for iOS ($400 upgrade) and Android ($400 upgrade) (link) and in 2013 many app award winners prove to be created in Unity (link)
3. October 2009 – Pricing Update – Unity offers a free ‘Indie’ License to target desktop games (link)
4. 2012 – Unity adds support for Adobe’s Flash Player – Develop for the browser with the popular Flash plugin (link) and support for Nintendo WiiU & Xbox360 – Develop for consoles (link) and adds support for Sony Platforms – Develop for Sony’s PS3 (and now PS4, PS-Vita, and PlaystationMobile too) (link)
5. November 2012 – Unity 4.0 Launches – With many new features and a slick UI update (link)
Top Unity3D Announcements of 2013
6. 2013 –Unity targets Ouya – Develop for the new Android based Ouya console (link)
7. April 2013 –Unity removes support for Adobe’s Flash Player – Unity will no longer support to target to Flash Player (link)
8. May. 2013 – Pricing Update – Unity offers a free ‘Indie’ License to target iOS & Android games (link)
9. May. 2013 – Pricing Update – Unity offers a free ‘Pro’ License for 75$ per month (link)
10. Jul. 2013 – IDE Popularity – Unity’s IDE reaches 2 million users (link)
11. Jul. 2013 – IDE Version Update – Unity IDE 4.2 Released (RMC Link)
12. Aug. 2013 – Unity Blog Announces – Unity IDE 4.3 Will Feature Native 2D (link)
13. Aug. 2013 – Unite 2013 Conference Keynote – All The Highlights Are Here (link)
What Is Next?
Site Features – I’m incredibly impressed with Unity3d.com’s training section. The scope of coverage is large and the price (free), quality, and consistency of the material is unparalleled from any game development platform I’ve seen. Obviously more content will be rolled out over time.
Product Features – Unity is currently at a very stable and capable version 4.x. What new features could be announced next?
Targets – Unity is agressive in its strategy to offer developers the most compelling platforms on which to publish content. While XBox One will likely be announced, others targets may surprise us.
Pricing – Unity has shifted wildly (and favorably) in its pricing structure. While the current options seem pretty complete, history shows us that more changes are very likely.
Want More Video Tutorials?
We are currently creating tons of new training content for Unity3D.
Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development. Read the full “Introduction to Unity3D” article and watch the videos below.
2.3 Programming – C# UnityEngine API Part 1 – Component-based thinking & communicating with GameObject & MonoBehavior. Bonus: Create a cube, texture it, and play a sound via Inspector window. [Complete!]
3.3 Programming – C# UnityEngine API Part 3(e.g. Custom Inspector, Custom Editor, Custom EditorWindow)
3.4 Architectures – C# Architectures Part 1 – MVC
3.5 Architectures – C# Architectures Part 2 – The StrangeIoC Framework 1 [Complete!]
3.6 Architectures – C# Architectures Part 3 – The StrangeIoC 2 : PropertyChangeSignal [Complete!]
3.7 Architectures – C# Architectures Part 4 – Creating an ‘EventDispatcher’ Framework
3.8 Graphics – Shaders – Creating custom shaders using ShaderLab
4. Asset Store Packages
4.1 Buy vs Build Theory – When is it best to buy a 3rd party plugin?
4.2 Package: iTween(Free) – Easily animate with code
4.3 Package: NGUI (Premium) – Create 2D & 3D UI interface elements and UI components
4.4 Package: PlayMaker (Premium) – Visual Scripting (Especially for Finite State Machines)
5. Complete Projects
5.1 Build Simple Game #1– TBD 3D Action
5.2 Build Simple Game #1 With a Custom Game Manager – TBD 3D Action
Free Video Resources
Enjoy a few videos of free content! Sign-up to view the full video series in ‘Member Resources’ below and to access the complete source-code. Membership is free!
Seasoned game & game-engine developer Ben Garney has a new game development engine called Loom.
Ben demonstrates competency in a long series of projects. He worked on the Torque Game Engine with GarageGames at www.garagegames.com (Site No Longer Live), the PushButton Game Engine for Flash with PushButton Labs at www.pushbuttonlabs.com (Site No Longer Live). Support from PushButton (including its website, updates to its source code and forums) abruptly ended in 2012. PBE’s spiritual successor launched in 2012 as Smash Game Framework at www.smash.io (Project apparently dead after no updates since more than ‘a year ago’).
Now he and his team have Loom, The Loom Game Engine at www.theengine.co. The word ‘loom’ is used for a device used for weaving textile projects and Loom is also a popular 80’s computer game, both spiritually aligned with game development. However, I wish it had a more unique name to facilitate online searches.
Pros of Loom (Paraphrased from theengine.co);
Pragmatic Development – Loom features a lean and fast workflow without strict development rules or required frameworks.
Freedom Of Choice – Access and edit C++ core source code, access and edit LoomScript core source code, or simply add your own custom LoomScript. LoomScript sits atop C++ and can access any C++ library.
LoomScript – LoomScript is an easy to use, new language modeled after AS3 with features inspired by C#. LoomScript is based on Lua which is concise, robust, proven, and supported by tools, debuggers, and community.
Loom Architecture – Three parts; Call LoomCLI from your command line to create ‘new’ projects and ‘run’. The LoomSDK is precompiled LoomScript with powerful libraries. The NativeSDK is the raw C++.
Built For Teams – Three tiers; Artists can create & integrate assets into the latest build without bothering others. Scripters use LoomScript for the bulk of development. Need extra power? Extra features? Coders can access the C++ layer.
Pros of using one code-base for multiple platforms
When and where it is manageable, I am a huge fan of using and reusing the same project for multiple platforms. Loom 1.x currently exports to TV (Ouya), Desktop (Mac & Windows), and Mobile (iOS & Android). Future support for other platforms is in discussion on the loom forums.
Save Time – Develop, iterate, QA simultaneously cross-platform
Focus Marketing dollars – Instead of marketing the game on two platforms separately, we can do it at the same time
Momentum – Word of mouth dictates that downloads on one platform will possibly translate into downloads on the other
Maintenance – We’d rather be working on the next game, than debugging separate platforms
What is Loom?
With cheap, powerful tools and massive exposure to new game players, there has never been a better time for indie game developers. – Me
There are many available tools for indie game development. Loom is a powerful 2D game engine with live reloading of code and assets, a friendly scripting language, and an efficient command-line workflow.
Loom’s competitors include 2D-capable gpu-accelerated cross-platform mobile game development platforms such as Adobe AIR, Corona & Unity3D as well as the newcomer Stencyl. The approach each platform takes is diverse. Where-as Stencyl is the a complete IDE for project setup, art & development which requires no coding, Loom is a raw platform without even a GUI.
Checkout the screenshots of Loom’s Workflow;
Create a new project via command line.
Create your raster assets using your favorite creative programs.
Create your LoomScript code using any text editor. While a Loom IDE is a top feature request which is in active discussion, SublimeText is the current free, recommendation.
Compile (run) the project via command line.
1. Project
2. Assets
3. LoomScript
4. Compile
Development Philosophy
We believe that fast iteration times across multiple devices simultaneously lead to better, faster, cheaper game development. – Loom Documentation
Loom‘s design goal is to keep you on the fast development path as much as possible, while still preserving access to slower, more difficult, but still essential development paths. This gives a substantial benefit to development teams without blocking them.
The Loom GameFramework
Loom offers a powerful (optional) Loom GameFramework (LGF). A game framework is a system to organize your code specific for game projects.
LGF is made of three general types of classes. There may be many of each type in each game project:
Manager – Managers are the brains of the operation — each one has a unique task; for instance one focuses on the spatial area of the screen and the objects within it and one on graphics rendering of visible objects. Depending on its role in the game, a manager may or may not relate to entities and components directly.
Entity – Each visual element in your game is represented by an entity. This could be anything; your player, the enemies, collectible items, etc…. Entities can be non-visual too.
Component — Each entity contains components. This is where the bulk of your game code lies. Each components handle a specific responsibility. For instance perhaps one component handles rendering the entity in which it resides.
Developers can extend existing managers and create new managers too. LGF ships with managers for our most common needs. Here is a partial list of the managers packaged with the core Loom.GameFramework package:
TimeManager – Manages all time related functionality in the engine. It provides mechanisms for performing actions every frame, every tick, or at a specific time in the future. A tick happens at a set interval defined by the TICKS_PER_SECOND constant. Using ticks for various tasks that need to happen repeatedly instead of performing those tasks every frame results in much more consistent output. However, for animation related tasks, frame events should be used so the display remains smooth. You can pause/play your game easily here too.
ConsoleCommandManager – Process and dispatch commands issued via the asset agent.
PropertyManager – Properties are like public variables; set/get manually or bind automatically.
Entities are essentially empty shells. As a developer you fill them with the core components &custom components needed. Each component has access to any Loom API desired and responds to custom events as well as the following built-in Loom events:
onFrame – Best used for graphics rendering-routines; this occurs once per frame-rate (e.g. 60 times per second for 60 FPS). Included for AnimatedComponent
onTick – Ticks are guaranteed to happen at a fixed interval. If the frame-rate slows down due to some number-crunching or heavy rendering, Loom will attempt to ‘catch up’ by calling more ticks. It balances the run-time experience well. Included for TickedComponent.
onThink – Based on an arbitrary, per-use timer. This is ideal for AI code which can be processed slowly (e.g. every 1–5 seconds). Included for QueuedComponent.
Getting Started
If you have setup a programming environment before (Flash, Java, HTML5), then you should find Loom easy to setup and use.
Download examples – See the list of examples or download and view the source-code from the Loom downloads page.
Learn to run code with the examples and create new projects – Visit Loom getting started page and the Loom documentation page. Curiously, the class-by-class documentation is not available online, but is indeed downloadable.
Creating My ‘FlyerGame’
To learn Loom, I followed my own ‘Getting Started’ steps above and then created my own complete game. I used assets and game logic from “FlyerGame”, a game that I have recoded many, many times using game frameworks. The HD Video Screencast and source assets are available (See ‘Member Resources’ below).
Optimizations
I have limited experience with Loom, but from reading the Loom forums and reviewing the Loom example code I understand that optimizing a project – especially rendering with a constant frame-rate on a variety of devices takes time.
Conclusion
I like what Loom does well; LoomScript is light and powerful, the workflow is VERY fast. I haven’t tapped into the full strengths of device-specific CSS (e.g. to size a button uniquely on iPad vs iPhone) yet, but it looks really compelling.
Library of Libraries
Loom is based in great part to Cocos2d, a free community-based library for 2D gaming. Some people love and some people hate Cocos2D. A consciousness I see throughout the Loom forums is for ‘Loom’ itself to provide minimal functionality and instead depend on 3rd party libraries to provide developers with needed functionality. Some libraries will be folded into the Loom API and for others developers can mix and match libraries as they like. This ‘borrow vs build’ approach is not new. It is what provides huge functionality within the Javascript gaming world too. However, as a developer having a big bag of separate APIs (separate syntax, separate terminology, inconsistent value ranges…0 to 1 vs 0 to 100 vs 0 to 256) is not intuitive and severely hurts the learning curve. Furthermore such separation makes it hard in my opinion for Loom to compete in an all-too-crowded world of cross platform mobile game development tools.
Maturity
The product is both at “1.0” and costs money which to me means The Engine Co is positioning it as a finished product. However a look at the feature requests from the community and bug reports/omission from the forums, which include countless bare essentials (e.g. complete code documentation & incomplete method override support) is a sign it is not yet ready to stand against full realized competitive cross-platform mobile engine.
The engine also misses many device-specific features and most every OS-specific integration features (e.g. in-app purchase, social network integration, ad monetizations) which the forum promises are coming soon.
When the docs & wiki are complete and describe features which are implemented bug free the product can be recommended with more confidence. The team is working fast and communicates so frequently, that we may see that level of completeness very soon. A dedicated IDE (currently the #1 feature request) with auto-complete and more will help seal the deal.
Loom is very new and is changing rapidly. I reached out to Loom developers to get a reactions based on Loom CLI v#1.0.506 and Loom SDK v#sprint27.
PROs
Live Reloading – Greatly accelerates development
LoomScript – Easy to learn (especially from AS3) and powerful
Support – Loom dev team is open, responsive, and productive
I find the component-based architecture suggested in the Loom API to be powerful and a distinguishing feature among competitors.
CONs
Young platform – Has many bugs, missing basic implementations (“lots of loose ends”), and lacks must-have features of competitors
Lack of documentation, tutorials, & examples.
Rendering – The “CSS layout is pixel [dependent and] has little practical use”, and overall the “performance is not amazing”.
No full-featured IDE – Although a 3 code editors already provide partial support.
The lack of IDE is an obstacle for me. And the creator’s conscious choice to use existing 3rd party APIs to solve basic implementation needs is wise (provides functionality) but weakens the platform tremendously as it becomes a ‘bag of APIs’ which hurts the learning curve.
Gotchas & Advice
Read the docs
Download, read, and run the examples
Just “Dive into it!” and remake a basic game from scratch
“Is Loom ready for professional development?”
No, It is the “early days for the platform so there’s not so much”.
No, “standard mobile features like reading/writing to camera roll are not exposed yet (as far as I know)”.
Yes, I think its ready for professional deployment, If you can get over the bugs and [missing] features”.
No, we’d have to “spend a lot of time working on supplementing the engine, and less on making our games”.
And as one developer said – I am “not sure. I’d have to make a game with it!”
For me, Loom is absolutely ready for production in a vacuum. However there are many compelling alternatives to use which are more robust.
Next Steps
After ‘Getting Started’ and following my HD Video Tutorials, here are more resources to fuel your Loom savvy.
VIDEO: Welcome To Loom – Watch the HD Screencast Video Tutorial*
VIDEO: FlyerGame With Loom – Watch the HD Screencast Video Tutorial*
SOURCE CODE: FlyerGame With Loom – Download, view, and run the code.
Unity3D (or simply ‘Unity’) is a fully integrated development engine that provides rich out-of-the-box functionality to create games and other interactive 3D content. You use Unity to assemble your art and assets into scenes and environments; add physics; simultaneously play test and edit your game, and when ready, publish to your chosen platforms, such as desktop computers, the Web, iOS, Android, Wii, PS3 and Xbox 360.
Unity’s complete toolset, intuitive workspace and rapid, productive workflows help users to drastically reduce the time, effort and cost of making games.
There is incredible momentum in the Unity3D product and its community. Here is a look at Top Unity News Announcements.
Features
Pros of Unity3D (Paraphrased from Unity3D.com);
Multi-platform Development – Desktop (Mac OSX , Windows)
Multi-platform Deployment – Web Browsers (using the Unity WebPlayer), Desktop (Mac OSX w/ OpenGL, Windows w/ Direct3D), Mobile (iPhone, iPad, Android phones and tablets), and console (Wii, PS3 and Xbox 360). The Unity Editor emulates all your selected platforms too. The Unity3D Engine is gorgeous and performant. Unity even offers Union a way to license out your games to find an audience.
Powerful Coding – Unity makes it simple to keep your code working across many devices. Unity abstracts away the majority of platform differences. When precise control is needed, simply use #ifdef to specialize code per platform. Unity supports 3 languages that can be combined within the same project; C# (seems to be the most ‘professional’ option), JavaScript, and Boo programming languages.
Powerful Editor – Manage assets & code, drag and drop to build your scene (2D or 3D), the editor’s stage *IS* the Unity runtime (so you get high fidelity previews as you work), instant build times, see public script properties in the ID for easy viewing/editing.
Flexible Asset Workflow – Within the editor you don’t create assets per se, you import them (see docs & see supported formats) from other programs (all popular formats such as Photoshop and Maya) and manage them within your scenes.
Pros of using one code-base for multiple platforms
When and where it is manageable, I am a huge fan of using and reusing the same project (including all source and code) for multiple deployment platforms. Unity supports this very well.
Marketing dollars – Instead of marketing the game on two platforms separately, we can do it at the same time
Momentum – Word of mouth dictates that downloads on one platform will possibly translate into downloads on the other
Maintenance – We’d rather be working on the next game, than debugging two separate platforms
What is Unity?
Unity is the combination of a project editor, a code editor, and the run-time player. The project editor allows for creation of new projects, manipulation of 3D objects within the 3D world*. Its the glue that brings together your assets, your code and its where you performs the project builds.
*Note: Another tool such as the premium Maya or the free Blender3D studio max is required to do any complex modeling and animation.
The Unity Player (used only for playback in desktop web browsers) is gaining popularity. So is the popularity of developers using the Unity Editor. See these images;
It takes some time to appreciate the workflow of Unity. A developer will likely have several applications open at once while working.
Checkout the screenshots;
Unity Editor: Create your project, edit the properties of your game objects, and build your game.
Create your assets using external tools (Photoshop shown); 2D, 3D, sound, etc… and import them into the Unity Editor.
Code Editor: Unity is compatible with any text editor and comes packaged with the very capable MonoDevelop code editing tools. MonoDevelop has formatting, syntax highlighting, intellisense, and autocomplete.
Asset Store – Within the IDE itself you can shop online to find assets of any type (2D, 3D, sounds, etc…) as well as ‘packages’ which are groups of reusable code which enable new C# functionality as well as add completely new UI* and tools within the Unity Editor authoring environment too. The organization of the assets is great. I get the feeling (so far) that the best way to find packages is through the store (vs Googling, downloading, & importing – which is also possible). However the store is dreadfully slow and buggy, I assume because it is just a clunky webpage loaded through the Unity IDE.
Note: The extensibility within the Unity Editor itself is inspiring. No other game development environment has 3rd party free and premium tools which actually change how the IDE itself functions.
Figure 2. Overview of the User Interface (UI)
Figure 3. Setup Game Sprites
Figure 4. Code Editor
Figure 5. Free & Premium Asset Store
Unity Design Philosophy
There is a hierarchy to everything in Unity; Project -> Scene -> GameObject -> Component -> Properties. Typically, when we talk about ‘things’ in our game we are talking about a specific ‘GameObject’ in a ‘Scene’. An empty game object contains just a ‘transform’ component (which is required). Using menu GameObject -> Create Empty you can make one and add it to the scene.
Two core, Unity-specific data types are;
GameObject: The GameObject is the base class for all entities in Unity scenes. It is not necessarily visual, but commonly is (e.g. Cube, Sphere, Plane)
Component: Created from MonoBehaviour, which is the base class every script derives from. Much of your code goes here.
The Transform Component
It is impossible to create a GameObject in Unity without a Transform Component. The Transform Component is one of the most important Components, since all of the GameObject’s Transform properties are enabled by its use of this Component. It defines the GameObject’s position, rotation, and scale in the game world/Scene View. If a GameObject did not have a Transform Component, it would be nothing more than some information in the computer’s memory. It effectively would not exist in the world.
The Transform Component also enables a concept called Parenting, which is utilized through the Unity Editor and is a critical part of working with GameObjects. To learn more about the Transform Component and Parenting, read the Transform Component Reference page.
You can see here (Figure 6.) how it is represented in the Scene Window, the Hierarchy Window, and the Inspector Window. You can see the Transform component which includes position and other properties. Also note the inviting ‘Add Component’ button. GameObjects exist so you can add components to them. The components do most of the work.
Other Components
The transform component is critical to all GameObjects, so each GameObject has one. Here (See Figure 7.) we see that GameObjects can contain other components (2-way purple arrow icons) too and components can refer to assets (cloud icon)
Component <-> Component Communication
Any class instance (of any type) can access one of the active GameObjects in the hierarchy via GameObject.FindObjectOfType( typeof ( MyGameObject ) ). For example your ScoreBoard class instance can access all the Enemy class instances to display a “Enemies: 5/10” display.
Within any one GameObject it is common that one or more Components will need to communicate. For example your keyboardInputComponent instance can call walkingComponent.walkRight(). Advanced developers may create their own solution to for need. However, for beginners, here are the popular techniques for Component <-> Component communication;
As mentioned each component contains properties. These are the granular values such as Mass, Drag, and Use Gravity (See Figure 8.) that affect how a component behaves. Not every variable within a component is editable, but all editable ones are exposed as properties through the inspector. At author-time and even at run-time you can edit these values. Very friendly for iterative development.
Editable Editor
One of the most shockingly cool features of Unity is that the Editor tool itself is completely scriptable.
Want a different icon to float over a particular GameObject in the Scene window? Script it!
Want a property editable in the Inspector window? Script it!
Want your custom components in main menu? Script it!
Want an entirely custom window (e.g. a home-made texture painting program)? Script it!
Everything scriptable about the Unity experience can be shared between your projects and with other developers (free or premium cost).
Gotchas
Unity’s complexity may have you scratching your head as you get started (and for years to come). It is a very deep and powerful tool. Here are some quick answers to some puzzling ‘gotchas’.
Only For The Third Dimension (3D)?
Unity3D, as its name suggests is a 3D-enabled IDE to create content in a 3D-enabled runtime. There is no option to NOT render your project in 3D. There are always x (width), y (height), and z (depth) to the positioning of every asset in your project. However, this does not mean you can’t create 2D gaming. By setting your camera’s perspective to Orthogonal, the camera will ‘render objects uniformly, with no sense of perspective’. Lock the z (depth) of every GameObject and WOW, now you have a 2D game running in a 3D engine. While this may sounds counter-intuitive or inefficient, it is not. This is the same way many 2D games are created on other platforms too.
Note: Any developers hoping to do 2D should strongly consider 3rd party Unity packages to assist the process. There is MUCH to learn and the tools are very helpful to both fill in the knowledge gaps and provide tools which make development much faster. One of the most popular recommendations for 2D in Unity is called 2DToolkit.
Editable Runtime
Probably the largest single source of confusion during your first day of unity is that you can EDIT your source while the project is PLAYING. There are 3 play controls in the IDE (and via the edit menu); play, pause, and step.
Click play to play and click pause to pause. The trick is that WHILE playing you can still use the IDE; you can drag things into and out of the live scene, you can move the camera, you can edit code, you can change assets, and more! This is very powerful, HOWEVER, once you click pause all of your changes are lost. So be sure you click PAUSE before you return to edit your scene. Obviously this feature is very powerful, you can tweak settings in your live scene without needing to pause/play again. Just be careful.
With the power of Unity there is A LOT to learn. Luckily the editor and the language features are intuitive and there are ample tutorials and sample projects to get started. Still, it is intimidating.
Prefabs
Prefabs are a collection of GameObjects (e.g. a 3D Mesh of your hero character) & Components (e.g. one unit of code that helps accept keyboard input to move your hero character) that can be re-used in your scenes. Several identical objects can be created from a single Prefab, called instancing. Take trees for example. Creating a tree Prefab will allow you to instance several identical trees and place them in your scene. Because the trees are all linked to the Prefab, any changes that are made to the Prefab will automatically be applied to all tree instances. Assets may be created by you or your team or downloaded for free or for cost within the app store within the IDE.
Asset Store
Unity’s Asset Store is home to a growing library of free and commercial assets created both by Unity Technologies and also members of the community. A wide variety of assets is available, covering everything from textures, models and animations to whole project examples, tutorials and Editor extensions. The assets are accessed from a simple interface built into the Unity Editor and are downloaded and imported directly into your project.
Getting Started
With the power of Unity there is A LOT to learn. Luckily the editor and the language features are intuitive and there are ample tutorials and sample projects to get started. Still, it is intimidating.
Here are the links and tips;
Download The IDE – Unity3D and install it. Its free. There is also a pay version with many (non-essential) additional features.
Watch My HD Screencast Video – Watch me talk you through as I create a complete game from start through finish. (See ‘Member Resources’ below)
Review My Sample Project Code – (See Members Resources below).
Making ‘FlyerGame’
To learn Unity3D, I created several simple, but complete games. I include one here to help you learn too. I used assets and game logic from “FlyerGame”, a game that I have recoded many, many times using game frameworks. The HD Video Screencast and source assets are available (See ‘Member Resources’ below).
Conclusion
Coming from a 13 years of Flash Player game development as well as JavaScript game development Unity feels at times a huge polished step forward yet also a clunky gaming-with-training wheels step backward.
The C# language – is AMAZING. I’m constantly figuring out new language features and powerful new ways to solve old problems. The language speed is great. The MonoDevelop code editor is very strong.
The graphics – and sound-performance is stunning. The quality of the output of desktop games from Unity is incredible when compared to any casual-game development platforms yet obviously less-so when compared to professional-grade commercial gaming platforms such as Unreal Engine and CryEngine.
Ease of development – considering how much you can do with Unity (huge 3D worlds for desktop vs simple 2D mobile games) it is easy to use. The Unity Editor is also very strong. Every game requires 1 or more scenes. That makes sense. Each scene requires at least one object inside – typically many. I still feel more comfortable if I could just bind a script to the scene (with no objects) and completely script the experience. Perhaps with time I’ll change my mind on that.
Community – I strongly DISLIKE that Unity has a history of many programming languages. Three are in use today. Perhaps for some there are benefits, but for me the obvious choice is C# and coming across tutorials, code samples, and projects in another languages (JavaScript or Boo) is a hassle.
Documentation – The Unity3D website, its documentation and its help section are all FANTASTIC. At the time of this article 5 of the 9 ‘learning modules’ have complete code and HD video. There is also one complete game project with 60-70% coverage so far with step-by-step tutorials. This is all new since Unity 4.x.
RMC is on the road in Southeast Asia and actively looking to offer this great event. Do you have an organization or venue that would be interested for this free event? Or would you like to see this in your city? Please contact us today!
Free Talk
Synopsis | Rivello Multimedia Consulting will offer a lecture on Cross Platform Mobile development. Use one code-base and deploy rich games and applications for web, desktop, iOS, and Android. Create liquid displays that adapt to the unique features of each device. Participants will gain an appreciation for the benefits of developing cross platform and see proven examples. The full source code of all demos and the complete presentations slides will be available to attendees of the event. Participants are not required to bring any software/hardware to the event. Cameras with no flash are welcome.
This event is a complete but concise introduction to the topic. For those who want deeper, premium training we also offer the Cross Platform Mobile: Premium Training event.
Speaker Bio | Samuel Asher Rivello is the principal of Rivello Multimedia Consulting (RMC). RMC’s Flash and Flex services include software architecture, consulting, development, and training. Samuel is a founding team member of the USA & Singapore offices of Neopets (http://www.neopets.com), a grandfather in the online MMO industry. He has over a decade of experience creating games and applications, and is currently traveling the globe to collaborate with top companies. Sam is an Adobe Certified Designer and Developer for Flash, an Adobe Flex Champion, an international public speaker, and a university instructor. His writing and coding have appeared in leading publications such as Adobe’s “EDGE”™ online magazine, and Futurenet Publishing’s “Computer Arts Projects”™ print magazine. Follow Sam on Twitter: @srivello
Sponsor | This event is available for sponsorship. Please contact us today!
Program | (TBD) 60-75 Mins
10Mins
Speaker & Topic Introduction
10Mins
Benefits of Cross Platform
10Mins
Challenges of Multi-screen Development
10Mins
Demo 1: Project Setup
10Mins
Demo 2: Deployment
10Mins
Questions
Venue | TBD
Date
TBD
Time
TBD
Venue
TBD
Address
TBD
Do you have an organization or venue that would be interested for this free event? Please contact us today!
We at RMC are excited to collaborate with you. We are experts in Flash Platform Gaming, and more. Not sure if HTML5, Unity, or Flash is right for your next project? – Just ask. Contact us today.
Next Steps
Do you have an organization or venue that would be interested for this free event? Please contact us today!
Not Yet Available: After the event the full source code of all demos and the complete presentations slides will be available to attendees of the event.
RMC is on the road in Southeast Asia and actively looking to offer this great event. Do you have an organization or venue that would be interested for this free event? Or would you like to see this in your city? Please contact us today!
Synopsis | Rivello Multimedia Consulting will offer a lecture on Cross Platform Mobile development. Use one code-base and deploy rich games and applications for web, desktop, iOS, and Android. Create liquid displays that adapt to the unique features of each device. Participants will gain an appreciation for the benefits of developing cross platform and see proven examples. The full source code of all demos and the complete presentations slides will be available to attendees of the event. Participants are not required to bring any software/hardware to the event. Cameras with no flash are welcome.
Speaker Bio | Samuel Asher Rivello is the principal of Rivello Multimedia Consulting (RMC). RMC’s Flash and Flex services include software architecture, consulting, development, and training. Samuel is a founding team member of the USA & Singapore offices of Neopets (http://www.neopets.com), a grandfather in the online MMO industry. He has over a decade of experience creating games and applications, and is currently traveling the globe to collaborate with top companies. Sam is an Adobe Certified Designer and Developer for Flash, an Adobe Flex Champion, an international public speaker, and a university instructor. His writing and coding have appeared in leading publications such as Adobe’s “EDGE”™ online magazine, and Futurenet Publishing’s “Computer Arts Projects”™ print magazine. Follow Sam on Twitter: @srivello
Sponsor | This event is available for sponsorship. Please contact us today!
Program | (TBD) Day 1
*
Breakfast (Provided)
20%
Speaker & Topic Introduction
20%
Benefits of Cross Platform
10%
Challenges of Multi-screen Development
*
Lunch (TBD)
25%
Demo 1: Project Setup
25%
Demo 2: Deployment
Extra
Any Questions?
Program | (TBD) Day 2
*
Breakfast (Provided)
20%
Advanced Theory – Project Planning
20%
Advanced Theory – Architecture Planning
10%
Advanced Theory – Graphics Planning
*
Lunch (TBD)
25%
Lab 1: Setup New Project – Choose Game or App
25%
Lab 2: Develop Project & Deploy
Extra
Showcase your lab projects. Any Questions?
Venue | TBD
Date
TBD
Time
TBD
Venue
TBD
Address
TBD
Do you have an organization or venue that would be interested for this free event? Please contact us today!
We at RMC are excited to collaborate with you. We are experts in Flash Platform Gaming, and more. Not sure if HTML5, Unity, or Flash is right for your next project? – Just ask. Contact us today.
Next Steps
Do you have an organization or venue that would be interested for this free event? Please contact us today!
Not Yet Available: After the event the full source code of all demos and the complete presentations slides will be available to attendees of the event.
In software development, the focus is to offer value to the end users; to include features for their eyes. These are the functional-requirements of the project. But of course there is much ‘under-the-hood’ that the end user never sees. This includes content management systems (CMS) that administer the data, servers that provide that data, and developer tools and architectures to help organize the code-base. We call these ‘under-the-hood’ needs ‘non-functional’ requirements.
This quick primer answers “What non-functional requirements are necessary?”.
NON-FUNCTIONAL REQUIREMENTS
In each project, in addition to serving the end users goals, we must serve the needs of the development team; creating a realistic workflow for all team members, allowing for an extensible architecture for current and future functional-requirement features.
My point in writing this article was to get to a list of what non-functional requirements I setup in my apps or game needs. If you are already doing all this, great. MANY mistaken teams are doing NONE of these. Here is the list I use;
My Recommended Non-Functional Requirements
Coding & Documentation Standards: Create a plan for coding standards and commenting practices. The plan should include a ‘bible’ written record of (what to do), the process and workflow to write the code as well as peer-review for compliance, and the buy-in from management to place priority (i.e. time in the calendar). Here are examples of my AS3 Standards and (in-progress) C# Coding Standards and recommended best practices e.g. Unity default folder structure. Consistency, pragmatism, and adoption are fundamentals here. Implementing such a plan is EXPENSIVE, so be sure everyone is on board. The benefits to readability, maintainability, and scalability are well-worth the effort.
Configuration File – Upon project start-up, load an externalized set of name/value pairs (typically XML). This allows for developers (and others) to tweak values and reduces the need-for / frequency-of project recompilation. A huge side-benefits is that this ‘light and playful’ environment encourages experimentation.
Localization – Even for English-only project, centralize (put all together) and externalize (separate from code – typically in XML) all display text. This allows for easier edits and translation to other languages if/when needed.
Architecture – Sure, smart developers can create their own architectures, but smarter developers choose an off-the-shelf, 3rd-party architecture. Pave the cow-path, point your developers to 3rd party documentation and forums for help, and hire new staff (with experience in that architecture) more easily. If your team is not using ‘any’ architecture, that is probably a huge mistake. There are many available and are often specialized for each platform and project type (i.e. Flash Platform for Game project type)
Restart Functionality – The app or game should have a restart button. This may be a functional-requirement. If so, great. If not, do it anyway. By requiring your team to implement restart (and garbage collection) your project will probably be far more efficiently written. This is an expensive feature to implement, but if done at the beginning it is very manageable.
Zero-Memory-Leak Policy – The app or game may be ‘too simple to warrant optimization’. Regardless, do it anyway. Once you have the ‘Restart Functionality’ added, run a memory profiler tool on your project and ensure that with each restart the RAM usage properly reduces to zero (or whatever benchmark you set). This is an expensive feature to implement, but if done at the beginning it is very manageable.
Game-specific Non-Functional Requirements
The list above, plus…
Pause Functionality – A fundamental test of good gaming architecture is ‘can it pause at any time?’. Even if ‘pause’ is not offered to the user, this requirement is helpful.
Time-based animation – Your game algorithms should be infallible regardless of a faster-than-expected or slower-than-expected frame-rate.
CHAMPIONING DEVELOPERS’ RIGHTS
Depending on your team structure, you may have your software team developing the product ‘for’ the business team. Treating each department within your company as ‘clients’ helps to decouple the responsibilities and make hand-off of project tasks more clear and distinct. However each team, naturally defends their own interests, often at the expense of others. Within this setup, I’ve seen countless times that the dev-team must fight for the time to create non-functional requirements in addition to the functional requirements, where-as the business team’s focus is solely on the functional requirements. The business mind is concerned with ‘add a new button that does X or Y’ and to them that sounds simple. The Dev-team knows there is indeed a quick and dirty way to add that feature but also a more manageable, scalable, well-architected solution. It is a typical time vs quality discussion. Except the business team may not understand why spending more time (and money) is valuable when they don’t see more value in the end product.
Addressing developer’s needs helps to reduce burnout of your team. Happy developers are productive developers. Unproductive developers leave your team. Also an objective development leader can add ‘just enough’ non-functional requirements to respect the long-term plans of the project. Obviously a project with a long development cycle (days until launch) and long shelf-life (days between launch and unlaunch) benefits most from good non-functional requirements.
Arguing for the additional time needed to ‘do things right’ is a common struggle as dev teams champion their rights. Depending on the project, I can be on either side of this discussion. Generally I try to create an environment that makes the developers comfortable yet gets the job done. To facilitate that, I recommend separating time-estimations for functional-requirements from non-functional. One methodology is to take the total time estimate for the project or milestone’s functional requirements (including buffers for unknowns) and then calculate 20% additional. I offer developers that 20% to use as they see fit.
For example the business team can offer to the developers; “Ok, we all agree that our next milestone will take 400 man-hours; so you (developers) will get 480 and can allocate the 80 hours to improve code quality (beyond our minimum standards) and build-out the architecture (beyond today’s immediate needs).” Over-architecture and over-planning are dangerous, so giving free-reign to developers to ‘make it perfect’ is not cost effective, nor does it really improve the project or product. If developers feel they are hitting some (80% perhaps?) level of comfort with their code-base, that is a good balance. This is my personal opinion based on years of experience on hundreds of small to mid-size software projects.