Game Project / Working with Unity

38
Game Project Unity Petri Lankoski aalto.fi

Transcript of Game Project / Working with Unity

Page 1: Game Project / Working with Unity

Game Project

Unity

Petri Lankoskiaalto.fi

Page 2: Game Project / Working with Unity

Getting Started with Unity

Getting Started

• Creating a new project– Select File -> New Project

• Write the project name• Select (at least) the following Packages to the project

– Character Controller– Scripts– Terrain Assets

• Click Create Project

Page 3: Game Project / Working with Unity

Getting Started with Unity

Anatomy of the Unity Project

Page 4: Game Project / Working with Unity

Getting Started with Unity

Navigating in Unity

Hand tool (shortcut: Q)- click-drag to move camera- ALT click-drag to orbit

camera around- CTR click-drag to zoom

Move tool (shortcut: W)

Rotate tool (shortcut: E)

Scale tool (shortcut: R)

On scene view:• F to zoom to selected object• Hold right mouse to enable

• ASWD movement• Q up, E down

Play Mode

Page 5: Game Project / Working with Unity

Getting Started with Unity

Anatomy of the Unity Project

Page 6: Game Project / Working with Unity

Getting Started with Unity

Working with the Scene

• Add in-build plane– Game Objects -> Create Other

-> Plane– Set Position <0,0,0>– Set Scale to <10,10,10>

• Delete Main Camera

Page 7: Game Project / Working with Unity

Getting Started with Unity

Making Movable Camera

• Hierarchy: select Main Camera• Project: Open Standard Assets / Prefabs• Drag First Person Controller to Hierarchy• Set Position to <0,2,0> if the First Person Controller

drops thought the Plane• (Save Scene: File->Save Scene)

Page 8: Game Project / Working with Unity

Getting Started with Unity

Making Movable Camera

Page 9: Game Project / Working with Unity

Getting Started with Unity

Adding Details

• Finder: Drop PlaneTexture.psd to Assets Folder

• Adding Details to Plane– Hierarchy -> Popup Menu -> Create ->

Material– Rename it to PlaneMaterial– Drop the PlaneTexture to the

PlaneMaterial– Drop the PlaneMaterial to the Plane– Try Transparent/Diffuse shader

• Texture should have transparency

Shader Texture

Page 10: Game Project / Working with Unity

Getting Started with Unity

Adding Details

• Light: Game Object -> Create Other -> Directional Light– Move and rotate the light in

Scene view or in Inspector

• Add cylinder on the plain; add material and texture to the cube

RotateMoveDrag with

mouse

Page 11: Game Project / Working with Unity

Getting Started with Unity

Adding Sounds

• Finder: drop a sound file to Assets folder• Add an Game Object to Scene• Drag and Drop the sound file to the Game Object

– Rolloff factor determines how fast sound fades when distance grows

Page 12: Game Project / Working with Unity

Getting Started with Unity

Adding Animated Model

• Finder: Drop the model (e.g., Abby.fbx) to Assets folder• Drag and Drop the model to Scene (or Hierarchy)

– Set Position <8,1.1,0)

Page 13: Game Project / Working with Unity

Getting Started with Unity

Test the Model

Page 14: Game Project / Working with Unity

Getting Started with Unity

Setting Up Bone Animations

• The Model Abby has different animations:– Idle: 1-200– Idle: 201-390– Idle Action: 391-660– Walk: 819-898– Etc.

• We need to split animations to use them in Unity

Page 15: Game Project / Working with Unity

Getting Started with Unity

Creating Prefab

• Create a New Scene– File -> New Scene

• Add Plane and scale it bigger (x & z)• Rename “Abby” to “Abby Model” (project view)• Create Abby prefab

– Project Popup -> Create -> Prefab– Rename “New Prefab” to “Abby”– Drag-and-drop Abby Model to Abby

Page 16: Game Project / Working with Unity

Getting Started with Unity

Creating Prefab

• Adding control scripts to Abby– Drag-and-drop ThirdPersonController to Abby– Change values of CharacterController of Abby

• Height: 1.7• Radius: 0.3

– Add animations to the scripts

• Add SmootFollow to Main Camera• Drag-and-drop Abby to Scene view

– Make her stand on the plain

• Drag-and-drop Abby to Main Camera/SmoothFollow/Target

Page 17: Game Project / Working with Unity

Getting Started with Unity

• xx

Page 18: Game Project / Working with Unity

Getting Started with Unity

• xx

Page 19: Game Project / Working with Unity

Getting Started with Unity

Adding New Animation Control

• Create new C# script AbbyAnim• Attach the script to Abby (on Scene view)• Add idle action animation clip to the Abby/AbbyAnim• Apply changes to prefab

More about character animation, http://unity3d.com/support/documentation/Manual/Character-Animation.html

Page 20: Game Project / Working with Unity

Getting Started with Unity

public class AbbyAnim : MonoBehaviour {private Animation _animation;

public AnimationClip action;

void Awake() {_animation = GetComponent(typeof(Animation)) as Animation;

if (! _animation) { Debug.LogError(“…”); }

if (! action) { Debug.LogError(“…”); return;}

_animation[action.name].wrapMode = WrapMode.Once;

}

Page 21: Game Project / Working with Unity

Getting Started with Unity

…void Update() {

if(Input.GetKey(“z”) {_animation.Play(action.name);

}

}

}

Page 22: Game Project / Working with Unity

Getting Started with Unity

Mono Behavior

• Can be attached to game objects• Unity Calls MonoBehavior• Initialization

– Awake(): called for every MonoBbehavior – Start(): called for every MonoBehaviour after all the Awake()s

• Game Loop calls– Update(): called in every frame, most things happens here– LateUpdate(): called after every Update()s are exceted. Use for, e.g., follow

camera– FixedUpdate(): use for physics thing, e.g., RagDoll handling– OnGUI(), for GUI drawing, can be called several times in each frame

• Other useful things: Invoke(), InvokeRepeating(), StartCouroutine()

Page 23: Game Project / Working with Unity

Getting Started with Unity

User Interface

public class ExampleGUI : MonoBehaviour {

public GUISkin gSkin;

public string infoText = "”;

private bool showThingies;

void Start() {

if(gSkin==null) { Debug.LogError(“ gSkin is not set”); }

showThingies = false;

}

}

Page 24: Game Project / Working with Unity

Getting Started with Unity

User Interface…

void OnGUI() {

GUI.skin = gSkin; // Seting skin for changins how GUI looks in inspector

GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity,

new Vector3(Screen.width / 1280.0f, Screen.height / 854.0f, 1));

GUILayout.BeginArea (new Rect (1100, 750, 100, 100));

if(showThingies) {

if(GUILayout.Button ("Hide")) { showThingies = !showThingies; }

}

else {

if(GUILayout.Button ("Show")) { showThingies = !showThingies; }

}

GUILayout.EndArea ();

if(showThingies) {

GUI.Label(new Rect (600, 400, 200, 200), infoText, "blackBG");

}

Page 25: Game Project / Working with Unity

Getting Started with Unity

User Interface

• Create a game object for attaching GUI script– Game Object->Create Empty– Rename the new object to, e.g.,

GUI Cube• Drag-and-drop ExampleGUI

script to GUI Cube• Create GUI Skin

– Project -> popup -> GUI Skin– Drag and drop the skin to

ExampleGUI : GSkin

Page 26: Game Project / Working with Unity

Getting Started with Unity

User Interface

• Experiment with GUI Skin settings– Play to see how the settings changes GUI

Page 27: Game Project / Working with Unity

Getting Started with Unity

Models and Animations

• Characters– 15-60 bones

• Hierarchy!• Consistent naming (the same names for same type of things)

– 2500-5000 triangles

• Textures– Optimal size: 2nx2m (1x1, 2x2, …, 128x256, … 256x256, …,

256x1024, …, 1024x1024,)• In some cases SoftImage does texture optimizing

– Optimal size: small as possible• Older cards do not support over 1024x1024

Page 28: Game Project / Working with Unity

Getting Started with Unity

Material – Shader – Texture

• Material defines– Shader

• Defines method to render an object, texture properties, etc.– Texture(s)– Color definitions– Other assets

• E.g., cubemap required for rendering

Page 29: Game Project / Working with Unity

Getting Started with Unity

Models and Animations

• Object needs to be drawn for every of its texture– Object with 4 textures

will be draw 4 times– Combine textures in

SoftImage– Use different textures

only if you, e.g., need different shaders

• Unity and SoftImage have different shaders

• Use simplest possible shader in Unity– Opt for shaders without

bumbs, transparencies unless you use these

Page 30: Game Project / Working with Unity

Getting Started with Unity

Code Optimizing

• Keep Update(), FixedUpdate(), LateUpdate(), OnGUI() clean• Avoid object lookups, e.g., GameObject.Find() calls within these

– Cache lookup results when possible• Use MonoBehaviour.enabled to disable/enable MonoBehavior if

you do not want to execute Update(), …– MonoBehaviour.Invoke(), MonoBehaviour.InvokeRepeating()

and Couroutines are alternative to Update()• Functionality is not needed to execute in every frame

– E.g., use InvokeRepeating() to execute of function for every 0.5s

– Do not add empty Update(), FixedUpdate(), LateUpdate(), OnGUI() • Call overhead!

Page 31: Game Project / Working with Unity

Getting Started with Unity

Version Control

• External version control with Pro– Needs to be enabled from Edit->Project Settings->Editor– Set up the system:

http://unity3d.com/support/documentation/Manual/ExternalVersionControlSystemSupport.html

– CVS, Perforce, Subversion, …• Binary files, (textures, models, sounds) do not work work well with these

– Unity Pro project will be incompatible with Unity• DropBox as version control

– Drop the project folder to a DropBox folder to check in a version and vice versa– CVS, Perforce, Subversion for version control for scripts– Unity and Unity Pro projects will be compable

• Unity Pro only features will be automatically disabled in Unity

• Regular backup (e.g., zip the project folder)– Archive backups to have snapshop of the project to rollback

Page 32: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor

• Terrain->Create Terrain

More about Terrain Editor, http://unity3d.com/support/documentation/Manual/Terrains.html

Page 33: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor…

Page 34: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor…

Page 35: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor…

Page 36: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor…

Page 37: Game Project / Working with Unity

Getting Started with Unity

Terrain Editor…

Page 38: Game Project / Working with Unity

Getting Started with Unity

More Information

• Unity manual – http://unity3d.com/support/documentation/Manual/

• Unity scripting reference– http://unity3d.com/support/documentation/ScriptReference/

• Unity Scripts and Tips Wiki– http://www.unifycommunity.com/wiki/

• Unity Tutorials– http://unity3d.com/support/resources/tutorials/

• Lies and Seductions source code– http://mlab.taik.fi/~plankosk/blog/?p=308