Unity 3D – JS Script – gameController
BG Music multiple tracks management
1. MAIN TOP MENU> GameObject> Create Empty, name it ‘gameController’
2. ‘Add Component’> Audio> Audio Source>
– Audio Clip, DRAG AND DROP the background music
– Play On Awake: check
– Loop: check
3. 1. MAIN TOP MENU> GameObject> Create Empty, name it ‘secondaryMusic’
4. ‘Add Component’> Audio> Audio Source>
– Audio Clip, DRAG AND DROP the secondary music
– Play On Awake: check
– Loop: check
– Volume = 0 if the volume will be >0 you listen 2 audio source at the same time!
5. Hierarchy DRAG AND DROP ‘secondaryMusic’ over ‘gameController’, now:
‘gameController'(parent)
|->’secondaryMusic’ (child)
Sighting (avvistamento)
Hierarchy> env_stealth_static> props> select CTRL + All prop_megaphone_00etc…> Inspector> Tag ‘Siren’
Open the 3D megaphone game objects and assign Tag ‘Siren’.
Se ci sarà un avvistamento tutti i megafoni 3D dovranno suonare contemporaneamente.
Con ancora tutti gli elementi selezionati assegnare il suono dell’allarme con
Inspector> Add Component> Audio> Audio Source> Audio Clip> DRAG AND DROP from Project> Audio> alarm_triggered
– Play On Awake: uncheck
– Loop: check
– 3D Sound Settings> Min Distance> 5, l’audio si sentirà se si entra nel raggio di 5 unità dall’oggetto 3D, l’area delimitata nella viewport dalla sfera azzurra.
6. Hierarchy ‘gameController’> Inspector> ‘Add Component’> LastPlayerSighting.js
#pragma strict
public var position : Vector3 = new Vector3(1000f, 1000f, 1000f); // The last global sighting of the player.
public var resetPosition : Vector3 = new Vector3(1000f, 1000f, 1000f); // The default position if the player is not in sight.
public var lightHighIntensity : float = 0.25f; // The directional light's intensity when the alarms are off.
public var lightLowIntensity : float = 0f; // The directional light's intensity when the alarms are on.
public var fadeSpeed : float = 7f; // How fast the light fades between low and high intensity.
public var musicFadeSpeed : float = 1f; // The speed at which the
private var alarm : AlarmLight; // Reference to the AlarmLight script.
private var mainLight : Light; // Reference to the main light.
private var panicAudio : AudioSource; // Reference to the AudioSource of the panic msuic.
private var sirens : AudioSource[]; // Reference to the AudioSources of the megaphones.
function Awake ()
{
// Setup the reference to the alarm light.
alarm = GameObject.FindGameObjectWithTag(Tags.alarm).GetComponent(AlarmLight);
// Setup the reference to the main directional light in the scene.
mainLight = GameObject.FindGameObjectWithTag(Tags.mainLight).light;
// Setup the reference to the additonal audio source.
panicAudio = transform.Find("secondaryMusic").audio;
// Find an array of the siren gameobjects.
var sirenGameObjects : GameObject[] = GameObject.FindGameObjectsWithTag(Tags.siren);
// Set the sirens array to have the same number of elements as there are gameobjects.
sirens = new AudioSource[sirenGameObjects.Length];
// For all the sirens allocate the audio source of the gameobjects.
for(var i = 0; i < sirens.Length; i++)
{
sirens[i] = sirenGameObjects[i].audio;
}
}
function Update ()
{
// Switch the alarms and fade the music.
SwitchAlarms();
MusicFading();
}
function SwitchAlarms ()
{
// Set the alarm light to be on or off.
alarm.alarmOn = position != resetPosition;
// Create a new intensity.
var newIntensity : float;
// If the position is not the reset position...
if(position != resetPosition)
// ... then set the new intensity to low.
newIntensity = lightLowIntensity;
else
// Otherwise set the new intensity to high.
newIntensity = lightHighIntensity;
// Fade the directional light's intensity in or out.
mainLight.intensity = Mathf.Lerp(mainLight.intensity, newIntensity, fadeSpeed * Time.deltaTime);
// For all of the sirens...
for(var i = 0; i < sirens.Length; i++)
{
// ... if alarm is triggered and the audio isn't playing, then play the audio.
if(position != resetPosition && !sirens[i].isPlaying)
sirens[i].Play();
// Otherwise if the alarm isn't triggered, stop the audio.
else if(position == resetPosition)
sirens[i].Stop();
}
}
function MusicFading ()
{
// If the alarm is not being triggered...
if(position != resetPosition)
{
// ... fade out the normal music...
audio.volume = Mathf.Lerp(audio.volume, 0f, musicFadeSpeed * Time.deltaTime);
// ... and fade in the panic music.
panicAudio.volume = Mathf.Lerp(panicAudio.volume, 0.8f, musicFadeSpeed * Time.deltaTime);
}
else
{
// Otherwise fade in the normal music and fade out the panic music.
audio.volume = Mathf.Lerp(audio.volume, 0.8f, musicFadeSpeed * Time.deltaTime);
panicAudio.volume = Mathf.Lerp(panicAudio.volume, 0f, musicFadeSpeed * Time.deltaTime);
}
}