InstantiatePrefabOnOscMessage

Aus hyperdramatik
Zur Navigation springen Zur Suche springen

Das Script InstantiatePrefabOnOscMessage ist ein Beispiel für die Nutzung von OscMessages aufbauend auf das OSC in Unity Beispiel.
Um zu verdeutlichen, dass ihr bestimmte Funktionen selbst benennen könnt, habe ich in diesem Script leicht abgewandelte Variablen- und Funktionsnamen verwendet. Um das Script auszuprobieren müsst ihr im Editor noch einige Verbindungen vornehmen. Welche das sind, erfahrt ihr aus OSC in Unity#Where To From Here.

Implementierung

Wichtig! Es kann immer nur eine Funktion in der gesamten Unity Szene geben, die aufgerufen wird, wenn eine OSC-Message ankommt (zumindest wenn ihr der Beispielimplementierung bisher gefolgt seid). Ihr könnt also nicht das vorherige OscReceive Script und dieses neue Script gleichzeitig in eurer Szene aktiv haben! Ihr könnt das GameObject, auf dem euer OscReceive-Script liegt einfach inaktiv setzen, dann sollte alles gut funktionieren.

Code

Eine erste Implementierung könnte so aussehen:
SimpleInstantiateOnMessage.jpg

Damit dieses Script funktioniert, müsst ihr zunächst in Unity ein Prefab erstellt haben (z.B. einen Cube mit Rigidbody-Component), und dieses Prefab im Unity Editor mit dem Script verknüpft haben. Ebenso müsst ihr die Verknüpfung zum OSC Script im Editor gemacht haben. Schliesslich lohnt es sich, im Editor die Variable distanzZurKamera so einzustellen, dass die Prefabs sichtbar sind, wenn sie hergestellt werden.

Ergebnis

Mein Unity Editor, in dem das Script läuft (ich teste mit demselben Processing Sketch wie im Beispiel davor) sieht so aus:
InstantiatePrefabOnOscMessageUnityEditor.jpg

Cubes unterschiedlicher Grösse

Wir nutzen in der obigen Implementierung die Werte der OSC-Message gar nicht. Im Folgenden können wir, je nach Wert, der in der OSC-Message enthalten ist, die Grösse der Cubes einstellen:
InstantiateOnOscVariableSizeCubesCode.jpg

Und so sieht das dann im Unity Editor und mit Processing aus. Beachtet den Zusammenhang des Wertes, den ich in Processing als Float in die OSC-Message mitgegeben habe und die Grösse der Würfel. Hier habe ich die Werte 0.25, 0.5 und 1.5 benutzt:
InstantiatePrefabVariableSizeInEditor.JPG

Where To From Here

  • Könnt ihr Code schreiben, der die Farbe des Cubes verändert, oder ein anderes Material zuweist? (Über weitere OSC-Werte in der OscMessage)
  • Könnt ihr ein anderes Prefab verwenden? Vielleicht einen Ball, oder eine Figur?
  • Könnte jedesmal, wenn eine Nachricht ankommt, ein Sound abgespielt werden?