Unity Basics
Game Objects
Basic building block Hierarchies
Components
Define the behaviour of game objects Transform Meshes Animations Materials Scripts Physics modeling
Working with Unity3d
TOMMI HORTTANA,
[email protected] PETRI LANKOSKI,
[email protected]Workflow
Working with Assets
Place assets in the Assets folder Unity auto-imports them Only move and delete assets through Unity Regularly backup Assets and Library folders
Where to do things
Outside Unity
models animations textures sounds GUI graphics
In Unity
levels scripts physics materials/shaders GUI
Prefabs
Sort of blueprints of game objects Should be made for most objects
Modeling
Support for Blender (.blend), Maya (.mb, .ma), Cheetah3d (.jas) XSI SoftImage & ModTool via FBX
colors not supported, use textures plot IK & constraints neutral pose breaks the model
Animations
Imported with the model from the 3D software Skeleton
Plan for Mixin
Consistent Naming Clear Hierarchy Same hierarchy for similar models (i.e. shared skeleton for humanoids)
5 Game Project 2008-2009 6
Test the pipeline from modeling software to Unity
Game Project 2008-2009
Textures
Unity can import multilayered PSD & tiff
no need to flat them
Fonts
2n x2m (2, 4,
Textures for game objects should be 256, 512, 1024, 2048, ...) GUI textures
disable mip maps use clamp (not repeat)
True type fonts (.ttf) supported Size definable in import setting
duplicate & set size in import setting
older cards does not support textures larger than 1024
Custom fonts
ttf font editor photoshop, etc.
fonts are textures in Unity
7 Game Project 2008-2009 8
Alpha channel better than transparent layer
at least in PSD
Game Project 2008-2009
Physics Engine
Realistic physics engine
Ageia PhysX physics engine
Scripts
Needed for game mechanics
the physics engine
Colliders define object shape and size Rigid Bodies define physical behaviour
gravity persistence of movement
Javascript, C#, and Boo available
Examples in documentation in Javascript Best support for C# from us Mixing possible in some cases
Physics Materials
friction bounciness
Game Project 2008-2009 9
Variables can be exposed to the Unity graphical interface
good for defining game object specific values
Game Project 2008-2009 10
Scripts: MonoBehavior
Awake()
Initializations
GUI
OnGUI() Can be scaled to fit different screen sizes
GUI.matrix = ...
Start()
Initializations After all Awake() is executed for all MonoBehavior instances
Update()
Every called in frame
Design layout and gui elements for some arbitrary size
e.g., 1280x854
LateUpdate()
Called after Update() Use for follow camera, etc.
FixedUpdate()
Called every fixed framerate frame
GUI.skin GUI & GUILayout methods
button, label, box, ...
OnGUI():
Called every frame GUI handling goes here
Sound
Supports common audio formats Native support for localized 3D sound effects Plugin (for example FMOD) needed for more sophisticated soundscapes
Sync events with the music beat Modelling echoes caused 3d space Reactive sounds
Game Project 2008-2009 13
Plugins
Possibilities to extend functionality of Unity
Wiimote support FMOD Audio input
Plugins are not possible to use with Web Player
Game Project 2008-2009 14
Optimizing Models
Aim for 15004000 triangles / object
combine near objects if they have less than 1500 triangles
Optimizing Scenes
Pixel lights are expensive
object is rendered once for every pixel light use them for dynamic lights light maps for static lights (or draw lights directly to textures)
Aim for single material (+ texture) for an object
the object will be drawn once for each material; an object with 10 materials is drawn 10 times texture maps
Characters
25005000 triangles 1560 bones one material
Game Project 2008-2009 15
Dynamic Shadows
soft shadows are more expensive than hard if problems with frame rate: thing using blob shadows and shadow projectors
Game Project 2008-2009 16
Optimizing Scripts
Optimize if frame rate drops below 30 in low end target machine Avoid heavy operation in Update() and inner loops Use MonoBehavior.enabled to disable/enable scripts Java script & Boo: avoid Duck Type
Game Project 2008-2009 17
Optimizing Scripts
Light operations: plus, minus, times division takes ~20 times more cycles (compared to light operations) Heavy operations: square root, sin, cos (~4050 times more) Heavy operations: Normalize, Distance
distance*distance > dif.sqrMagnitude
Heavy operations: raycasting, Object.Find, FindObjectOfType, FindGameObjectsWithTag
Game Project 2008-2009 18
Lies
Characters:
50007000 triangles multiple objects (eyes, eyelids, etc.) toon shader / flat shader
Location models are rather high poly
flat shaders unoptimized in terms of materials
One directional light Postprocessing effects + texture animations Playable in PowerBook G4
frame rate ~10 (should stay over 30)
Game Project 2008-2009 19