190 likes | 292 Views
Tools for Game Developmet. Erik Harpstead Carnegie Mellon University. Game Development is Hard. Challenges in Game Development. Rapidly shifting design requirements Multi-platform development Integration of many different forms of media (sound, music, art, modeling)
E N D
Tools for Game Developmet Erik Harpstead Carnegie Mellon University
Challenges in Game Development • Rapidly shifting design requirements • Multi-platform development • Integration of many different forms of media (sound, music, art, modeling) • Highly interdisciplinary teams • The demand for novelty
Three Routes • Roll your own engine • Use a Framework • Use an off-the-shelf engine
Rolling Your Own Engine • Surprisingly common • Special game mechanics require custom software architectures • Existing tools are too restrictive for rapid design changes • Using other people’s tools is a cop-out
Using a Framework • Usually provide basic utilities and primitives • Commonly built around a state machine in a loop
Using a Framework • Other Common Components: • Rendering Library • Physics Engine • Input Abstraction • Fast Math Libraries • Object Pooling/Resource Management • Audio Management
Using a Full Game Engine • Use some kind of interactive editor • Provide custom API or scripting language for defining game mechanics • More approachable by design and art members of a development team • Combines many tools into a single package
Entity/Component Model • A pattern that is becoming more popular in game development • Used in the Unity Game Engine • Every game object is an entity which contains different components • Those components are acted on by systems that run in loops
Example Entity class Entity { void AttachComponent(ComponentType, argumentList, name) void DetachComponent(name) void UpdateComponents() void UpdateComponentType(ComponentTypetypeOfComponentToUpdate) void HandleMessage(MessageType message) // echoes to all attached components ... BaseComponentListattachedComponentList .... }
Example Component class BaseComponent { virtual void Startup() virtual void Update() virtual void Shutdown() virtual void HandleMessage(MessageType message) .... } class RenderComponent: Public BaseComponent { virtual void Startup() // (registers the renderable mesh with the rendering system) virtual void Shutdown() // (removes the renderable mesh from the rendering system) ... }
Components in Unity • All public members of a script are exposed in the GUI allowing non-programmer team members to control game settings • Built in Component types can also be accessed and edited this way • Properties can be changed in the GUI while the game is running to test changes
Open Areas for Game Tool Development • Implementing AI behaviors (complex simulation in general) • Better animation control (some promising recent tools) • Truly cross-platform deployment (particularly to web)