SlideShare a Scribd company logo
 Ivanov Michael
 Lead Programmer R&D,Neurotech Solutions LTD
 Writer for Packt Publishing.,”Away3D Cookbook”
 Expert in Flex/AIR, Open Source Flash 3d engines.
 Spare time:Unity,UnrealEngine,OpenGL,Java3D
 Visit my tech blog:http://blog.alladvanced.net
 How many of you have never heard of Unity?
 How many of you are designers ?
 How many of you come from Flash/ActionScript background?
 How many of you programmed in Unity? What language?
 How many of you accomplished commercial projects with
Unity ?
 Unity engine API model
 Unity programming paradigm
 Scripting Languages
 Scripting practices
 Unity GameObject structure
 Examples walkthrough
 How to program(You should learn by yourselves)
 Level design(designers –sorry)
 Advanced programming
 Shaders
 Much more cool and important stuff because of time limitation.

P.S
For the rest of disclaimer please refer to:GNU General Public License
Stay tuned for Unity3D workshop announcement
Unity3D Programming
Audio Engine
Particle System Engine
Terrain Engine
Physics Engine
GUI System
Animation Engine
Network API
Shaders programmingAPI
Unity Engine Core
C#
JavaScript
Boo(Python)
ShaderLab,Cg,GLSL
Sealed
WindZone
LightCamera
Rigid Body Collider
Mesh Filter
Particle
Emitter
Audio
Source
Custom GameObject
Camera
FPSControl
ler
AudioListe
ner
GameObject
Shader Prefab Material
Script File AnimationAssets
Customized
Game Object
Components
(Resource Library)
UnityScript(JavaScript) MONO(C#)
Pros •20X faster than web JS
•Flexible coding(no need in data types
declaration, no class body explicit typing
required)
•Beginners friendly
•Well documented in Unity docs
•C family(fast adaptation for experienced devs)
•Strong typing
•Robust .NET Framework(Event Model,threads,structs and
more C# specific)
•External IDE software availability
•Piles of docs in theWeb
•Portability to other platforms
•DLL libs support
Cons •No explicit variable types declaration required
•iPhone builds are bigger than C#(additional libs
added)
•language specific restrictions: No multi-
dimensional arrays definition, no pass values by
reference into functions(needs workaround),no
Char data type , no multiple interface
implementation only one class or interface are
allowed to be extended
•Poor Even Model(custom approach is slow)
•Partial implementation of .NET(no virtual classes allowed,
no namespaces, limited multi-threading,Timer..
•Less documented in Unity docs
class MyClass extends MonoBehaviour {
var myVar = 1;
function Start() {
Debug.Log("hello world!");
}
}
class MyClass : MonoBehaviour {
public int myVar = 1;
void Start() {
Debug.Log("hello world!");
}
}
Java Script C#
Surprisingly you can write with both of them in one
project!(one way communication only)
Script
Script
Script
Script
Standard Assets
((Compiled first
My Scripts Folder(Outside)
(Compiled last)
C#JavaScript
Script
Script
Script
Script
Player
GameObject
Enemy
GameObject
WeaponPickUps
GameObject
GUI Module
GameObject
Script Script
Script
Script
Script
Script
Script
Script
(Main())GameObject
(Entry point)Script
ScoreManagerSoundManager LevelManager BackEndManager
Script ScriptScriptScript
using UnityEngine;
using System.Collections;
public class MyNewBehaviour : MonoBehaviour {
public static AudioClip playingClip;//////---accessible from outside to all
void Start () {
}
void Update () {///////// see also FixedUpdate
}
void OnMouseDown(){
}
void OnCollisionEnter(){
}
public void SpawnEnemy(){////////-------------------your custom method
}
}
“TF2 Dancing Spy” demo
FPSController
SceneManager
CharacterManager
AudioManager
GUIManager
Generic Scripts
VideoManager
LightProjector
AnimatedCamera ScriptsInit
DirectionalLight
TileManager
SpectrumReader
ProjectorTransformer
WallGenerator
Tile(dynamic add)
WallSyntezator
iTween
Utils
Spy
Monitor1
Monitor2
Monitor3
FPSControllerSceneManager
CharacterManager
AudioManager GUIManager
Generic Scripts
VideoManager
LightProjector
AnimatedCamera
DirectionalLight
TileManager
SpectrumReader
ProjectorTransformer
WallGenerator
Tile(dynamic add)
WallSyntezator
iTween
Spy
Animation
Button
Resources
MP3MP3
Generic Scripts
iTween
Monitor1
Monitor2
video
Hovermobile Demo
Fire Ball Demo
Unity3D Programming
 Time.time
 Time.deltaTime
 C# System.Timers.Timer
Update() and FixedUpdate()
FixedUpdate synchronized with Physics Engine steps while Update() runs on each
frame
Always use FixedUpdate() for physics!
F F F F F
0.1 seconds0.0 seconds
U U U U U U U U U U
 Time.time
 Time.deltaTime
 C# System.Timers.Timer
Update() and FixedUpdate()
FixedUpdate synchronized with Physics Engine steps while Update() runs on each
frame
Always use FixedUpdate() for physics!
F F F F F
0.1 seconds0.0 seconds
U U U U U U U U U U
TileManager tlm = tile.GetComponent<TileManager> ();
void locateAndAssignCams(){
camFPS=GameObject.Find("MainCamera");
camAnim=GameObject.Find("AnimatedCam");
}
Public variables reference.(Set via component interface)
•GetComponent:
•Find() ,FindObjectOfType(),FindObjectsOfType()
Light light = FindObjectOfType(typeof(Light));
if(AudioManager.spectrumData!=null&&AudioManager.spectrumData.Length>0){
currentSpectrum=AudioManager.spectrumData;
}
Direct access via static members
AudioClip aclip=(AudioClip)Resources.Load("Sounds/gagaSong");
_audioSource.clip=aclip;
playingClip=aclip;
_audioSource.Play();
Create object in runtime:
Instantiate Prefab
GameObject tile = (GameObject)Instantiate (tilePF,Vector3.zero, Quaternion.identity);
void Start () {
_light=new GameObject("Light1");
_light.AddComponent<Light>();
_light.light.type=LightType.Point;
_light.light.range=400;
_light.light.color=Color.red;
_light.transform.Translate(newVector3(1000,200,1000));
}
Dynamic resource assets loading
What are these matrices and vectors anyways?
Core Classes:
 Mathf .(Also C# System.Math )
 Matrix4x4
 Vector2/3/4
 Quaternion –all Rotations are Quaternion based
“In Physics Land talk Physics”
Core Classes:
•Physics- Global physics properties and helper methods.
•RigidBody-contains all essential physics methods and properties for a body
AddTorque()
RigidBody
SpaceCraft
GameObject
gravity
AddForce()
Colliders
AddForceAtPosition()
 Self attachment
_audioSource=gameObject.AddComponent<AudioSource>();
 Indirect attachment
GameObject tile = (GameObject)Instantiate (tilePF,Vector3.zero, Quaternion.identity);
AudioSource audioSource=tile.AddComponent<AudioSource>();
//adding audio source component to the tile and accessing it at the same time//
 Yield
Ensures that the function will continue from the line after the yield statement next
time it is called
Can’t be used inside “Time” methods like Update(),FixedUpdate()
 Coroutine
Suspends its execution until givenYield instruction finishes.
Requires a method to be IEnumerator
IEnumerator Start ()
{
print ("first");
yield return new WaitForSeconds(2f);
print ("2 seconds later");
}
Yield
using UnityEngine;
using System.Collections;
public class StupidLoop : MonoBehaviour{
private bool buttonPressed= false;
void Update ()
{
if(!buttonPressed)
{
if(Input.GetButtonDown("Jump"))
{
StartGame();
}
}
print("looping...");
}
void StartGame()
{
buttonPressed= true;
print("Game Started");
}
}
NoYield & Coroutines scenario(Ugly one)
void Start(){
StartCoroutine(WaitForKeyPress("Jump"));
}
public IEnumerator WaitForKeyPress(string _button)
{
while(!buttonPresed)
{
if(Input.GetButtonDown (_button))
{
StartGame();
yield break;
}
print("Awaiting key input.");
yield return 0;
}
}
private void StartGame()
{
buttonPressed= true;
print("Starting the game officially!");
}
}
Simple example
void Start () {
glEffect=GameObject.Find("Main Camera").GetComponent<GlowEffect>();
StartCoroutine("explodeCounter");
}
IEnumerator explodeCounter(){
onTimerElaps();
if(amount<15){
yield return new WaitForSeconds(0.01F);
}else{
Mesh myMesh = GetComponent<MeshFilter>().mesh;
GameObject.Destroy(myMesh);
yield break;
}
StartCoroutine("explodeCounter");
}
void onTimerElaps(){
amount+=Mathf.Sin(Time.time)/5;
glEffect.glowIntensity=amount/2;
ExplodeMesh(amount);
}
Practical example
IEnumerator Start () {
yield return StartCoroutine(MyWaitFunction (4.0f));
print ("4 seconds passed");
yield return StartCoroutine(MyWaitFunction (5.0f));
print ("9 seconds passed");
}
IEnumerator MyWaitFunction (float delay) {
float timer =Time.time + delay;
while (Time.time < timer) {
Debug.Log(Time.time);
yield return true;
}
}
Sequential Coroutines calls
Unity built-in event system
 SendMessage()-Calls the method on every MonoBehaviour in this game object.
 BroadcastMessage()- Calls the method on every MonoBehaviour in this game
object or any of its children.
Downside:
Need to target methods by their name (Errors prone)
Work only within the object's transform hierarchy
 Controller Class registers all the classes to be notified of changes via reference
Downside :
Flexibility & Scalability
Nightmare for big projects
 Dispatcher class
public class EventSender : MonoBehaviour {
public delegate void GameObjectPressHandler(GameObject e);
public event GameObjectPressHandler OnGameObjectPress;
private void DispatchPressEvent () {
if (OnGameObjectPress != null){
OnGameObjectPress (this.gameObject);//event has been fired!
}
}
}
public GameObject gm;
EventSender myEventSender=gm.getComponent<EventSender>();
myEventSender.OnGameObjectPress+=new GameObjectPressHandler(onGMPress);
Private void onGMPress(GameObjject gm){
print(gm+”was has been!”);
}
Listener Class
Thank you and good luck!

More Related Content

What's hot (20)

PPTX
unity basics
Reham Maher El-Safarini
 
PDF
The Basics of Unity - The Game Engine
OrisysIndia
 
PPTX
Unity 3D game engine seminar
NikhilThorat15
 
PPTX
Unity Game Engine - Basics
FirosK2
 
PPT
What Is A Game Engine
Seth Sivak
 
PPTX
Introduction to Unity
University of Auckland
 
PDF
Embedded Android : System Development - Part IV
Emertxe Information Technologies Pvt Ltd
 
PDF
Developing AR and VR Experiences with Unity
Mark Billinghurst
 
PPTX
PRESENTATION ON Game Engine
Diksha Bhargava
 
PPTX
Introduction to Unity3D and Building your First Game
Sarah Sexton
 
PDF
Android Application And Unity3D Game Documentation
Sneh Raval
 
PDF
Unity Introduction
Juwal Bose
 
PDF
Introduction to Android development - Presentation Report
Atul Panjwani
 
PDF
Introduction to blender
Carlos Cámara
 
PDF
Unity 3d
Srinivas Undinti
 
PPTX
Unity - Essentials of Programming in Unity
NexusEdgesupport
 
PPTX
Game Architecture and Programming
Sumit Jain
 
PPT
Learning AOSP - Android Booting Process
Nanik Tolaram
 
PPTX
PPT on Android Applications
Ashish Agarwal
 
PDF
Android Things : Building Embedded Devices
Emertxe Information Technologies Pvt Ltd
 
The Basics of Unity - The Game Engine
OrisysIndia
 
Unity 3D game engine seminar
NikhilThorat15
 
Unity Game Engine - Basics
FirosK2
 
What Is A Game Engine
Seth Sivak
 
Introduction to Unity
University of Auckland
 
Embedded Android : System Development - Part IV
Emertxe Information Technologies Pvt Ltd
 
Developing AR and VR Experiences with Unity
Mark Billinghurst
 
PRESENTATION ON Game Engine
Diksha Bhargava
 
Introduction to Unity3D and Building your First Game
Sarah Sexton
 
Android Application And Unity3D Game Documentation
Sneh Raval
 
Unity Introduction
Juwal Bose
 
Introduction to Android development - Presentation Report
Atul Panjwani
 
Introduction to blender
Carlos Cámara
 
Unity - Essentials of Programming in Unity
NexusEdgesupport
 
Game Architecture and Programming
Sumit Jain
 
Learning AOSP - Android Booting Process
Nanik Tolaram
 
PPT on Android Applications
Ashish Agarwal
 
Android Things : Building Embedded Devices
Emertxe Information Technologies Pvt Ltd
 

Viewers also liked (20)

PPT
Unity presentation
guest8f07923a
 
PDF
Unity introduction for programmers
Noam Gat
 
PDF
Unity Programming
Sperasoft
 
PPTX
Unity is strength presentation slides
Texas Health Care Association
 
PPTX
Unity 5 Overview
Shahed Chowdhuri
 
PPSX
An Introduction To Game development
Ahmed
 
PDF
Unity 3d scripting tutorial
Blaž Gregorčič
 
PDF
From Unity3D to Unreal Engine 4
Martin Pernica
 
PPT
Maya To Unity3D
Susan Price
 
PDF
Introduction to Game Development
Reggie Niccolo Santos
 
PPT
Unity Презентация
Dmitriy Bolshakov
 
PPTX
Academy PRO: Unity 3D. Scripting
Binary Studio
 
PPTX
Introductory Virtual Reality in Unity3d
Bond University
 
PDF
Pathfinding - Part 2: Examples in Unity
Stavros Vassos
 
PDF
Cross-Platform Developement with Unity 3D
Martin Ortner
 
PDF
20161125 Unity-Android連携の発表資料
WheetTweet
 
PDF
브릿지 Unity3D 기초 스터디 1회
BridgeGames
 
PPTX
How to Start Monetizing Your Game with Unity IAP | Angelo Ferro
Jessica Tams
 
PDF
NYPF14 Report - CDA
Chaudhry Talha Waseem
 
PPTX
Code and Memory Optimisation Tricks
Sperasoft
 
Unity presentation
guest8f07923a
 
Unity introduction for programmers
Noam Gat
 
Unity Programming
Sperasoft
 
Unity is strength presentation slides
Texas Health Care Association
 
Unity 5 Overview
Shahed Chowdhuri
 
An Introduction To Game development
Ahmed
 
Unity 3d scripting tutorial
Blaž Gregorčič
 
From Unity3D to Unreal Engine 4
Martin Pernica
 
Maya To Unity3D
Susan Price
 
Introduction to Game Development
Reggie Niccolo Santos
 
Unity Презентация
Dmitriy Bolshakov
 
Academy PRO: Unity 3D. Scripting
Binary Studio
 
Introductory Virtual Reality in Unity3d
Bond University
 
Pathfinding - Part 2: Examples in Unity
Stavros Vassos
 
Cross-Platform Developement with Unity 3D
Martin Ortner
 
20161125 Unity-Android連携の発表資料
WheetTweet
 
브릿지 Unity3D 기초 스터디 1회
BridgeGames
 
How to Start Monetizing Your Game with Unity IAP | Angelo Ferro
Jessica Tams
 
NYPF14 Report - CDA
Chaudhry Talha Waseem
 
Code and Memory Optimisation Tricks
Sperasoft
 
Ad

Similar to Unity3D Programming (20)

PPTX
Mini project PPT cubes games in c# ..pptx
abk827014
 
PPTX
Mini project PPT cube game presentation.pptx
abk827014
 
PPT
Game programming with Groovy
James Williams
 
PDF
School For Games 2015 - Unity Engine Basics
Nick Pruehs
 
PPTX
Porting unity games to windows - London Unity User Group
Lee Stott
 
PDF
Game Programming I - Introduction
Francis Seriña
 
PPT
Gdc09 Minigames
Susan Gold
 
PPTX
Chapt 6 game testing and publishing
Muhd Basheer
 
PDF
Project Report Tron Legacy
Manpreet Singh
 
PPTX
Unity3 d devfest-2014
Vincenzo Favara
 
PPT
Introduction to Software Development
Zeeshan MIrza
 
PDF
Introduction to html5 game programming with impact js
Luca Galli
 
PDF
Presentación Unity
Laura Milena Parra Navarro
 
PPTX
XNA and Windows Phone
Glen Gordon
 
PPTX
Academy PRO: Unity 3D. Environment
Binary Studio
 
PPTX
Windows phone 7 xna
Glen Gordon
 
PPT
Basic of Applet
suraj pandey
 
PPTX
Galactic Wars XNA Game
Sohil Gupta
 
PPTX
How to make a game app.pptx
DeveloperStudentClub9
 
PDF
Getting started with Verold and Three.js
Verold
 
Mini project PPT cubes games in c# ..pptx
abk827014
 
Mini project PPT cube game presentation.pptx
abk827014
 
Game programming with Groovy
James Williams
 
School For Games 2015 - Unity Engine Basics
Nick Pruehs
 
Porting unity games to windows - London Unity User Group
Lee Stott
 
Game Programming I - Introduction
Francis Seriña
 
Gdc09 Minigames
Susan Gold
 
Chapt 6 game testing and publishing
Muhd Basheer
 
Project Report Tron Legacy
Manpreet Singh
 
Unity3 d devfest-2014
Vincenzo Favara
 
Introduction to Software Development
Zeeshan MIrza
 
Introduction to html5 game programming with impact js
Luca Galli
 
Presentación Unity
Laura Milena Parra Navarro
 
XNA and Windows Phone
Glen Gordon
 
Academy PRO: Unity 3D. Environment
Binary Studio
 
Windows phone 7 xna
Glen Gordon
 
Basic of Applet
suraj pandey
 
Galactic Wars XNA Game
Sohil Gupta
 
How to make a game app.pptx
DeveloperStudentClub9
 
Getting started with Verold and Three.js
Verold
 
Ad

Unity3D Programming

  • 1.  Ivanov Michael  Lead Programmer R&D,Neurotech Solutions LTD  Writer for Packt Publishing.,”Away3D Cookbook”  Expert in Flex/AIR, Open Source Flash 3d engines.  Spare time:Unity,UnrealEngine,OpenGL,Java3D  Visit my tech blog:http://blog.alladvanced.net
  • 2.  How many of you have never heard of Unity?  How many of you are designers ?  How many of you come from Flash/ActionScript background?  How many of you programmed in Unity? What language?  How many of you accomplished commercial projects with Unity ?
  • 3.  Unity engine API model  Unity programming paradigm  Scripting Languages  Scripting practices  Unity GameObject structure  Examples walkthrough
  • 4.  How to program(You should learn by yourselves)  Level design(designers –sorry)  Advanced programming  Shaders  Much more cool and important stuff because of time limitation.  P.S For the rest of disclaimer please refer to:GNU General Public License Stay tuned for Unity3D workshop announcement
  • 6. Audio Engine Particle System Engine Terrain Engine Physics Engine GUI System Animation Engine Network API Shaders programmingAPI Unity Engine Core C# JavaScript Boo(Python) ShaderLab,Cg,GLSL Sealed
  • 7. WindZone LightCamera Rigid Body Collider Mesh Filter Particle Emitter Audio Source Custom GameObject Camera FPSControl ler AudioListe ner GameObject Shader Prefab Material Script File AnimationAssets Customized Game Object Components (Resource Library)
  • 8. UnityScript(JavaScript) MONO(C#) Pros •20X faster than web JS •Flexible coding(no need in data types declaration, no class body explicit typing required) •Beginners friendly •Well documented in Unity docs •C family(fast adaptation for experienced devs) •Strong typing •Robust .NET Framework(Event Model,threads,structs and more C# specific) •External IDE software availability •Piles of docs in theWeb •Portability to other platforms •DLL libs support Cons •No explicit variable types declaration required •iPhone builds are bigger than C#(additional libs added) •language specific restrictions: No multi- dimensional arrays definition, no pass values by reference into functions(needs workaround),no Char data type , no multiple interface implementation only one class or interface are allowed to be extended •Poor Even Model(custom approach is slow) •Partial implementation of .NET(no virtual classes allowed, no namespaces, limited multi-threading,Timer.. •Less documented in Unity docs
  • 9. class MyClass extends MonoBehaviour { var myVar = 1; function Start() { Debug.Log("hello world!"); } } class MyClass : MonoBehaviour { public int myVar = 1; void Start() { Debug.Log("hello world!"); } } Java Script C#
  • 10. Surprisingly you can write with both of them in one project!(one way communication only) Script Script Script Script Standard Assets ((Compiled first My Scripts Folder(Outside) (Compiled last) C#JavaScript Script Script Script Script
  • 12. using UnityEngine; using System.Collections; public class MyNewBehaviour : MonoBehaviour { public static AudioClip playingClip;//////---accessible from outside to all void Start () { } void Update () {///////// see also FixedUpdate } void OnMouseDown(){ } void OnCollisionEnter(){ } public void SpawnEnemy(){////////-------------------your custom method } }
  • 19.  Time.time  Time.deltaTime  C# System.Timers.Timer Update() and FixedUpdate() FixedUpdate synchronized with Physics Engine steps while Update() runs on each frame Always use FixedUpdate() for physics! F F F F F 0.1 seconds0.0 seconds U U U U U U U U U U
  • 20.  Time.time  Time.deltaTime  C# System.Timers.Timer Update() and FixedUpdate() FixedUpdate synchronized with Physics Engine steps while Update() runs on each frame Always use FixedUpdate() for physics! F F F F F 0.1 seconds0.0 seconds U U U U U U U U U U
  • 21. TileManager tlm = tile.GetComponent<TileManager> (); void locateAndAssignCams(){ camFPS=GameObject.Find("MainCamera"); camAnim=GameObject.Find("AnimatedCam"); } Public variables reference.(Set via component interface) •GetComponent: •Find() ,FindObjectOfType(),FindObjectsOfType() Light light = FindObjectOfType(typeof(Light)); if(AudioManager.spectrumData!=null&&AudioManager.spectrumData.Length>0){ currentSpectrum=AudioManager.spectrumData; } Direct access via static members
  • 22. AudioClip aclip=(AudioClip)Resources.Load("Sounds/gagaSong"); _audioSource.clip=aclip; playingClip=aclip; _audioSource.Play(); Create object in runtime: Instantiate Prefab GameObject tile = (GameObject)Instantiate (tilePF,Vector3.zero, Quaternion.identity); void Start () { _light=new GameObject("Light1"); _light.AddComponent<Light>(); _light.light.type=LightType.Point; _light.light.range=400; _light.light.color=Color.red; _light.transform.Translate(newVector3(1000,200,1000)); } Dynamic resource assets loading
  • 23. What are these matrices and vectors anyways? Core Classes:  Mathf .(Also C# System.Math )  Matrix4x4  Vector2/3/4  Quaternion –all Rotations are Quaternion based
  • 24. “In Physics Land talk Physics”
  • 25. Core Classes: •Physics- Global physics properties and helper methods. •RigidBody-contains all essential physics methods and properties for a body
  • 27.  Self attachment _audioSource=gameObject.AddComponent<AudioSource>();  Indirect attachment GameObject tile = (GameObject)Instantiate (tilePF,Vector3.zero, Quaternion.identity); AudioSource audioSource=tile.AddComponent<AudioSource>(); //adding audio source component to the tile and accessing it at the same time//
  • 28.  Yield Ensures that the function will continue from the line after the yield statement next time it is called Can’t be used inside “Time” methods like Update(),FixedUpdate()  Coroutine Suspends its execution until givenYield instruction finishes. Requires a method to be IEnumerator
  • 29. IEnumerator Start () { print ("first"); yield return new WaitForSeconds(2f); print ("2 seconds later"); } Yield
  • 30. using UnityEngine; using System.Collections; public class StupidLoop : MonoBehaviour{ private bool buttonPressed= false; void Update () { if(!buttonPressed) { if(Input.GetButtonDown("Jump")) { StartGame(); } } print("looping..."); } void StartGame() { buttonPressed= true; print("Game Started"); } } NoYield & Coroutines scenario(Ugly one)
  • 31. void Start(){ StartCoroutine(WaitForKeyPress("Jump")); } public IEnumerator WaitForKeyPress(string _button) { while(!buttonPresed) { if(Input.GetButtonDown (_button)) { StartGame(); yield break; } print("Awaiting key input."); yield return 0; } } private void StartGame() { buttonPressed= true; print("Starting the game officially!"); } } Simple example
  • 32. void Start () { glEffect=GameObject.Find("Main Camera").GetComponent<GlowEffect>(); StartCoroutine("explodeCounter"); } IEnumerator explodeCounter(){ onTimerElaps(); if(amount<15){ yield return new WaitForSeconds(0.01F); }else{ Mesh myMesh = GetComponent<MeshFilter>().mesh; GameObject.Destroy(myMesh); yield break; } StartCoroutine("explodeCounter"); } void onTimerElaps(){ amount+=Mathf.Sin(Time.time)/5; glEffect.glowIntensity=amount/2; ExplodeMesh(amount); } Practical example
  • 33. IEnumerator Start () { yield return StartCoroutine(MyWaitFunction (4.0f)); print ("4 seconds passed"); yield return StartCoroutine(MyWaitFunction (5.0f)); print ("9 seconds passed"); } IEnumerator MyWaitFunction (float delay) { float timer =Time.time + delay; while (Time.time < timer) { Debug.Log(Time.time); yield return true; } } Sequential Coroutines calls
  • 34. Unity built-in event system  SendMessage()-Calls the method on every MonoBehaviour in this game object.  BroadcastMessage()- Calls the method on every MonoBehaviour in this game object or any of its children. Downside: Need to target methods by their name (Errors prone) Work only within the object's transform hierarchy  Controller Class registers all the classes to be notified of changes via reference Downside : Flexibility & Scalability Nightmare for big projects
  • 35.  Dispatcher class public class EventSender : MonoBehaviour { public delegate void GameObjectPressHandler(GameObject e); public event GameObjectPressHandler OnGameObjectPress; private void DispatchPressEvent () { if (OnGameObjectPress != null){ OnGameObjectPress (this.gameObject);//event has been fired! } } } public GameObject gm; EventSender myEventSender=gm.getComponent<EventSender>(); myEventSender.OnGameObjectPress+=new GameObjectPressHandler(onGMPress); Private void onGMPress(GameObjject gm){ print(gm+”was has been!”); } Listener Class
  • 36. Thank you and good luck!

Editor's Notes

  • #2: Attention Deficit/Hyperactivity Disorder
  • #3: Attention Deficit/Hyperactivity Disorder
  • #4: Attention Deficit/Hyperactivity Disorder
  • #5: Attention Deficit/Hyperactivity Disorder