Basic Concepts¶
This page describes basic concepts and terminology commonly used when working with Crown.
Project¶
A project in Crown is a folder that contains all the resources that describe your game. Resources are plain-text files (with some exceptions) identified by their relative path (to the project’s root).
You are free to organize resources in a project however you like. However, to
avoid confusion it is recommended to put units in their own folder because
they often consist of multiple files (e.g. a resource for a tree may consist
of a tree.unit, tree.material and tree.lua files).
Resource paths and names¶
All paths in Crown are unix-style (forward slashes). Only canonical/normalized paths are allowed.
Resources in a project are identified by their relative path to the project’s folder, without extension.
For example, to refer to the unit named “units/player/player.unit” you will use the string “units/player/player”.
Unit and Components¶
Units are the fundamental building blocks in Crown. Units can be used to represent any object that exists in a game world - a character, a tree, a vehicle, a light etc.
By default, units are empty. You add functionality to a Unit by adding Components to it. No component is mandatory, units can be just empty IDs.
Crown includes a number of predefined components, some examples are:
Transform- specifies a position, rotation and scale in the worldMeshRenderer- draws a 3D meshActor- specifies physics properties for a collider, such as mass, filter etc.Script- adds logic via a Lua scriptLight,Camera,Fog,Bloometc.
Components can be added or removed at any time in the editor or at runtime.
Units support parent-child relationships, allowing complex hierarchies of objects to be built from many smaller units (e.g. a car with wheels, body, lights etc.).
Unit Prefab¶
Units can be saved to disk as a .unit resource, creating a prefab. Other units can then reference this prefab, instantly inheriting all of its components and hierarchy. Changes to a prefab are automatically propagated to every instance of that prefab.
Unit Prefabs are created by saving existing units inside the Editor overview, or, more commonly, by importing them from scenes or sprites.
World¶
A World is the runtime container that holds Units and other objects and advances the game simulation. When a World is running it:
updates animations/audio/particles;
steps physics and handles collisions;
dispatches logic events to script components;
renders the visible scene;
etc.
A World can be populated manually via code or automatically by loading Level resources into it.
A game always has at least one active world. Multiple worlds can exist simultaneously (for example, one for the main game and one for a UI overlay), though this is uncommon.
Level¶
A Level (.level resource) is a saved collection of units, sounds and other objects.
Levels are authored in the Editor overview. A world can load any number of levels at the same time, enabling complex multi-layered scenes.