Unity3D Game Engine – Combination of Keys Pressed – Javascript
KeyCombinationCheck.js
#pragma strict function Update() { if((Input.GetKey("e"))&&(Input.GetKeyDown("1"))) { print("You have pressed e+1"); } }
Unity3D Game Engine – Combination of Keys Pressed – Javascript
KeyCombinationCheck.js
#pragma strict function Update() { if((Input.GetKey("e"))&&(Input.GetKeyDown("1"))) { print("You have pressed e+1"); } }
Unity 3D – AAA Sound Manager – JavaScript
Best practices for playing a lot of audio.
Create a Unity 3D Project with:
1. Main Camera
2. Cube, attach the script ‘GetAudioCenter.js’:
#pragma strict // private to hide in inspector: nome dello script da prelevare private var audioCenter : AudioCenterScript; function Start () { // inserisco in una variabile l'oggetto con tag AudioCenter var audioCenterObject : GameObject = GameObject.FindWithTag ("AudioCenter"); // se l'oggetto con tag GameController esiste lo inserisco in una variabile if (audioCenterObject != null) { audioCenter = audioCenterObject.GetComponent (AudioCenterScript); } // se l'oggetto con tag GameController non esiste restituisce un messaggio di errore if (audioCenterObject == null) { Debug.Log ("Cannot find 'AudioCenterScript' script"); } } function Update () { } function OnMouseDown () { // When you click over the object Debug.Log('clicked'); // Debug Code, remove in the end // invia a AudioCenterScript.js, alla funzione play sound il suono da utilizzare var trackValue : int = 1; audioCenter.PlayTrack (trackValue); }
3. Empty Object> Inspector:
a. name it ‘AudioCenter’
b. tag it ‘AudioCenter’
c. Transform> Reset, it puts the object at 0,0,0
d. Add Component> Audio Souce> uncheck ‘Play On Awake’ -> VERY IMPORTANT
e. attach the script ‘AudioCenterScript.js’:
#pragma strict // assign the audio clips into Inspector START ########### // NOTICE: the best practice is to use understandable names // IMPORTANT: you can organize your audio clips into separate AudioCenter, example: dance, classic etc... var bigJump: AudioClip; // track 1 var smallJump: AudioClip; // track 2 var miniJump: AudioClip; // track 3 var outWaterJump: AudioClip; // track 4 // assign the audio clips into Inspector END ############# function Start () { } function Update () { } function PlayTrack (trackValue : int) { if (trackValue == 1) { // play the track 1, volume 0-1 // here you can setup via code volume of the track or SFX audio.PlayOneShot(bigJump, 1); } // if (trackValue == 2) -> it will play track 2 and so on... }
Inspector assign your SFX (wav or mp3) to vars
4. Play! If you click over the cube, the sfx of AudioCenter(Empty Object)>AudioCenterScript.js plays.
Spiegazioni in italiano:
Immaginiamo di dover realizzare un platform come Super Mario per Wii che contiene centinaia di effetti sonori, differenti per ogni nemico che incontriamo in questo platform. E’impensabile poter gestire una tale quantità di effetti aggiungendoli semplicemente ai singoli prefab sparsi per i livelli, magari alcuni di questi suoni potrebbero essere pure condivisi da diversi oggetti o scaturire in azioni e reazioni varie sparse per decine di mondi virtuali giocabili.
La soluzione è quella di creare un solo oggetto vuoto che ha lo scopo di:
– contenere la lista completa dei suoni all’interno di variabili
– gestirne il volume tramite la funzione di Unity3D, PlayOneShot()
– avere un’unica ‘Audio Souce’ in game. La funzione PlayOneShot() ci permetterà di utilizzare anche più suoni nello stesso istante, sovrapponendoli.
Come funziona il nostro codice?
1. GetAudioCenter.js
a. Rileva l’esistenza dell’oggetto con il tag ‘AudioCenter’
b. Se positiva ottiene lo script ‘AudioCenterScript.js’ attaccato all’oggetto ‘AudioCenter’
c. Invia a AudioCenterScript.js> funzione PlayTrack() un valore ID della traccia
b. Rileva il click del mouse all’oggetto al cui è applicato come componente
2. AudioCenterScript.js
a. Incorpora nelle variabili le tracce sonore
b. Riceve all’interno della funzione PlayTrack(), la variabile trackValue
c. In base a trackValue viene eseguita una specifica traccia utilizzando il componente ‘Audio Source’. Questo ha di default disattivato il parametro ‘Play On Awake’, quindi è muto finchè non arriva l’input di GetAudioCenter.js
Get Component – Script from Another Object
Create a new scene with:
1. Camera
2. GUI Text
3. Cube, attach ‘CubeScript.js’
#pragma strict // private per nasconderla in Inspector: nome dello script da prelevare private var gameController : GameControllerScript; function Start () { // inserisco in una variabile l'oggetto con tag GameController var gameControllerObject : GameObject = GameObject.FindWithTag ("GameController"); // se l'oggetto con tag GameController esiste inserisco in una variabile il componente GameControllerScript.js if (gameControllerObject != null) { gameController = gameControllerObject.GetComponent (GameControllerScript); } // se l'oggetto con tag GameController non esiste restituisce un messaggio di errore if (gameControllerObject == null) { Debug.Log ("Cannot find 'GameControllerScript.js' script"); } } function Update () { } function OnMouseDown () { // When you click over the object Debug.Log('clicked'); // Debug Code, remove in the end // invia a GameControllerScript.js, alla funzione TextUpdate() la variabile myNewTextValue var myNewTextValue : int = 2; gameController.TextUpdate (myNewTextValue); }
4. Empty Object:
a. name it ‘GameController’
b. tag it ‘GameController’
c. Transform> Reset, it resets the position at 0,0,0
d. attach ‘GameControllerScript.js’
#pragma strict var mytext : GUIText; // Assign it in Inspector private var myTextValue : int; // hide it in Inspector, we want drive it only via code! function Start () { // give them an initial value when the game starts mytext.text = "First text"; myTextValue = 1; } function Update () { } function TextUpdate (myNewTextValue : int) { if (myNewTextValue == 2) { // play the track 1, volume 0-1 mytext.text = "Second text"; } // if (trackValue == 2) -> it will play track 2 and so on... }
e. Inspector> ‘GameControllerScript.js’ assign the GUIText into var slot
5. Play, when you click over the Cube the GuiText changes!
For italian people: Come funziona?
1. ‘CubeScript.js’ controlla l’esistenza di GameController(oggetto)
2. se esiste ottiene da GameController(oggetto) il componente ‘GameControllerScript.js’
3. invia al click del mouse a GameControllerScript.js> funzione TextUpdate() un valore
4. ‘GameControllerScript.js’ riceve questo valore e cambia la stringa di testo.
Unity 3D Game Engine – Materials – Switch Materials
1. Project> RMB> Create> Material> Create: material1 and material2
2. MAIN TOP MENU> Gameobject> Create Other> Cube, assign the script:
SwitchMaterial.JS
#pragma strict var material1 : Material; // assign in Inspector var material2 : Material; // assign in Inspector var transitionTime = 2.0; function Start () { } function Update () { ChangeMaterial(); } function ChangeMaterial () { renderer.material = material1; yield WaitForSeconds (transitionTime); // wait seconds... -> non può essere inserito all'interno di Update() renderer.material = material2; // switch to material2 }
3. Project DRAG AND DROP material1 and material2 over Inspector> SwitchMaterial.JS> material1 slot | material2 slot
Unity 3D Game Engine – Set Material Transparency
1. MAIN TOP MENU> Gameobject> Create Other> Cube
2. Hierarchy, select the Cube> Inspector> materal slot, select Shader: Transparent/Diffuse
NOTICE; YOu HAVE TO USE a Transparent shader, in Unity3D only Transparent Shaders support alpha channel
3. Select the Cube and assign SetTransparency.JS:
#pragma strict function Start () { } function Update () { gameObject.renderer.material.color.a = 0.5; // set transparency to 50% }