Tuesday 7 July 2015

Unity 3D 5, C#

Design Activities @ Lynda - 

DONE Unity 5 3D Essential Training Adam Crespi
  • About
    • Assets (modelling, texturing, rigging, animation, scripts)
      • Autodesk Maya, 3ds Max, Unity 5 (less robust rigging systems, and slower animation process)
      • Digital Sculpting Programs
        • Autodesk Mudbox, PixoLogic ZBrush
      • CINEMA 4D
      • xNormal, Quicksil (Normal Maps)
      • Autodesk Motion Builder in MOBU format used for transferring models, UVs, and motion
      • Textures (painting, moving, layers, blending)
        • Adobe Photoshop, Illustrator
        • Quixel Suite (dirt and decay)
      • Audio
        • Pro Tools, Audition
      • Motion
        • Vicon, MotionBuilder
      • Scripting Languages
        • C#, JavaScript, Boo, ShaderLab
      • IDE (Unity)
        • MonoDevelop, Visual Studio integration
    • Unity Project Setup
        • Create New or Open Existing Project
          • Project > Open Other (select based on appropriate version control naming)
          • Project > New Project
        • Save a Project or Scene
          • Project > Save Project
          • Project > Save Scene
        • Import Assets Packages (i.e. character, environment materials, etc)
          • Assets > Import Package (minimal as necessary to keep file size small)
        • Import Assets
          • Individual
            • Assets > Import New Asset 
            • OR [Right Click] Assets > Import New Asset
          • Bulk - Copy to Assets folder in Explorer for bulk import (Unity auto-imports)
        • Add Prefab to Scene
          • Drag and Drop into Scene Window
          • Drag and Drop into Hierarchy Window
        • Link associated Props
          • Drag and Drop into Hierarchy Window
        • Organising "Assets" Folder
          • Editor
          • Materials (even if "Import Materials" is Unchecked, Unity 5 still creates the materials in this folder on import from different meshes)
          • Standard Assets
          • Textures (Create this New Folder)
          • Meshes (Create this New Folder)
          • Audio (Create this New Folder)
          • Prefabs (Create this New Folder) (i.e. to differentiate incoming exported files from Prefabs)
        • Organising Scene Hierarchy objects under Parent Folders (for easy searching and filtering)
          • Game Object > Create Empty; Inspector > Rename object (i.e. "Xyz")
          • Select all xyz objects in Scene Hierarchy and Drag into the Xyz Folder
        • Unity Project IDE Features
          • Views
            • Hierarchy Window
              • Main Camera
              • Directional Lighting
            • Scene Window
            • Project Section/Window (for importing)
              • Standard Assets - Characters, etc
              • Editor (custom tools or imported)
            • Inspector View
              • i.e. Textures (if any assigned to a Materials of imported Environment)
            • Preview Window (click Color or Alpha Button to toggle these)
            • Testing
              • Player Controller 
                • Project Window, Assets > Standard Assets > Characters > First Person Character (viewpoint for testing at any point)
                  • Audio
                  • Prefabs
                    • FPSController.prefab (First Person Controller viewpoint with movement but not character in a Capsule Collider. Allows use of Play)
                    • Scripts
                  • Resolution
                    • Test game resolution / aspect ratio / orientation from player viewpoint before shipping to ensure all assets included when using each enabled aspect ratio for each platform the game is configured to be ported to
              • Unity Game Design Specification
                • Define Project New or Open Project (multiple Scenes with Preloaders)
                • Define Character - Import FPS Controller
                • Define Scene - Save Scene (Unity icon)
                • Determine Target Platforms for Unity Game
                • Define Resolution (Cross-Platform) - (configure Web Player, PC / Mac / Linux, iPhone / iPod Touch / iPad, Android, Blackberry, Tizen, WebGL, Samsung TV)
                  • [Click] Horizontal Tab Bar icons 
                  • Edit > Project Settings > Player > Resolution & Presentation
                  • Define Quality - (configure graphics quality for each target platform)
                    • Edit > Project Settings > Quality > (Right Click to Enable / Disable defaults)
                • Unity Game Assembly Production Pipeline
                  • Interactivity
                  • Gameplay
                  • Assets
                • Unity Basic Workflow
                  • Open Unity Project (i.e. Open Folder: Exercise Files > Ch02 > 02_02)
                  • Open Scene (i.e. Double-Click the file "02_02_start" contained in the "Assets" folder of the Project Window hierarchy)
                  • Loading...
                    • Main Camera
                    • Directional Light
                    • First Person Controller
                      • Camera
                      • Green Sphere - Defines Player Volume
                      • Blue Capsule - Defines Audio
                  • Export Process for FBX (i.e. from 3ds Max)
                    • [3ds Max] Application > Manage > Set Project Folder / [Maya] File > Set Project (organisation and versioning)
                    • Select components (specifically) for Export
                    • [3ds Max] Application > Export > Export (/export/<sub-folder>)
                    • [Maya] Windows > General Editors > Attribute Spread Sheet > All (bulk edit attributes of multiple objects) > Disable "Segment Scale Compensate" for all bone objects (of rigs with joints) to maintain mesh size
                    • [Maya] Check that pivot of base object is at (0,0)
                    • [Maya] Animation Editor > Keys Check specificity of "keys" (i.e. keyed on rotation)
                    • [Maya] File > Export Selection Choose FBX File Type
                    • [Both] FBX Export Dialog (Check the following "enabled" as required: Geometry > Smoothing Groups, Edge Orientation, Animation, Bake Animation 0 to 100 and "Resample All" with step size of 1 (every frame), Deform Models with Skins (when using bones to deform the model), Units (Meters), Advanced > Scale Factor, Advanced > FBX version)
                  • Import New Assets (i.e. Right-Click in "Assets" folder of Project Window hierarchy and select "Import New Asset...". The Assets folder contains folder structure containing Filmbox format exports from 3rd party apps for interoperability with Unity scenes). Bulk Import alternative is to Drag-And-Drop them into the "Assets" folder of Unity 5 from an external Project Folder for configuration
                    • . / 3ds max / export / *.fbx
                    • . / Audio / export / *.fbx
                    • . / Maya / export / *.fbx (i.e. from a working Maya project)
                  • Inspect Imported Assets (i.e. mesh, textures, animation, audio)
                    • [Click Right-Arrow] of FBX file in "Assets" Window to expand and shown details:
                      • Actual object (i.e. mesh) (plus subcomponents if any)
                      • Avatar
                      • Animation (check sufficient frames per second, and segment and trigger in Unity's Mecanim system)
                    • Inspect Properties of New Assets in Inspector Window 
                      • Mesh (i.e. from 3ds Max)
                        • Scale Factor - Difference between 3rd party app exported units of measurement and Unity 5's
                        • Colliders - Collision interaction with the asset
                          • Uncheck - Use when creating Custom Colliders
                        • Generate Lightmap UVs - Directional light baking for scenes
                          • Checked (Preferred) - Creates another set of auto-unwrapped UVs on object for baking lighting
                        • Diffuse Texture Map (aka Albedo) - Painting of object model with multiple materials based on its defined UV map (apply in 3rd party app or Unity 5)
                        • Import Materials
                          • Uncheck (Preferred) - Use for Default Unity 5 Diffuse Material unless user applies a material (i.e. create materials in Unity 5 and apply multiple materials to an object by using polygons that are assigned in 3rd party apps like 3ds Max or Maya)
                          • Checked - Unity 5 will creates a "Materials" folder within "Assets" (may result in duplication if an object is re-imported)
                      • Texture (i.e. Colour, Normal Map) (i.e. from 3ds Max for meshes such as Props, Walls, Floor, etc)
                        • Texture Type - Select from the drop-down whatever it is (i.e. if it is just a colour choose "Texture", or if a Normal Map such as for adding relief to a mesh choose "Normal Map") (Note: "Advanced" section is available including detailed compression options)
                        • Create from Greyscale - Uncheck
                        • Max Size - Different compression overrides depending on target device (select supported devices)
                        • Compression - Extent that the file can be compressed (Unity 5 downs the resolution from its True Colour) is shown in the footer of the Preview Window
                        • Note (Supported File Formats): Unity 5 supports importing uncompressed files such as TIFF, TGA, JPG, PNG and Unity 5 may compress them upon import
                        • Note (File Naming Convention): Name the Texture files with the name of the object they will go on (i.e. archwayCS = archway Colour Shine), plus suffix letters indicating precisely where on the object (since thumbnails not always recognisable)
                      • Animation (/scenes) (i.e. crane object comprised of multiple parts sub-objects and an associated animation file "Take 001")
                        • Model (similar configuration to a Mesh)
                          • Generate Lightmap UVs - Check
                        • Rig
                          • Generic Rig (Non-Bi-Pedal Humanoid)
                          • Bi-Pedal Humanoid (Animation Type with enough bones for humanoid-choosing interfaces) - Imported from Character Studio (3ds Max) OR Humanoid Character Animation Toolkit (CAT) Rig, or HumanIK (Maya)
                          • Root Node (of the Base, aka the Parent in Maya) - Hierarchy of sub-objects associated with main object from 3rd party app is imported (i.e. Maya)
                          • Avatar Definition (for Mecanim)
                        • Animation (Preview Window, Play) (i.e. segment multiple animations and trigger them in Mecanim prior to applying materials and implementing in game)
                          • Frame Rate / Smoothness (check sufficient i.e. 24fps is default in Maya)
                          • Quantity of Frames (check sufficient i.e. timeline set from 1 to 240 frames may be segmented into different clips and triggered in Mecanim)
                        • Audio (Time of occurrence, Mood for a place, Ambience for room, Hear or be Heard by characters)
                          • Preview WAV format, Play - Check audio and time length correct (else stretch sound, reconfigure, or change sample rate)
                          • Mono Audio
                          • Load in Background
                          • Preload Audio Data
                          • Platform-Specific Configuration (Defaults)
                            • Load Type - Decompress on Load (i.e. discrete sounds) OR Streaming (i.e. background music)
                              • Compression Format - Vorbis
                              • Quality
                              • Sample Rate (i.e. 22kHz instead of 44kHz results in compression)
                              • Preview Summary Section
                            • Materials
                              • Default grey coloured material when no materials imported and assigned to Prefabs
                              •  "Assets" Window > [Click Right-Arrow] in "Materials" folder > Create > Material (Base Texture used for object Shading and reaction to light)
                                • Note: Differs from Physic Material associated with physical interaction
                              • [Click Material] to display Inspector > 
                                • Shader > Standard (normal / raw material properties such as colour and automatically configures shine and reflection with metallic property that changes shading)
                                • Rendering Mode > Opaque (not see-through)
                                • Rendering Mode > Cutout (cutout map where material not exist where colour is black)
                                • Rendering Mode > Fade / Transparent (used for translucent materials such as glass)
                                • Main Maps > Albedo Map - Raw material colour with smoothness and shine (i.e. xyzCS) without lighting data
                                • Main Maps > Tint (unifying tint from colour picker)
                                • Main Maps > Metallic (changes shading in red channel since its greyscale. i.e. zero value for rough material or high value for full metal showing more specular highlight and more diffuse section of object becomes dark
                                • Main Maps > Smoothness (changes smoothness in alpha channel. i.e. low value to remove gloss and spread the reflection of surroundings with less disturbance from the normal map for a rough material surface)
                                • Main Maps > Normal Map (i.e. xyzN) and Height Map - Used for parallax and defines surface relief and disturbing the normals of polygons. Height map in grayscale helps define paralax or when oblique to it. Height map complements the Normal map 
                              • Example Workflow: 
                                • Define Metallic in Red channel
                                • Define Smoothness in Alpha channel
                                • Leaves Green channel and Blue channel available in the image as Composite Map for other properties
                                • Define Height Map (G) (hover for tooltip) in Green channel (Select same xyzMSH file as selected for Metallic)
                                • Leaves Blue channel available
                                • Define Omission or Emission in remaining Blue channel
                              • Add Textures to Material (Props)
                                • [Click Material] to display Inspector > [Click Round Button next to a Map] (i.e. round button next to Albedo) > Select a Texture. 
                                • Alternative is to copy/paste drag-and-drop (i.e. PSD files of props, prop sheets colour i.e. xyzC in normal i.e. xyzN, FBX files with UVs) from Texture directory to Unity 5 project directory /assets/textures/ (Unity 5 auto-updates). Open meshes/props/ and Select object to replace with updated FBX file (Right-Click > Reimport to update from same directory, OR >Import New Asset to update from file in different directory). Delete the Materials subfolder imported with it and Delete the old FBX file [CMD + Delete] d. Create new material to associate with new FBX file Mesh/Prop by opening Assets > Materials > [Right-Click] > Create > Material. Rename the material to "Prop". [Click Material] to display Inspector. Configure with Main Maps > Albedo Map >  [Click Round Button next to a Map] (i.e. round button next to Albedo) > Select the updated Prop Sheet Colour replacement
                              • Missing Connections
                                • Note: If object in Assets > Meshes > Props folder is coloured purple this means the associated Material is missing and is fixed by selecting the same object in Assets > Prefabs > Props so it appears in Inspector then navigating to Assets > Materials > and selecting "Props" and dragging it over to Add Component section of Inspector. Go to Assets > Prefabs > Props and drag the prefab into the Scene. [Press F] to Frame In. If nothing appears then go to Assets > Meshes > Props and expand the object taking not of its name (i.e. Line003), then open Assets > Prefabs > Props and select object so appears in Inspector, click Mesh Filter > Mesh > Missing Mesh >  [Click Round Button on right], search and select Line003
                              • Preview Window (drag object at bottom of Inspector to check shine over normal map)
                                • Composite Map allows defining multiple areas within one atlas and using one material for multiple objects, where some may or may not be metallic 
                              • Testing
                                • Prefabs Folder > Drag Objects into Scene > [Shift+Click] Select Multiple Objects > [Press E + CTRL] Rotate Objects in steps to desired Orientation > Assign Materials to each Prefab (Materials Folder > Select and Drag Material into Add Components section until mouse becomes a "+" symbol at bottom of Inspector to connect Material to each Prefab selected in scene. Alternatively just drag Material onto selected objects to assign)
                                • Quality Check in Scene (zoom in, check detail, check reflection, check specular highlight travelling shine across material caused by sun)
                          • Click [Apply] when finished configuring imported object
                        • Open Imported Asset
                          • [Drag] into Project Window hierarchy and [Double Click] or drag into scene
                          • Press F - Frame in on the object
                          • OPT+Left Click - Tumble around
                          • Check whether the quality of a "Mesh" import is ready for a "Material"
                        • Re-Import Asset [Right Click file in "Asset" folder] > Reimport (if required)
                        • Apply Colliders to Geometric Objects (only those known to be collided with)
                          • Introduce Object into Scene
                          • Uncheck "Generate Colliders" (for an object). Noting that different types of Colliders are listed in Components > Physics (where Mesh Colliders are most expensive computationally by Game Engine)
                          • Generate Colliders (by adding Components on objects and Optimise where possible)
                            • Click object in "Asset" folder
                            • Drag object into Hierarchy (object appears in Scene)
                            • Click object in Hierarchy. Expand object (i.e. Door) to show associated sub-objects (i.e. Frame)
                            • Click sub-object
                            • Select the most Optimum Form of Collider type (to avoid having to resort to an expensive Mesh Collider). Component > Physics > ___ Collider (adds ___ Collider as a Component of the sub-object in Inspector Window) (OR Click "Add Component" in the Inspector Window)
                            • Check Collider Parameters (in Inspector) (i.e. trigger, physical material, radius, height, direction)
                          • Optimise Colliders (on objects)
                            • Check all sub-objects have sufficient Colliders (shown as green coloured boxes on the object)
                            • Apply additional Multiple-Colliders (on an object) to shape where Player can go and prevent clipping (Player walking through the object)
                            • Click "Edit Collider" in Inspector Window (displays green dot in centre of each side of object)
                            • Click and Drag a green dot to Modify Size of Collider
                            • Click "Gear icon > Copy Component" in Inspector Window
                            • Click "Gear icon > Paste Component as New" in Inspector Window (Duplicates the Collider in the Inspector Window for configuration of Parameters)
                            • Click "Y" (axis) text (in Inspector Window) and Drag to move the Duplicate Collider to desired location in Scene (i.e. separate collider for each side of a door frame and the lintel above to only allow access through the door itself)
                          • Custom Optimised Mesh Collider (i.e. modelled in say 3ds Max with less polygons than the polygons in the object itself to Optimise it and named Door_03CMC)
                            • Hide (temporarily) all objects in Hierarchy Window (Select All, and Uncheck checkbox at top left of Inspector Window)
                            • Drag Door_03 into scene
                            • Select Door_03CMC (Uncheck Light Map UVs, Uncheck Import Materials)
                            • Drag Door_03CMC (Custom Mesh) into the scene (where its position matches with Door_03 with good definition)
                            • Click Door_03CMC in Hierarchy Window. Add Component > Physics > Mesh Collider
                            • Disable "Mesh Render" (so not react with the scene anymore) by Uncheck "Mesh Render" (and Uncheck Receive Shadows, Uncheck Use Light Probes, Off Reflection ProbesOff Cast Shadows) in Inspector Window (so only Collider Volume is shown)
                            • Drag Door_03CMC and Drop onto Door_03 (as a Child element)
                        • Create Prefabs (Asset Planning so only define repeatable elements as necessary by using Modular and Reusable Design for stitching together to optimise workflow and gameplay by economising by batching to reduce the Draw Call quantity with highest FPS)
                          • Click Prefab (i.e. "Door_02" in Hierarchy Window) and Drag into "Prefab" Folder
                          • Drag Prefab (i.e. "Door_02") from "Prefab" Folder into the Scene for Unity 5 to automatically create "Door_03" (any changes to it will Reference back to the centralised Root object "Door_02")
                          • Click "Door_03" and Press CMD+D to Duplicate it and create "Door_04" for which any changes also Reference back to "Door_02"
                        • Transfer Objects into Scene (Game Environment)
                        • Update Prefabs (Iteratively to Tune and Refine) (i.e. improve smoothing groups definition by updating mesh in 3rd party app and re-importing with new version control revision number)
                          • Update in 3rd party app
                          • Either [Right Click mesh file to update] > Reimport (select update file from <3rd party app folder>/export/___.fbx) OR Open relevant folder (i.e. Meshes) [Right Click in relevant folder] > Import New Asset (")
                          • Update Scene Mesh
                            • Click object in Hierarchy Window
                            • Click radio button on right side under Mesh Filter header and find the updated new asset
                        • Apply Physic Materials to Colliders of Prefabs
                          • Create Folder "Assets" > Materials > Physic Materials
                          • [Right Click] > Create > Physic Material, Name the Material (i.e. stone, paving)
                          • Configure Physic Material (adjust reaction of Friction, Bounciness)
                          • Click relevant Prefab object (updates all Instances through propogation). Open Inspector Window
                          • Update "Material" associated with each Collider for each of its sub-object elements
                            • Click radio button on right side of "Material" and select a Physic Material (custom configured)
                        • Apply Audio to Prefabs (triggering a sub-object element of an prefab object playbacks a sound for Game Experience)
                          • Click Door_02 (Prefab) in Prefab Folder. Add Component > Audio > Audio Source
                          • Click radio button of "Audio Clip". Select Audio file
                          • Uncheck "Play on Awake" (if want to custom configure playback when triggered in Mecanim instead)
                          • Uncheck Mute
                        • Assembling Modular Assembly Set of Meshes
                          • Example Workflow
                            • View different objects in Assets > Meshes. Select a Mesh object so it appears in Inspector
                            • Apply a material to a mesh. Go to Assets > Materials > [Right-Click] > Create > Material. 
                            • Rename to match the name of the mesh for it to be associated with.
                            • Configure the material in Inspector
                            • Main Map > Albedo Map >  [Click Round Button on right], select xyzCS
                            • Main Map > Normal Map >  [Click Round Button on right], select xyzN
                            • Modify Metallic range by increasing to apply shine and fernal reflection with outer glow
                            • Modify Smoothness by reducing to reduce the reflection and specular highlight diffuse over the surface (instead of concentrated)
                            • View the elements in Open Assets > Prefabs > xyz. Select each element so it appears in Inspector
                            • Apply the Materials to each element by navigating to Assets > Materials > xyz. Drag the material into the Add Components section of Inspector for each element
                            • Check prefabs in the scene. Go to Assets > Prefabs > xyz. Drag multiple objects into the scene. Press F to Frame In
                            • Press V to snap the elements together in the scene on a vertex. Drag the Snapping Vertex to the outside of an element and then drag to another
                            • Evaluate the Material (in Scene)
                              • Check how highlight travels over the surface
                              • Check how background reflection diffuses across surface
                            • Test different Shader Model for the Material
                              • Go to Assets > Materials > xyz > Shader > Standard (Specular Setup). This changes the setting from Metallic to Specular (in RGB) to allow specular colour using an Albedo or other image
                        • Create Normal Map from Imported Grayscale Height Map
                          • Create new material in Assets > Materials > [Right-Click] > Create > Material. Rename it to match certain objects in Assets > Prefabs > Xyz
                          • Apply colour to the new Material from files (colours, normals, grayscale) added to Assets > Textures. 
                          • Select the new material in Assets > Materials so it appears in Inspector. 
                          • Main Map > Albedo Map >  [Click Round Button on right], select xyzCS (colour and shine)
                          • Main Map > Normal Map >  [Click Round Button on right], select xyzN
                          • Check that the Albedo Map and Normal Map are a Match
                          • Fix by opening Assets > Textures > xyz (greyscale). Open in Inspector
                          • Change Texture Type to value of "Normal Map" with Create from Grayscale set to "On"
                          • Click Apply and check in Preview Window
                          • Update the material with this new texture. Open Assets > Materials > xyz. Main Map > Normal Map >  [Click Round Button on right], select xyzN
                          • Test the material with new texture on a Prefab by opening Assets > Prefabs > Xyz to open it in Inspector, then go back to Assets > Materials > xyz and drag and drop the new material to Add Component section of Inspector
                          • Check in Preview Window
                          • Check in Scene under light (to check the normal map from a greyscale). Go to Assets > Prefabs > Xyz > xyz. Drag-and-drop into Scene. Press F to Zoom In
                        • Animation
                          • Segment/Clip an Animation and Import Animation into Unity 5 Mesh object
                            • Assets > Meshes > xyz (animation). Click file. Inspector > Animation
                            • Open animation to obtain Frame Times (i.e. from Maya). Select object to identify it has Key Frames on timeline for different motion sequences of Base and Bones. Note: Wire Parameters (i.e. in 3ds Max) to rig different objects (such as a large and small gear together such that the small gear does not have any Key Frames but rotates at a fraction of the speed). Open Mini Curve Editor to check where animation revolutions occur relative to Key Frames
                            • Inspector > Rename animation to be more descriptive (in Camel Case so it does not interfere with Unity Script)
                            • Inspector > Reduce the frame count so length only includes desired segment (i.e Start: 0, End: 100)
                            • Inspector > Animation > [Click "+" Button]. Add another segment of the animation frames (i.e. Take002; Start: 110, End: 210) 
                            • Inspector > Apply (Animations are Segmented for use in Mecanim)
                            • Assets > Meshes > xyz (animation). [Click Right Array] on file to Expand and show its elements plus Animation Segments/Clips (i.e. Take001, Take002) objects that may be called in a Unity Script
                          • Create associated Animator Controller and Open Animations in Mecanim
                            • Create new Animator Controller in Assets > Prefabs > Xyz > [Right-Click] > Create > Animator Controller. Rename it to match certain objects in Assets > Prefabs > Xyz. Note: The Animator Controller will be the controller for the Xyz animation
                            • Attach Animator Controller to the actual Prefab object. Open Assets > Prefabs > Xyz > xyz. Inspector > Animator > [Click Round Button on left], select xyz (as the Animator Controller). Alternative is to just drag-and-drop.
                            • Open Prefab in Mecanim to attach Animation Segments/Clips onto itAssets > Prefabs > Xyz > xyz (Animator Controller) [Double-Click] OR Window > Animator
                            • Drag in Animations from Assets > Meshes > xyz (animation). [Click Right Array] into States of the Animator Controller with different Layers, Parameters, and Behaviours associated OR Animator Controller > [Right Click] > Create > Empty; Inspector > Motion >  [Click Round Button on left], select xyz (animations); Rename
                            • Set an animation as Default State that is transitioned to when the Entry State is triggered. [Right Click Animation Icon] (in Animator Controller) > Set Layer Default State
                            • Create Transition between different animations. [Right Click Animation Icon] (Default State animation in Animator Controller) > Make Transition; Drag to another animation icon to create transition (connection shown in Inspector > Transitions)
                            • Test in Scene to Verify the States work 
                              • Drag Prefab into Scene from Assets > Prefabs > Xyz > xyz (prefab). 
                              • Insert a Plane object below the Prefab (for PlayerController to fall onto when testing the scene): GameObject > 3D Object > Plane. Click the Arrows (of Transform Handle) in Scene to Move. Press W to Move Forward. Press and Hold V to snap onto vertex
                              • Drag FirstPersonCharacter into Scene from Assets > Standard Assets > Characters > FirstPersonCharacter > Prefabs
                              • Click "Play" Button to test
                              • Note: Animations for a prefab configured to Loop in Inspector must be configured again separately to Loop in Mecanim
                          • Game Event to Trigger Animation using Mecanim Behaviour Trees
                            • Create a Spherical Volume to detect contact/collision between a prefab object and the Player. Select a Prefab (already in the Scene Hierarchy) > Add Component (in Inspector View) > Physics > Sphere Collider; Check "Is Trigger"; Change Radius value
                            • Create Transition in Mecanim to start with a Blank/Motionless State before subsequent transitions to other animations. Open Animator Controller. Animator Controller > [Right Click] > Create > Empty; Inspector > Motion > None. Set as Default State that is transitioned to when the Entry State is triggered. [Right Click Animation Icon] (in Animator Controller) > Set Layer Default State. 
                            • Parameter setup to listen for a Trigger to change States when Player Enters collision with prefab object. Change from Layer Tab to Parameters TabPress "+" Button > Bool (Unchecked means value of "False"). Rename the parameter. Click the Transition Arrow between Default State (Stopped) and first Animation (Startup) and Inspector > Settings > Add "Condition" > Abc (parameter) with value of "true" (to be triggered via a script applied to the the objects Spherical Volume). Blend Animations together. Click the Transition Arrow between first Animation (Startup) and second Animation and view Inspector > Settings > Graph
                            • Parameter setup to listen for a Trigger to change States when Player Exits collision with prefab object. Click the Transition Arrow between second Animation and Default State (Stopped) and Inspector > Settings > Add "Condition" > Abc (parameter) with value of "false"
                            • Preview Window to watch the currently selected Transition in Mecanim
                          •  C# Script with Conditions to Modify Animation Parameters upon Trigger
                            • Create New Script (C# or JS) in MonoDevelop (Unity IDE)
                              • Note: Example scripts included in Add Component > Scripts
                              • Note: Other languages include ShaderLab language (shading and material language) and Boo language (Python variant)
                              • Select a Prefab (already in the Scene Hierarchy) > Add Component (in Inspector View) > New Script > Rename & Select Language (C# or JS)
                      using UnityEngine;
                      using System.Collections;

                      // NOTE:  'private' not appear as checkbox in Components section of Inspector UI
                      public class MyPrefab : MonoBehaviour {
                          public bool MyTrigger; // Reference Animator Parameter to trigger state
                          private Animator anim; // Reference Animator Controller component
                          private GameObject player;

                             // Initialisation when start game
                          void Start() {
                          }

                          // Called once each frame
                          void Update() {
                              anim = GetComponent<Animator>(); // Check the Animator Controller component
                          }

                          // Called when enter the Spherical Collider (of the prefab object)
                          void OnTriggerEnter(Collider other) {
                              anim.SetBool("MyTrigger", true);
                          }

                          // Called when exit the Spherical Collider (of the prefab object)
                          void OnTriggerExit(Collider other) {
                              anim.SetBool("MyTrigger", false);
                          }
                      }
                          • Attach C# Script to Game Object
                            • Drag-and-drop the C# Script to the Add Component section of the Game Object's Inspector View
                          • Preview in Scene (to check that moving to and from the prefab object Spherical Collider triggers C# script and fades animation clips as defined in Animator Controller)
                        • Animation Natively in Unity 5
                          • Create Animation Controller for a Prefab in Assets > Prefabs > xyz. [Right Click] > Create > Animator Controller. Rename xyz. Click xyz Prefab. Drag the new Animator Controller xyz onto Animator of xyz Prefab. Drag xyz Prefab into Scene. Press F to frame. Inspector > Add Component > Physics > Sphere Collider. "Is Trigger" checked.
                          • Create Animation for Prefab in Animation Editor (wither curve / dope sheet). Open with Window > Animation
                            • Create Animation File in Dope Sheet. Click "red" Animation Record Button. Rename xyz.anim (reusable animation) and Save. Click Add Property to animate the Root Transform of the object xyz, the Sphere Collider, and the Animation Controller associated. Expand xyz > Transform; Click "+" next to Position to animate that Property (adds a Position Track for xyz object with default for two Key Frames at 0 and 1 second and no movement between). Drag Key Frame 1 second if required. Open Scene and Drag xyz object by Click and Drag the coordinate direction Arrow (Transform Handle). Back in Animation Editor perform horizontal scroll arrow to say 10 seconds and Click. Click icon to Add Key Frame to allow movement up to this timeframe. Perform another horizontal scroll array to say 15 seconds and Click, Add Key Frame, and Open Scene again and Drag xyz object back to its original position again. 
                            • Save Animation by Click "red" Animation Record Button again. Final animation may be then triggered with a Script to cause the object to transition from Closed/Open/Pause/Closed
                          • Adjust Animations of Prefabs with Curve Editor (of the Dope Sheet)
                            • Select object in Scene Hierarchy. Window > Animation. Drag Key Frame across timeline to preview the animation OR Press Play icon.
                            • Click "Curves" Tab (at bottom of Animation Window instead of Dope Sheet). Click a Property (to adjust Key Frames in X, Y, and Z axis). Click Key Frame and adjust handles OR adjust Tangent Type of Key Frame.
                            • Create Constant Key Frame in middle of a bell curve. [Right Click] on Key Frame > Right Tangent > Constant (instead of Auto) to flatten the bell curve along the timeline to the right until it curves back again (retaining a Handle on the left side). Repeat for the right side. 
                            • Note: To disassociated Left/Right for independent adjustment then [Right Click] on Key Frame > "Broken". 
                            • Note: To ease the motion choose "Flat"
                            • Note: If gaps appear then use "Linear" instead of "Constant"
                            • Note: Drag the Handle to change motion transition between Key Frames to gradual or sudden after first enabling this with [Right Click] on Key Frame > Left/Right Tangent > Free
                        • Terrain Considerations
                          • Openness of spaces relative to lighting and shading
                          • Default Terrain Size (500m sides) requirement. Scaling down Terrain Size to suit Objects that Populate the Terrain. Sculpting and Painting the Terrain
                        • Terrain Development Approach
                          • Sculpting Terrain
                            • Create New Terrain: Game Object > 3D Object > Terrain
                            • Frame the Terrain: Press F
                            • Change Resolution: Inspector > Terrain > Settings (icon) > Resolution > Terrain Width / Length / Height
                            • Position and Sculpt: Select Terrain; Press W (Move Forward); Drag to Approx. Position; Press V (Snap). Drag Below Position (to reduce Clipping and with allowance above to Sculpt and Contour);
                            • Turn Off Grid: Scene Menu > Gizmos > Show Grid (Deselect)
                            • Turn Off Reflection Probes: Inspector > Terrain > Reflection Probes (Off)
                            • Check Current Terrain: Inspector > Terrain > Base Terrain > Materials > Built In Standard
                            • Optional: 
                            • Custom Terrain by Importing a baked out Height Map: Inspector > Terrain > Settings (icon) > Height Map (greyscale 16-bit raw file defining height of terrain and landforms i.e. from geological survey applications)
                            • Sculpt Terrain Iteratively (block layer then refine for detail): Inspector > Terrain > Raise / Lower Terrain (icon)
                              • Scene Drop-Down Menu > Shading Mode > Shaded Wireframe (make wireframe visible for easier Sculpting)
                              • Block Sculpting using Large Soft Brush having Low Opacity. Press and Hold "Shift" to Lower Terrain
                              • Refine Sculpting using Dots or Spatter Brush
                          • Painting Materials and Colour Textures for Natural Terrain
                            • Create Custom Terrain Material: Assets > [Right Click] > Create > Material > xyz
                            • Select Material. Open xyz: Inspector > Shader > Nature > Material > Terrain > 
                              • Standard (Default)
                              • Diffuse (for Platform use with Minimum Rendering)
                              • Specular (for Platform use with Minimum Rendering)
                            • Import Custom Terrain Materials (Custom Environments including foliage): Assets > Standard Assets > [Right Click] > Import Package > Environment (i.e. SpeedTree Broadleaf, Branches, Leaves, Conifers, Palms, and TerrainAssets such as Water, and Grass. Materials in .mat format and in .tga for Desktop and Mobile downloaded from Unity Store)
                            • Note: 
                              • SpeedTrees (3rd Party App) may be used to create Trees
                              • Tree Creator (3rd Party App) may be used for Bark and Leaves (Transparency)
                            • Warning: Do not import all packages except those necessary
                            • Paint Textures onto Terrain (i.e. grass, mud, etc): 
                              • First Texture Layer (over Entire Terrain):
                                • Inspector > Terrain > Paint Brush (icon)
                                • Inspector > Terrain > Edit Textures > Add Texture > Click "Select" for each of Albedo (RGB), Smoothness (Alpha), and Normal, and choose a Texture2D from list of textures in folder Assets > ... . Reduce the "Size" to improve the resolution (detail)
                                • Note: Some Textures in Environment Package may not come with an associated Normal
                              • Second Texture Layer
                                • Repeat above and choose different Texture2D (i.e. rocks/mud instead of grass)
                                • Select Texture to Override the First Texture Layer with
                                • Select Brush (Choose Brush Size to sync with First Texture Layer, with Opacity, and Target Strength)
                                • Iteratively Paint the Texture in Layers over the First Layer. Increase Opacity and Target Strength with each iteration. Camoflage areas of First Texture Layer that are disproportionately stretched.
                            • Add Foliage (i.e. trees to obstruct sun with shade) 
                              • Inspector > Terrain > Tree Tool (icon)
                              • Inspector > Terrain > Edit Trees > Add Tree > Tree Prefab (Standard Mesh Prefab with Colliders and Alpha Channels or Alpha Card Leaves). Click Add
                              • Select Tree (icon). Zoom Out to view brush in scene (tinted blue). Reduce Brush Size. Increase Tree Density. Adjust Colour Variation. Select Random Tree Rotation (Checkbox) and Random Tree Height (Checkbox). This will apply different trees across the terrain that pull from only one or more meshes.
                              • Click on Terrain to Place a Tree (where "blue" tint of placeholder appears)
                            • Add Paint Details (i.e. tall grass mesh on border of terrain and other objects, dirt sculpted between terrain and tree prefabs
                              • Inspector > Terrain > Paint Details (icon)
                              • Define Detail Objects: Inspector > Terrain > Edit Detail > Add Grass Texture (to wave in wind) > Select Detail Texture and Adjust Parameters for Width / Height / Colour
                              • OR Define Detail Objects: Inspector > Terrain > Edit Detail > Add Detail Mesh > Any Object (i.e. Bush, or anything)
                              • Note: Billboard Parameter when ON means always facing the camera
                              • Paint the detailed grass texture over sections of the existing grass (using Scatter Brush with Reduced Opacity i.e. 0.001 and Target Strength to avoid clumps since its meant for large scale application). Press and Hold Shift to Erase/Trim (using High Opacity)
                              • Test by Dragging FPSController from Scene Hierarchy into the Scene to nearby position (check grass waves in wind). Check where additional sculpting and paint coats with colour adjustment required, additional materials to overcome monotonous textures, and opportunities for other terrain objects such as rock models or reduction in existing texture strength, correction of proportions, or more or less elevations
                            • Iterate
                            • Add Other Detail Meshes to Customise Environment/Climate
                              • Download from Unity Assets Store: Window > Asset Store (i.e. Example Packs, Complete Projects, SpeedTrees Packages, etc)
                        • Lighting
                          • Note: Colour contrast and patterns invokes mood and feelings of player depending on lighting locations and configuration and other prefabs that distort the light rays to guide the player and set the tone whilst removing monotony (i.e. light filling room causes happiness, light beams scared and not extend to shadows). Consider lighting and cameras as actors of a cinematographer.
                          • Ambient light should crawl along places and light beams should stab into spaces to guide the player
                          • Daylight Adjustment
                            • Directional White Light (Sun)
                              • Adjust Position and Angle
                                • Select "Directional Light" in Scene Hierarchy. Move to best Position. Rotate Direction Only (infinitely wide) to achieve most power in shaping the Shadows and geometry of illuminated shapes and patterns from the light beam strength and reflections. Press E (rotate) and Zoom
                              • Adjust Colour, Intensity, and Reflection
                                • Directional Light > Inspector > Colour > Toggle values of RGB and Hue / Saturation / Value Scale (HSV) (i.e. Warm Light with Orange Red and only some Hue (Dim)
                                • Directional Light > Inspector > Intensity
                                • Directional Light > Inspector > Bounce Intensity (amount of light colour bounced by reflection onto other surfaces)
                              • Adjust Shadows (if any to constrict space or to supplement the weather)
                                • Directional Light > Inspector > Shadow Type (soft for ambient or hard shadows for more direct lighting)
                              • Apply Cookies (dappled shadow patterns for directional light such as dappled leaf shadows or general cloud shadows)
                                • Directional Light > Inspector > Cookie
                            • Ambient Blue/White Light (Skybox) (uses Enlighted Engine for real-time baking)
                              • Window > Lighting > Scene (tab) > Environment Lighting > Skybox. Note: Skybox is always-present read-only Procedural Lighting that may be overridden by additional Skyboxes (i.e. dusk tone)
                              • Create New Skybox: Assets > Materials > [Right Click] > Create > Material. Rename. Change the Shader: Inspector > Shader > Skybox > Procedural (wrap-around). Adjust the Shader Colour: Atmosphere Thickness (bounce light in sky); Tint (warm colour by adding orange); Exposure (lower to dim); Ambient Intensity (lower to dim so other lighting sources may contribute); Reflection Source (i.e. custom Cube Map if desired); Reflection Intensity (lower to dim so other reflection probes inserted may contribute to overall lighting). Global Illumination (light baking setup after all lighting configured)
                          • Point Lighting (Cylindrical shaped light, general fill to revive normals particularly in shadow areas)
                            • Create Point Lights: GameObject > Light > Point Light; Adjust Range
                            • Position Point Light (to complement the sun)
                            • Clone Point Light (multiple point lights for each object to bring out their value, particularly shadows from the sun and for baking, with pattern of light and dark spaces). Press CMD + D
                            • Adjust Point Light Settings (to complement warm sun): Select Multiple Point Lights (in Scene Hierarchy > Inspector > Light; Cool Colour (Light Blue + Minor Saturation); Intensity (i.e. subtle bounce of either Dim, Dark Gray Lights, Dim White Lights, Near Black Lights, etc); Shadows (consider ignoring shadows for theatrical lights that cast emotions on player)
                            • Note: Modular design with many smaller elements and with reuse of prefabs and just a few lights each is easy on game engine for processing (rather than large element with many lights)
                            • Note: Reserve Reflection Probes and Light Probe Groups until the scene lit
                          • Spot Lighting (Cone Shaped lighting, alternative to signage to guide player and to simulate artificial lighting)
                            • Create Spot Lights: GameObject > Light > Spot Light; Adjust Range and Angle
                            • Switch View of Scene from Perspective to Isometric (top right corner of scene to switch viewports around); Colour (select warm colour with Hue and Save As Preset to contrast with the other cool coloured lighting)
                          • Area Lighting (large light source that is from an area/volume but not a from a point for use in a bake on static objects that do not move such as smaller spaces to produce trapezoidal lighting shapes i.e. hallways) 
                            • Create Area Lights: GameObject > Light > Area Light; Adjust Scale by Drag object Side Handles in scene; Check that Directional Vector is facing downward; Colour (Warm)
                            • Add Geometry and configure Area Lights to cast Vacant Space (i.e. to simulate effects of a matrix of office lighting)
                          • Culling Mask to Shield objects from Lighting and Optimise Lighting for Gameplay (where we prevent certain lights from hitting certain objects or modular areas in our modular approach with multiple objects each only requiring a few lights to allow organising scenes by Layers i.e. instead of just limiting lighting by their Range, we can add Culling Mask to say the Sun so it cannot hit a hallway that represented by a Layer)
                            • Purpose: Cull lighting to prevent lighting touching some objects (i.e. limit some spot lights from hitting a ceiling where they have been placed facing downward, so different lights may be used to perform uplight)
                            • Create Layers to Limit Lighting: Select All Ceiling objects in Scene > Inspector > Layers > Add Layer > User Layer X (Rename value to say "Ceiling")
                              • Add Lights to "User Layer X"
                              • Configure Objects to not be hit by "User Layer X" lights
                            • Apply Culling Mask to Lighting: Select All Spot Lighting attached to ceiling > Inspector > Light > Culling Mask > Uncheck "Ceiling" (prevents light from hitting ceiling layer polygons)
                            • Readjust Lighting: Since ceiling not illuminated by ceiling lights (only ambient lighting) we can increase the intensity of the them
                          • Enlightened "Real-Time" Lighting Engine Participation by Tagging Static objects (real-time baked lighting so when change anything the lighting including lighting bounce changes to suit)
                            • Tag Objects to Automatically Participate in Global Illumination (GI) on Real-Time Light Baking Updates: Filter (by name) objects in Scene Hierarchy & Select All > Inspector > Static (Checked)
                            • Select Lighting objects > Inspector > Light > Baking > Realtime [Realtime / Baked (pre-calculated) / Mixed]
                            • Switch Lighting objects from a value of "Realtime" to "Baked" (where real-time not deemed necessary) such that it only builds the light for the "baked" objects and the light will only hit objects marked as "Static" in the bake as they may not affect any Dynamic objects (to reduce burden on the game engine with less lights participating in the bake)
                            • Note: Moving Objects are Dynamic (Not Static) and instead require Light Probes and Real-Time Global Illumination (GI) 
                          • Adjust Global "Real-Time" Lighting Parameters
                            • Window > Lighting > Scene (reaction of entire scene to lighting)
                              • Ambient Intensity
                              • Ambient GI (set to Realtime)
                              • Precomputed Realtime GI
                              • Baked GI (pre-calculated baked lighting on Static objects)
                                • Baked Resolution (unwrapping of light map UVs of each object)
                                • Baked Padding (mapping and spacing of each object)
                                • Ambient Occlusion (bake based on geometry instead of screen space) (set Scene Units associated with the Real Scene Size). Max Size (only objects that are the Max Size or less away from each other will cast ambient occlusion)
                                • Note: Incorrect distance possible when not using the real scale that results in spreads of darkness over objects.
                                • Final Gather (Checked) with Ray Count (1024)
                              • General GI
                                • Continuous Baking (Checked)
                                • Note: This cause under the Inspector to show "Bake Direct: x jobs" to signify that rebaking is occurring in the background when changes in scene occur
                                • Indirect Intensity (global controls for scene lighting bounce i.e. colour reflections)
                                • Bounce Boost 
                              • Fog > Mode
                                • Note: Fog of chosen Colour (i.e. gray) is a Level Design Element that fades in to cause a haze in the scene to darken bright colours and brighten dark objects in the background and as a strategy to highlight closer objects to draw the player into the scene with a sense of unknown
                          • Adjust Local Lighting Parameters (defining the participation of each object in light baking and allotment of the overall Lightmap to fix jagged issues or artifacts in lighting due to insufficient resolution)
                            • Select object(s) in Scene
                            • Window > Lighting > Object > Mesh Renderer > 
                              • Size of object in Lightmap
                              • Configure Calculation of object-Level Lighting
                              • Preview > Drop-Down Menu > "Charting" (displays object fit within Lightmap UVs)
                                • Scale In Lightmap (changing this value to rebake the lighting with increase/decrease proportion of lighting from the overall Lightmap that is devoted to the object and is reflected on an updated Chart, providing that object with a higher/lower resolution on the Lightmap of bounced lighting)
                              • Important GI (when Checked prioritises lighting this object over others)
                              • Note:
                                • Preview > Drop-Down Menu > "Albedo" (locations where lighting sits on objects)
                                • Preview > Drop-Down Menu > "Emissive" (emitting light or appearing lit)
                                • Preview > Drop-Down Menu > "Real-time Intensity" (locations where real-time lighting sits)
                                • Preview > Drop-Down Menu > "Real-time Direction" (where light comes from) 
                                • Preview > Drop-Down Menu > "Baked Intensity" (requires build lighting separately to occur first)
                            • Window > Lighting > Lightmap > Lightmaps appear after baking
                            • Note: Playing the scene may be lagged whilst lighting is still baking. Turn off "Continuous Baking" if Editor workflow in development lags too much (in Window > Lighting > Scene)
                          • Dynamic object Lighting using Light Probes (since they should not be participating in baked lighting of the "Static" objects but still need to appear to match with them in the scene)
                            • Light Probes Dfn: Network of probes around an object to sample the lighting to cause the lighting to appear like its changing dynamically in sync with baked static objects
                            • Select object > Inspector > Mesh Renderer > Light Probes (Checked)
                            • Select object > Inspector > Add Component > Renderer > Light Probe Group (creates a connected web of 8 OFF joined light probes that the object will use to dynamically interpolate with the baked lighting) > Click "Select All"
                            • Press F (frame in)
                            • Move each probe into a position (surrounding the object volumetrically) so this "Dynamic" object can draw from them after we bake the lighting for other "Static" objects and give it the appearance of "Dynamic" changing lighting (so it matches the rest of the scene)
                            • Play the Scene (after baking has finished processing). Check that specular highlights are picked up by moving objects and that they blend in with surrounding contrast and brightness
                              • Identify objects that are not participating in the overall lighting properly as they have not had baked lighting (static objects) or light probes (dynamic objects) configured. Such objects have different brightness as light has not been calculated and correctly bounced
                          • Reflections (use judiciously to match colours in the scene and compliment the material, and scene effects such as fog, where there are expanses of shiny surfaces by mixing between "Static" baked and use of "Dynamic" real-time Reflection Probes that blend whilst minimising the impact on gameplay with focus on positioning near the player only if possible)
                            • Temporarily Turn Off:
                              • Gizmos Drop-Down (top of scene) > Lights (Uncheck)
                              • Gizmos Drop-Down (top of scene) > Light Probe Group (Uncheck)
                            • Configure an object to Respond to Reflection Probe: Select object > Inspector > Mesh Renderer > Reflection Probes > Blend Probes and Skybox (if sufficient object surface facing them)
                            • Add Reflection Probe to object: Select object > Inspector > Add Component > Renderer > Reflection Probe
                            • Calibrate Reflection Probe: Default Spherical Projection (for curvy objects) with Intensity and Size (i.e. mirror, small reflection of scene colours, bright or dark reflections)
                            • Edit Box Projection Bounds (for squarish objects): Select object > Inspector > Reflection Probe > Box Projection Bounds (icon). This adds to the scene a yellow sphere with centre points similar to a box collider that may be fine-tuned by pulling the sides of the box projection inwards toward the object for limited reflection extent (not want to reflect entire scene)
                            • Test: Inspector > Reflection Probe > Runtime Settings > Box Projection Bounds (Checked)
                            • Check Location of Box Projection Bounds: Select object > Inspector > Reflection Probe > Move (icon). Note: Moving the Box Projection Bounds will also move the object
                            • Improve Quality of Reflection: Inspector > Reflection Probe > Cubemap Capture Settings > Resolution (consider size, quality of material, and Importance value of object against processing power)
                            • Exclude Reflection of some objects: Inspector > Reflection Probe > Cubemap Capture Settings > Culling Mask (Drop-Down) > Select any objects not to reflect (particularly processor intensive ones such as particles)
                            • Note
                              • Inspector > Reflection Probe > Type > Baked (reflection probe baking automatically updates) (Sample Once, "Static", but appear to move "Dynamically" when Reflection Probes used)
                              • Inspector > Reflection Probe > Type > Real-time (shiny objects requiring sampling for real-time reflection, but with high processing power)
                                • Refresh Mode: (Sample "Dynamically") On Awake / Every Frame / Via Scripting
                            • Play Scene to Test (check scene tone reflected, and the spread and smoothness of reflection)
                        • Particle System Effects (i.e. jets of steam, dust in air, power sparks, birds in distance)
                          • Add Particle System (Ambient Animation): Game Object > Particle System > (Configure Speed and trigger to Play)
                          • Temporarily Turn Off:
                            • Gizmos Drop-Down (top of scene) > Reflection Probes (Uncheck)
                            • Gizmos Drop-Down (top of scene) > Light Probe Group (Uncheck)
                          • Adjust Spawn Point of Particles: Change Size of Emitter in Scene (Click Cone, Press Shift, and Drag
                          • Change Emitter Shape: Inspector > Shape > Shape (i.e. Sphere emits in All Directions, whilst Cone emits out of cone)
                          • Adjust Behaviour of Particles (before appearance): Adjust Speed of Emission, Looping, Duration, Prewarm (start emission so in full motion by time player visual occurs) (i.e. random colours and transparency/opacity over lifetime using Gradient Editor curves for gases, shapes for insects)
                            • Size Over Lifetime: Drag Curve into desired shape (bottom and top)
                          • Note: Less concern with individual particles generally when higher quantity of particles, only care for group behaviour motion, shape silhouette, and colours
                          • Adjust Forces
                            • Colliders (cause particles for bounce from other objects)
                            • Sub Emitters (particles spawning at different points)
                          • Adjust Appearance (Prefab Instances)
                            • Apply a Material: Go to Assets > Materials > [Right-Click] > Create > Material. Rename
                            • Configure Material: Inspector > Shader > Particles / FX (adopt any texture with Alpha)
                            • Import Package of Textures (for Particle Systems): Go to Assets > Materials > [Right-Click] > Import Package > Particle Systems (i.e. smoke, splashes, sprays). Filter. Rename
                            • Create a Material with a specific Texture: Select material > Inspector > New Texture > Select an Imported Texture (preferably with Alpha / transparency) and inspect in Preview Window
                            • Apply Texture to Particle System: Drag Texture onto the Particle System in the scene
                            • Create Prefab from Particle System and Clone for consistent Instances
                          • Iterate
                        • Optical Effects for Camera (apply a lens with bloom, colour correction, Depth of Field)
                          • Image Effects
                            • Import Package of Effects (for Particle Systems): Go to Assets > Materials > [Right-Click] > Import Package > Effects (i.e. refractive glass). Filter. Rename. 
                            • Note: This creates a folder: Assets > Standard Assets > Effects
                            • Apply Effect (Depth of Field) to Camera (i.e. degrade player view with areas of focus and blur)
                              • Select FPSController in Scene Hierarchy; Expand FPSController to reveal and Select FirstPersonCharacter Prefab (the "Camera" where Image Effect is applied)
                              • Inspector > Add Component > Image Effects > Camera > Depth of Field (i.e. depending on focal distance and focal size aperture)
                              • Note: Depth of Field is in units of meters (building with real-world scale important)
                              • Inspector > Depth of Field > Reduce Focal Size; Adjust Aperture; Apply Near Blur (defocus objects outside immediate Focal Plane field of view)
                              • Inspector > Depth of Field > Visualise (when Checked it highlights what is and is not in focus in grayscale)
                              • Inspector > Depth of Field > Defocus Type > DX 11 > Bokeh Texture (shape) (potentially high processing power with high draw calls)
                            • Apply Effect (Glow / Bloom) to Camera (i.e. dazzle player camera with glow on specular highlights, as it combines brightness, contrast, and blur)
                              • Select FPSController > Inspector > Add Component > Image Effects > Bloom and Glow (i.e. glows and object above a certain intensity with subtle blur)
                              • Note: Bloom (Optimised) has HDR option
                              • Adjust Threshold value so only bright areas glow (add warmth and highlight the contrast in lighting without losing colour by clipping completely to white); Adjust Intensity of glow
                            • Check Statistics 
                              • Scene > Stats (top right corner) > FPS
                          • Ambient Occlusion (i.e. image effect that is a screen space occlusion for instance to make ground-based objects appear more secured) 
                            • Select FPSController (in Scene Hierarchy) > FirstPersonCharacter Prefab > Inspector > Add Component > Image Effects > Rendering > Screen Space Ambient Occlusion > Radius (applies proximity shadows from to everything within the defined radius from each object so the scene appears more grounded with correct spread of darkness when an accurate scene size is used, and prevents nearby walls from darkening each other)
                            • Inspector > Screen Space Ambient Occlusion > Occlusion Intensity (spread darkness contrast and gloom over objects)
                            • Inspector > Screen Space Ambient Occlusion > Sample Count (increasing uses higher processing power but may prevent artifacts appearing or show more details)
                            • Inspector > Screen Space Ambient Occlusion > Min Z (modify distance from camera where occlusion sits in the screen space)
                          • Colour Correction (tune with final ~2% polish and unify appearance of game colour scene to evoke certain mood in player i.e. cool and blue, or hot and scary, or bright and happy and warm)
                            • Note: Adobe After Effects used in film to apply colour correction
                            • Add Colour Correction for Image Effects: Select FPSController (in Scene Hierarchy) > FirstPersonCharacter Prefab > Inspector > Add Component > Image Effects > Colour Adjustments > Colour Correction (Curves & Saturation) (adjust colour in curves by RGB)
                            • Inspector > Colour Correction Curves > Saturation (modify to increase vibrancy in colour)
                            • Inspector > Colour Correction Curves > Advanced > Curve (for RGB) (adjust say for fast-in or slow-in and use Drop-Down to switch curve between linear remapping Clamp, Loop, or Ping Pong, to complement any haze or fog)
                            • Play Scene to Test (check that warm colours remain close to player with haze in distance, identify where Antialiasing with Filters in Quality Settings required)
                        • Audio (global ambient noise and local sounds)
                          • Note: Use temporary sounds during development and trigger-testing for replacement later by Sound Engineer or Post-Production Group
                          • Ambient
                            • Remove Excess Audio Listeners (attached to player that functions like ears and listens to game sounds)
                              • Select "Main Camera" in Scene Hierarchy > Inspector > Audio Listener (Default) 
                              • Remove the Audio Listener attached to the Main Camera (so only one Audio Listener attached to the FirstPersonCharacter)
                            • Add Audio Source: Game Object > Audio > Audio Source (3D positional sounds from Unity). Rename
                              • Note: Reverb Zones shape sounds to a particular space
                            • Select AudioClip: Inspector > Audio Source > AudioClip (Select an Audio Clip from Assets > Audio)
                            • Reduce Attenuation: Inspector > Audio Source > 3D Sound Setting > Max Distance (zoom out to view spherical visual of sound fall off over distance)
                            • Adjust Doppler Level: Inspector > Audio Source > 3D Sound Setting > Doppler Level (change sound pitch relative to velocity of player movement)
                            • Move Audio to Position. Play to Test (check if adjustment of volume and drop off for the space is required)
                            • Adjust Audio Settings in an Audio Mixer (so audio source may be reused as a prefab)
                          • Trigger Audio from object Collider
                            • Add Audio Source to object
                              • Select object > Inspector > Add Component > Audio > Audio Source
                              • Inspector > Audio Source > Play On Awake (Uncheck)
                              • Inspector > Audio Source > AudioClip (Select a sound file)
                              • Inspector > Audio Source > 3D Sound Setting > Min Distance (sound maintains full strength before roll off quickly or slowly until the Max Distance)
                            • Modify C# Script to start Animation and Audio when Triggered
                              • Add line of C# to search for a Component on the Prefab object (to trigger playing the audio source when player enters the trigger volume sphere and stop playing when they exit the trigger volume)
                              • Note: When testing check if player starts within radius of objects requiring the radius to be reduced so not to prevent being triggered
                          void OnTriggerEnter(Collider other) {
                              anim.SetBool("MyTrigger", true);
                              GetComponent<AudioSource>().Play();
                          }


                          void OnTriggerExit(Collider other) {
                              anim.SetBool("MyTrigger", false);
                              GetComponent<AudioSource>().Stop();

                          }

                          • Reverb Zone (tuned reverberation for environment depending on material composition, size, and shape of the space i.e. echoey and loud with sound bounce, or small area absorbing sound with fast dissipation)
                            • Add Reverb Zone: Game Object > Audio > Reverb Zone (point in space with Min and Max Distance). Rename (i.e. "Reverb Zone - Xyz"). Zoom Out. Press W (to show transform handles). Observe spheres of two radii representing Min and Max Distance of where sound starts and stops being affected by reverb zone (to allow tuning of sound quality in different rooms by applying a separate Reverb Zone for each different space)
                            • Add Label for Reverb Zone (to organise) in scene by Changing to Reverb Zone Icon (for ease of identification since Reverb Zones not associated with other objects and have no physical presence in the scene): Inspector > Click the "icon" > Select a capsule colour (to represent Reverb Zones and allocates a Label shown in the scene)
                            • Inspector > Audio Reverb Zone > Reverb Preset (i.e. Cave, Mountains, City, etc) (tune sound reflection and decays, and high and low frequencies) Note: "User" Present allows customisation of reverb values
                            • Play Scene to Test (check if configuration working i.e. echo from footsteps and prefabs)
                            • Iterate
                          • Audio Mixer Tool (shape soundscape by tuning audio for different areas of the game. benefits: snapshots for reverting back to, add effects and different views)
                            • Create Audio Mixer: Assets > Audio > [Right-Click] > Create > Audio Mixer. Rename (i.e. XyzBlend)
                            • Select Audio from the Scene and attach Audio Mixer: Select Audio > Inspector > Audio Source > Output > Select "Master" of XyzBlend
                            • Adjust Sound: [Double-Click] XyzBlend (opens Master in the Audio Mixer tab)
                              • Lower the dB Level of XyzBlend "Master". Inspector > Pitch (Lower the value to slow-down and lower the ambient sounds to local sounds provide more impact)
                              • Click "+" for New Group (to add Effects) > Rename "EchoMix" Click Add > [Drop-Down] Echo
                                • Inspector > Adjust Delay, Decay, Wetmix, Drymix, etc (to produce echoes to compliment reverb zone)
                            • Select Prefab object from the Scene and attach Audio Mixer: Select Prefab > Inspector > Audio Source > Output > Select "EchoMix" of XyzBlend
                            • Play to Test
                            • Create Additional Audio Mixers for Prefabs with Audio (if their sounds become too muted): Assets > Audio > [Right-Click] > Create > Audio Mixer. Rename (i.e. AbcBlend)
                            • Select each Abc Prefab from the Scene and attach Audio Mixer: Select Audio > Inspector > Audio Source > Output > Select "Master" of AbcBlend (for subsequent balancing and applying echoing separately if required)
                        • Optimise Game Performance with Occlusion Culling (cull down what player does not see to smoothen gameplay experience to remove choppiness or lag)
                          • Best Practices (to improve performance)
                            • Prefabs implemented to reuse objects
                            • Economise polygons when designing objects
                            • Modular sizing of textures
                            • Limiting real-time lighting associated with baking
                            • Modular spaces (enclosed areas) to limit visibility through good Level Design to limit length of player view to reduce draw calls
                            • Level Design that between spaces applies zig zag / bending corridors that prevent the player from being positioned with view lines exposing more than one modular space at any one time
                            • Batching for reuse of prefab instances to draw once (avoiding repeated draw calls)
                          • Observe Overdraw View: Scene Drop-Down Menu > Shading Mode > Overdraw (allows user to view game with all objects accumulated as Unity draws in and layers objects together)
                            • Goal: Minimise the White areas in the Overdraw View (so avoid Unity having to draw objects in depth). Since single objects are initially shown Light Red and then turn White as more polygon layers are overlayed
                          • Apply Occlusion Culling
                            • Select an object > Window > Occlusion Culling
                            • Occlusion (instead of Inspector) > Object
                              • Occluder Static (whether it occludes other things)
                              • Occludee Static (whether it should be occluded by other polygons such that Unity will not draw from it if this is the case)
                          • Basic Bake
                            • Occlusion (instead of Inspector) > Bake
                            • Click "Bake" button (bottom right)
                            • Switch to Split Screen
                              • Drag "Scene" tab over to the left near "Hierarchy" (so "Scene" view appears on Left, and "Game" tab and view appears on Right)
                              • Zoom Out (of the "Scene")
                              • Press Play. 
                              • Move Player around 
                              • Important Note: Notice in the "Scene" that only objects that are visible to the Player are visible and Batched and loaded dynamically or disappear (through Batching objects) to reduce number of draw calls or regenerate again depending on what direction the Player faces. Notice Stats (i.e. FPS) improve
                          • Optimise Occlusion Volumes for Scenes
                            • Open Scene View
                            • Zoom Out
                            • Occlusion (instead of Inspector) > Visualisation
                            • Occlusion Culling Modal > [Drop-Down] Edit (View Occlusion Volumes is automatically checked)
                            • Adjust Occluder Volumes: 
                              • Occlusion Culling Modal > [Drop-Down] Visualisation > Turn On Portals and Visibility Lines
                              • Occlusion (instead of Inspector) > Bake > Reduce value of "Smallest Occluder"
                              • Click "Clear" Button (to clear the bake)
                              • Click "Bake" Button (to rebake the scene)
                              • Note: This will increase the density of wireframe cubes (more objects disappear in the occlusion culling visualisation as player moves around)
                          • Batching to Improve FPS (reduce amount of draw calls and data being shown in game to only that necessary by registering declarations of prefabs instances and reference back to them for Reuse, instead of redrawing each time)
                            • Edit > Project Settings > Player > Inspector (PlayerSettings) > Other Settings
                              • Static Batching (Checked by default) (i.e. prefab object instances are batched by declaring them once and then referencing back to them in future calls)
                              • Dynamic Batching (Checked by default) (i.e. dynamically batches prefab objects by checking what is seen by the player and respects occlusion culling by not loading objects that are not in field of view)
                            • Optimise Meshes by Preloading Assets
                              • Inspector (PlayerSettings) > Other Settings > Preloaded Assets (optimise size and priority)
                              • Inspector (PlayerSettings) > Other Settings > Optimise Mesh Data (Checked) (optimise mesh so anything drawn is clean)
                            • Play Game to Test
                              • Inspector (PlayerSettings) > Other Settings > Static Batching & Dynamic Batching (Turn OFF)
                              • Play Game: Stats (Turn On). Notice "Saved By Batching" (i.e. 5-10 draw calls) and "FPS" (i.e. 25)
                              • Inspector (PlayerSettings) > Other Settings > Static Batching & Dynamic Batching (Turn ON)
                              • Play Game: Note that "Saved By Batching" draw calls increase to ~1000 and FPS increase (since actively using batching to use references to prefab instances instead of initiating fresh draw calls when moving around)
                              • Note: Particle Systems using Alpha channels for transparency may be expensive
                        • Antialiasing (algorithm to smoothen the interface and remove staircase pattern that occurs between different objects)
                          • Add Antialiasing to FirstPersonCharacter: Select FPSController (in Scene Hierarchy) > FirstPersonCharacter Prefab > Inspector > Add Component > Image Effects > Other > Antialiasing
                          • Inspector > Antialiasing
                            • Technique (Console Antialiasing) (i.e. configuration for different platforms)
                              • SSAA (Screen Space Antialiasing), etc
                            • Edge Sharpness (increase for smoothen edges or lower causes fuzziness)
                        • Game Icon and Splash Screen
                          • Develop layered PSD in Adobe Photoshop using Screenshot from the game with overlayed Title Text. Save them as PNG
                          • Check Platform SDK and Unity Manual for Spash Screen and Icon Sizes for Mobile and Desktop
                            • i.e. Splash Screen (432x163px 24 bit)
                            • i.e. Game Icon (128x128px)
                          • Setup Icon and Splash Screen for Unity Build
                            • Create Folder: Assets > [Right-Click] > Create > Folder. Rename "Icons". Open Folder.  [Right-Click] > Import Asset > Select icon file for both Splash Scene (i.e. XSplash) and Game Icon (i.e. XIcon)
                            • Select XSplash > Inspector > Format > Truecolor (prevents compression of original image by Unity)
                            • Select XSplash > Inspector > Texture Type > Advanced > NonePowerOf2 (set to "None") (prevents changing the pixel size of the original image)
                            • Click "Apply"
                            • Select XIcon > Inspector > Format > Truecolor
                            • Click "Apply"
                          • Update Project with Icon and Splash Screen
                            • Edit > Project > Settings > Player > Inspector
                            • Drag XIcon into Default Icon placeholder
                            • Inspector > Click "Splash Image"
                            • Drag XSplash into Splash Image placeholder
                          • Override Icon and Splash Screen Images for Mobile
                            • Inspector > Click "Mobile" icon
                        • Override Textures Settings and Configure for Different Platforms
                          • Select a Texture > Inspector > Select a Platform icon > Check "Override for  X Platform"
                          • Check Texture Settings, Compression (such as in Build Settings), Mesh, and Scripts before Build
                        • Game Build and Publication
                          • Alpha Version (First Build)
                            • Check for hairline gaps in geometry and snapping
                            • Turn On visibility of any hidden objects
                            • File > Build Settings > Add Scenes to Build (if multiple); Select Platform; Click "Player Settings"
                            • Build & Run
                            • Test on specific Devices with matching Resolution configured
                          • Beta Testers 
                            • Game Testers, Bug Identification
                            • Test & Refine
                      • Game Level Design Considerations
                        • Player Encounters - Prefabs with Sphere Colliders and associated Scripts
                        • Player Bounding - Strategic placement of bounding and guiding prefabs
                      • Game Level Design Approach
                        • Build Level Layout Environment
                          • Plane for FPSController
                          • Prototyping (i.e. to block sunlight and what player can see) GameObject > 3D Object > ...
                          • Note: Build thickness in to avoid thick Game Elements that are expensive computationally and may produce undesired shadows
                          • Drag Instances of Prefab connections into Scene Hierarchy. Press F to frame
                          • Snap Game Elements. Press V and move position Transform Handle on mesh. Transform Handle repositions to default location (defined by icon above scene i.e. "Center" / "Pivot") after snapping
                          • Rotate (defined by icon above scene i.e. "Global" / "Local"). Press E + Hold CMD + CTRL + Drag an ?-axis Arrow (on Transform Handle)
                          • Clone Instances of Prefab connection. Press CMD + D. Drag and snap to others. Scene Drop-Down Menu > Shading Mode > Shaded Wireframe (make wireframe visible for easier snapping)
                          • Test with Play Button
                        • Variation in Game Element Placement
                          • Placement of FPSController, Geometry, Non-Player Characters, and Prefabs with Asymmetric Lighting (different Conditions)
                          • Combine Game Elements to cause Pattern Recognition by the Player (i.e. with Reasons such as to attract or warn their senses)
                          • Combine Game Elements (Archetypes) in different ways to create variety from small number of elements (i.e. use Factorial calculation to determine number of combinations and/or permutations that result when choose X elements from a set of Y Game Elements)
                        • Variation in Game Element Symmetry
                          • Asymmetric areas with Prefabs having different Rotations and Lighting with different sight levels to distract Player from noticing deviations in matching Modular Elements
                        • Bounding the Player with Subtle Guiding Path
                          • Prototyping (i.e. walls to block sunlight and what player can see) with:
                            • Add to scene with: GameObject > 3D Object > ... 
                            • Adjust Size with: Inspector > Transform > Scale
                            • Apply Textures by Dragging from: Assets > Materials
                          • Populate with Game Elements (i.e. swinging) Visual Barriers and Moving Obstructions to Guide Direction
                            • Add largest game elements first
                            • Rearrange game elements to be asymmetric (so do not line up by eye of FPSController spawn point)
                            • Modify Scripts to cause game elements to target the FPSController
                      • Unity Definitions 
                        • Ambient Occlusion - Blocking of bounced light by adjacent objects (proximity shadows / corner darkness)
                        • Animation
                          • Rigging Systems (3ds Max, Maya, Blender)
                        • Animator Controller - Associated with an object (i.e. Prefab) to access its Animations in Mecanim.
                          • Default State - Perform action when Scene starts
                          • Any State - Perform an Override action that may be triggered at anytime in an Animation
                        • Audio
                          • Audio Listener - Audio object (ears) applied to player to listen to audio in scene
                          • Audio Source - Audio attached to an object
                          • Reverb Zone - Zone defining the sound of a certain space (i.e. echoes)
                          • Bypass Effects - Audio that is maintained consistently (without echo or flanging)
                          • Bypass Listener Effects / Reverb Zones - Audio not distorted by staying true to original sound
                          • 3D Sound Setting - (i.e. Max Distance - Object projects the audio out to 20 metres when value is set to 20. The Audio Source is defined in the "blue" sphere in the Scene)
                        • Blend Shader - Used since lower weight use diffuse used for metals with more colour from the reflection
                        • Collider - Collisions interacting with an object or sub-object
                          • Mesh Collider - Collision with multiple polygons of object (most expensive computationally)
                        • Component - Different section(s) attached to Prefabs / Game Objects
                        • FBX
                          • FBX files contain objects for transfer from native 3rd party app (i.e. 3ds Max, Maya, Autodesk Motion Builder in MOBU format used for transferring models, UVs, and motion) scenes for importing into Unity 5 (since Unity 5 imports using the FBX format)
                        • Final Gather - Bouncing and regathering of indirect light (GI) and smoothes it out as part of a bake, where the Ray Count is the accuracy (higher quality in indirect lighting)
                        • First Person Controller (FPS) 
                          • Camera icon (with surrounding cone indicative of viewing direction)
                          • Capsule (defines player bounce to trigger physics upon collision with other Game Objects)
                        • Game Object - Components that live in a scene and appear in the Project Window hierarchy that may have other distinct Game Objects as children
                        • Global Illumination - Bounce of lighting and colour between adjacent objects
                        • Materials - Physically-based rendering system including shaders
                        • Material Types
                          • Texture Artist
                          • Texturing Modellers
                        • Model - 3D model with necessary Unity Components and data to be rendered
                        • MOS - Sets of colours for textures. Metallic, Occlusion, Smoothness, and Normal
                        • "Physic" Material - Added to Collider to defines in scene how object reacts to Physical Forces (i.e. bouncing, sliding) (different from a Shader) (i.e. define for stone, etc)
                        • Prefab Object - Copy of a Game Object that has been converted into a reusable asset (prefabricated object) that may contain a hierarchy of multiple Game Objects (i.e. models, scripts, character controllers, etc) with a Grouping of different types of Components attached to them (i.e. mesh, collider, components on object elements within the prefab, scripts, materials on object elements, lighting, audio). They may be imported as an Instance in the Scene one or many times (Reuse with Scripts). Changes to a Prefab change all its Instances. Prefab may be instantiated as a Game Object by dragging it from the Project Window into the scene. Prefabs are indicated by "blue" coloured text in Hierarchy View when selected.
                        • Reverb Zones 
                          • Sound quality of particular area (and distance away to still be heard)
                        • Texturing Process
                          • Modelling (Monochromatic Geometry)
                            • Check no Flipped Normals Issues
                            • Prepare UV Layout (guides 2D texture maps to 3D model in 3D software in single or multiple tiles)
                            • Check Surface Quality with a Simple Material
                              • Hide Different Materials
                              • Hide Shaders
                            • Painting Texture Maps Options:
                              • Output UV Guide from 3D software to Photoshop OR
                              • Paint Textures direct onto 3D geometry (ZBrush or Mudbox)
                            • Photographs for Reality
                              • Remove Lighting / Shadows in Photoshop (avoid conflicts between lighting baked onto photographs when lighting applied later in 3D scenes)
                            • Texture Mapping (Texture Types for Material Channels)
                              • Colour Maps (aka Diffuse Maps) (MARI) - Define surface colour for materials without lighting or shadow info
                              • Bump Maps  (CINEMA 4D) - Greyscale image pseudo-height map to create raised (lighter than 50% gray) and lowered (darker than 50% gray) surface details with no extra geometry and no affect on silhouette. Use Color Map as basis before create bumpy areas
                              • Displacement Maps (Mudbox / ZBrush / Maya) - Height map where displacement details affect the silhouette geometry. Created by baking them out from hi-res mesh in sculpting app then applying displacement to low-res version of the model (keeps mesh resolution manageable)
                              • Normal Map - Map defining direction geometry normals face to influence height and geometry illusions on the model based on and lighting angle of in-game real-time rendering
                              • Specular Maps (Mudbox / MARI / Maya- Map that controls shininess of different model areas (dark tones reduce specularity and light tones highlight). Create by adjusting levels or curves of Colour Map. Use for applying smoothness to a Texture when in the alpha channel
                              • Mask Maps (MARI- Combine multiple materials or textures on single object by defining which specific texture layer should be visible on the object as a blend with other layers or cut-out entirely (non-destructive changes to textures without modifying maps)
                              • Tiling Textures - Tile (repeat) smaller texture seamlessly across geometry. Avoid distortion without visible seams by using 3D program option to repeat edge pixels
                          • Prop Transformation
                          • Materials Application
                      • Unity File Structure and Naming Conventions
                        • Mesh - . / export /
                        • Textures - . / sceneassets / - Name textures for associated Objects and Location
                        • Animations - . / scenes / *.fbx
                        • Unity Shortcuts
                          • Panning - OPT+Mouse Drag
                          • Frame In - Press F (after Drag and Drop a Prefab / Game Object into scene and click scene)
                          • Play - (plays the game but requires a First Person Controller)
                          • Move View (Press W, S, D, or F)
                          • Snap together on Vertex Press and Hold V and move Transform Handle (Default Location of Transform Handle defined by icon above scene i.e. "Center" / "Pivot")
                          • Tumble Object (including in Animation Preview) - Alt + Left Mouse
                          • Rotate (defined by icon above scene i.e. "Global" / "Local")Press E + Hold CMD + CTRL + Drag an Arrow of ?-axis (of Transform Handle)
                          • Duplicate Game Elements (i.e. Prefab Instances). Press CMD + D.
                        • Unity Links
                        • Other Links

                        No comments:

                        Post a Comment