Since graphic designers/end users are not programmers, what are the technique to allow them to add new tasks or change application logic in a game? what are the end user tools? I want some popular examples.
Various scripting languages, both text-based (ones with simple syntax - LUA for example - can be more accessible for a non-programmer), and graphical (Unreal, for example, is very GUI oriented).
Alternatively I've seen people just expose tweakable stuff through an editable text file (sometimes a CSV formatted file usable in Excel), if you expose the right stuff you can give designers fairly powerful abilities to change the game, without them having to actually alter the logic.
Basically the tools I've seen being used are:
- Notepad, or other text editor.
- Some ad-hoc graphical interface to a scripting language, sometimes in-game.
Unity is a very popular engine/WYSIWYG editor which allows programmers to expose easy to modify "components" which artists/designers can attach to entities to give functionality within the game. A bunch of components come standard which provide a lot of the basic functionality for games.
From the Unity site:
Play, Pause, and Step
Click the Play button to instantly run your game. Pause and Step forward to analyze complex behavior in detail. While the game is running (or paused), you can alter values, assets, or even scripts! This means you can do more experimentation and more testing for a better final game.
Easy Editor Customization
Streamline your workflow using simple, Editor-specific scripts. We wrote the Editor using Unity’s own scripting, so anything we can do in the Editor, you can do as well.
Customizable Editor Layout
Choose from one of many built-in application arrangements, or create and save your own. Different tasks might benefit from different arrangements, so use easy hotkeys to switch arrangements as needed.
Drag 'n Drop Everything
Visually drag assets and objects in the editor to assign Textures, Audio, Behaviors, and script variables. Create logical GameObject hierarchies to manage and maximize your game's functionality.
To streamline the repeated use of complex GameObjects, you can turn one or more of them into a Prefab. This Prefab can then be easily placed throughout the game or instantiated at runtime. Any changes to the original prefab are propagated to all dependents, so both major and minor adjustments can be made very quickly to a large number of GameObjects.