Prototyping interaktiva miljöer i virtuell verklighet med Google kartong, enighet och Hotline Bling (TfCD) (8 / 9 steg)
Steg 8: Interaktion och ljud
Kartong kontroller + paketet, nämnde några steg sedan, ger ett enkelt sätt att säkerhetsloggar med headsetet, och är ett bra tillfälle att dyka in i koden och skapa några interaktivitet.
Vi kommer att skapa en svart sfär som, när man ser på det, ändrar storlek, börjar sända partiklar och ändrar färgen på ljuset som kommer från den baksida väggen. Vi kommer också använda två ljud, en tog prov från ett gratis lågt mullrande ljudet (bleknar togs bort) och ett prov loop från instrumental version av Hotline Blingför detta steg.
Att lägga till området
- Skapa ett nytt material och tillämpa den på den baksida väggen ("Plane(4)" i rummet prefab) och avgöra vilka utsläpp styrka du hitta fungerar bra (ta någon ljus färg). Denna kommer fråga inte långt senare, som värdet ska anges programmässigt. Ange sedan utsläpp intensiteten till en grå med 0.70 intensitet.
- Namn på Plane(4) till "bakvägg" (det namnet kommer att användas i koden).
- Placera en sfär (GameObject > 3D objekt > sfär) mitt i den baksida väggen i skala 2,2,2.
- Ge det ett nytt material med 0 mjukhet och en svart Albedo.
Lägga till ljud
- Skapa en "Ljud" mapp i vyn bibliotek
- Importera de nedladdade / valda ljud i denna mapp (hotline.ogg bifogas nedan)
- Välj taket hålet i trappan
- I granskaren, klicka på "Lägg till komponent" och skriv Audio källa.
- Ange egenskapen AudioClip till importerade ljudet
- Check "Loop" och "Spela vaken"
- Som "Rumsliga Blend" 1, att göra det ett ljud med 3-dimensionell källa, taket hålet.
- Ange "Max avstånd" någonstans runt 13.
- Ställ in volymkurvan som illustreras.
- Välj det svarta området, och tillämpa en ljudkälla med rumble buller som klipp.
- Avmarkera "Loop" och "Spela på vaken" (vi vill inte ha kontinuerlig eller slumpmässiga mullrar, det kommer att utlösas i koden)
- Lämna den rumsliga blandningen på 0.
Att lägga till partikel system
- Skapa ett nytt material
- I granskaren, ändra egenskapen skuggning (på toppen) från Standard till partiklar > tillsats (mjuka). Detta är en optisk effekt som piggar upp element inunder endast om det är ljusare än dessa element (liknar Photoshop blandningslägen).
- Välj det svarta området och Lägg en "Partikel System" komponent.
- Rotera klotet en sådan att sändaren är inriktad mot rummet.
- Partikel System komponenten anger form > vinkel till 41 och i Renderer avsnitt set
- Göra läge: Mesh
- Mesh: sfär
- Material: [Välj din partikel material]
- Kastade skuggor: Off
- Ta emot skuggor: off
Koden
Nu är det dags att lägga till några nya kod. Markera objektet "Spelaren" och dubbelklicka på skriptet "PlayerControl". Det kommer att öppna i MonoDevelop, en kod redaktör för enhet som är integrerad. För att kopiera koden, rekommenderar jag för att kopiera från den slutliga filen på Github, eftersom Instructables har lite problem med formatering.
Lägg till följande innan funktionen start ("void Start() {...}"), efter "privat CapsuleCollider playerCollider;"
privat GameObject bakvägg;
privat GameObject sfär;
privat AudioSource sphereSound;
privat färg desiredColor;
Lägg till följande i funktionen start:
cardboard.gaze.OnChange += CardboardFocusChanges; Utföra när fokus ändras
Bakvägg = GameObject.Find ("bakvägg"); definiera objektet bakvägg
sfär = GameObject.Find ("sfär"); definiera det svarta området
sphereSound = sfär. GetComponent (); definiera ljudspelaren sfärens
desiredColor = ny färg (0f, 0f, 0f); definiera start färg på bakvägg (svart)
Den första raden i det föregående blocket anropar funktionen "CardboardFocusChanges", men som inte har definierats ännu. Låt oss först gå på det. Placera följande nedan funktionen Start (så efter sin avslutande "}", innan funktionen FixedUpdate)
privata void CardboardFocusChanges (objekt avsändare) {
CardboardControlGaze blick = avsändare som CardboardControlGaze; Kartong kamera blick
om (blick. IsHeld() & & blickar. Objekt() == sfär) {
flyta redOrBlue = Random.value; för slumpmässiga värde
desiredColor = ny färg (redOrBlue, Random.value, 1 - redOrBlue); Ange önskad färg
}
}
Så nu behöver fyra saker hända:
- Animera färg och utsläpp av den baksida väggen till önskad färg
- Öka storleken på området när det ses
- Aktivera / avaktivera ljud
- Aktivera / avaktivera partikel system
Som dessa saker måste ske dynamiskt, de tre första animerade även, de sätts i en standardfunktion som kallas varje bildruta: uppdateringsfunktionen. I detta fall är det enligt följande:
void Update() {
om (backWall.GetComponent < Renderer > (). material.color! = desiredColor) {
backWall.GetComponent < Renderer > (). material.color = Color.Lerp(backWall.GetComponent<Renderer> ().material.color, desiredColor, Time.deltaTime); Animera väggfärg
DynamicGI.SetEmissive (backWall.GetComponent < renderer > (), (backWall.GetComponent). material.color * 1.5f); Animera vägg utsläpp
}
om (cardboard.gaze.IsHeld () & & (cardboard.gaze.Object) == sfär) {
sphere.transform.localScale = Vector3.Lerp (sphere.transform.localScale, nya Vector3 (4, 4, 4), Time.deltaTime); Animera sfär skala
Sphere. GetComponent < ParticleSystem > () .startColor = desiredColor; Ställ in partikel färg
Sphere. GetComponent < ParticleSystem > () .enableEmission = sant; Aktivera utsläpp
sphereSound.volume = Mathf.Lerp (sphereSound.volume, 1f, Time.deltaTime); blekna ljud på
IF(!sphereSound.isplaying) {
sphereSound.time = 0; återställa uppspelningen av ljud
sphereSound.Play(); spela upp ljud
}
} annat {
sphere.transform.localScale = Vector3.Lerp (sphere.transform.localScale, nya Vector3(2,2,2), Time.deltaTime); Animera skala tillbaka på förlorade blick
Sphere. GetComponent < ParticleSystem > () .enableEmission = false; Inaktivera partiklar
sphereSound.volume = Mathf.Lerp (sphereSound.volume, 0f, Time.deltaTime); fadeout
}
}