Jump to content
Unity Insider Forum

UNIDUINO – Helligkeit in Unity3D der Umgebungshelligkeit der realen Welt anpassen.


Recommended Posts

Dies ist mein zweiter Beitrag in dem es um die Interaktion zwischen Arduino und Unity3D gehen wird.

Ich möchte zeigen wie man die Helligkeit einer Lichtquelle in Unity3D mit der Umgebungshelligkeit in

der "realen" Welt synchronisieren kann.

 

Wenn Sie Ihr Arduino Board mit dem Helligkeitssensor vor das Fenster stellen, die Rollläden geschlossen

sind und Sie die ganze Nacht am zocken sind, dann werden Sie an der Umgebungshelligkeit im Spiel

erkennen wann die Sonne aufgeht. Genauso könnten Sie im Spiel erkennen, wenn am Tag jemand am

Fenster vorbei läuft (Je nachdem in welcher Etage Sie wohnen). ;-)

 

 

Einleitung

 

Während ich heute den Unity Asset-Store nach neuen interessanten Assets durchstöberte, bin ich auf

ein super Video auf YouTube gestoßen, das meiner Vorstellung von einem Game der Zukunft schon

ganz nahe kommt. Die meisten Spiele sind statisch ohne Einflussnahme auf die reale Welt.

Stellen Sie sich vor, Sie spielen ein Aktion- oder Horrorspiel, in dem Lichter flackern, sich Ventilatoren

drehen oder dem Spieler Wasser entgegen spritzt. Jetzt stellen Sie sich vor welche Aufwertung der

Atmosphäre es bringen würde, wenn plötzlich auch die Lichter in Ihrem Zimmer zu flackern beginnen

würden oder wenn Ihnen der Wind des sich im Spiel drehenden Ventilators in der realen Welt um die Nase

wehen würde. Oder wie gespenstig wäre es, wenn Ihr Spieler durch einen modrigen, dunklen Keller

wandelt in dem das Wasser von der Decke tropft und Sie die feuchte Luft hautnah spüren könnten.

 

 

 

In diesem Beitrag möchte ich nun meine ersten Gehversuche mit diesem Asset zeigen.

Ich werde für dieses Beispiel einen Arduino Uno verwenden, an dem ich lediglich einen Helligkeitssensor

am analogen Pin 0 angeschlossen habe.

 

Man könnte dieses Beispiel sicher auch ohne das Unity3D Asset “UNIDUINOâ€,

das man für 30 USD im Asset Store kaufen kann, nachbauen, jedoch habe ich mich zum Kauf des Assets

entschieden da dieses für einen reibungslosen Verbindungsaufbau zum Arduino über den Seriellen Port

sorgt, was sonst ohne größere Probleme auf dem Mac wohl noch nicht möglich wäre.

 

Folgendes wird benötigt

 

1 x Arduino-Board

1 x Helligkeitssensor

1 x Widerstand

1 paar Kabel

 

 

 

Arduino

 

Schaltungsaufbau

 

Verbinden der Fotodiode und des Widerstandes mit dem Arduino

UNIDUINO_1-560x324.png

 

 

Sketch

 

Hier wird es uns leicht gemacht denn wir müssen kein eigenes Sketch schreiben.

Es muss lediglich das Sketch “Firmata->StandardFirmata†aus den Beispielen geöffnet

und anschließend auf das Board geladen werden.

 

StandardFirmata-Menu-300x275.png

 

 

 

 

Unity3D

 

Legen Sie ein neues Projekt in Unity3D an.

 

 

UNIDUINO downloaden

 

UNIDUINO ist ein Tool, dass Sie im Unity3D Asset-Store kaufen können.

Benutzen Sie bitte folgenden Link oder suchen Sie im Asset Store nach UNIDUINO.

 

 

UNIDUINO installieren

 

Nachdem Sie UNIDUINO gekauft und heruntergeladen haben, werden Sie gefragt ob Sie dieses Asset in

Ihr Projekt importieren wollen. Bestätigen Sie dies. Wenn jetzt, wie auf der folgenden Grafik,

Fehler den Port betreffend in der Konsole angezeigt werden, gehen Sie im Menü auf

“File->Build Settings->Player->Settings†und wählen Sie unter “Optimization†.NET 2.0 aus.

Sollten Sie auf dem Mac programmieren und UNIDUINO das erste mal installieren, müssen Sie unter

Umständen noch einen weiteren Schritt ausführen. Beenden Sie in diesem Fall Unity3D und gehen Sie

in Ihrem Projektverzeichnis in den Ordner “Assets->Uniduino->UniduinoTestPanelâ€.

Starten Sie die Datei “UniduinoTestPanel.unityâ€. Beantworten Sie die nun erscheinende Abfrage ob

Sie den Treiber für den Seriellen Port installieren wollen mit Ja.

 

UNIDUINO_FirstStart-560x390.png

 

Starten Se Unity3D neu. Der Fehler sollte nun nicht mehr angezeigt werden.

Drücken Sie oben auf den Play-Button um das Projekt zu starten.

Das Uniduino TestPanel sollte nun sichtbar sein. Wenn die Verbindung zum Arduino nicht

selbstständig hergestellt wurde, klicken Sie bitte auf “Connectâ€. In diesem TestPanel können Sie

nun ganz leicht die einzelnen Pins testen.

 

Der Arduino Uno hat z.B. eine eingebaute LED die mit dem digitalen Pin13 verbunden ist.

Um nun zu testen ob diese ein- und ausgeschaltet werden kann, klicken Sie im TestPanel

hinter D13 auf den Button “OUTPUT†und anschließend auf den Button “DIGITALâ€.

Nun können Sie in der Spalte OUTPUT auf den Button klicken um die LED ein oder auszuschalten.

 

UNIDUINO_TestPanel-560x391.png

 

Wenn dies funktioniert, stoppen Sie das Projekt und löschen Sie das Objekt

â€UniduinoTestPanel†aus dem Hierarchy-Fenster.

 

 

 

Umgebung

 

In diesem Beispiel reichen uns lediglich ein leeres GameObjekt für die Arduino Logik, ein Boden (Cube)

und eine Lichtquelle (Directional Light).

Klicken Sie im Menü auf “GameObject->Create Empty†und geben Sie diesem Objekt einen Namen.

Ich habe das Objekt “ArduinoLogic†benannt. Machen Sie nun einen RechtsKlick im Project Fenster

auf “Assets†und legen Sie einen neuen Ordner mit dem Namen “Scripts†und in diesem Ordner ein

neues C# Script mit dem Namen “LightIntensity†an. Wählen Sie im Hierarchy Fenster das Objekt

ArduinoLogic und ziehen Sie im das Script LightIntensity anschließend in den Inspector.

 

Legen Sie eine Lichtquelle an in dem Sie im Menü auf “GameObject->Create Other->Directional Lightâ€

klicken. Nennen Sie dieses Objekt “Sonneâ€. Nun wählen Sie im Hierarchy Fenster erneut das Objekt

“ArduinoLogic†und ziehen das Objekt “Sonne†in den Inspector auf “Sunlightâ€. Legen Sei einen Cube an

und ändern Sie die Größe so dass dieser als Boden genutzt werden kann. Platziere Sie das Directional

Light so dass dieses auf den Boden strahlt.

 

 

C# Script – LightIntensity

 

Das folgende Script, das dem Objekt “ArduinoLogic†zugewiesen wurde, stellt eine Verbindung zum

Arduino her und ließt ständig den analogen Wert von AnalogPin0 aus. Dieser Wert, der durch den

Helligkeitssensor erzeugt wird, wird nun der Variablen “Intensity†des “Directional Light†zugewiesen

so das sich die Intensität des Directional Light je nach Helligkeitswerte in der Umgebung des Arduino

Boards, ständig ändert.

 

using UnityEngine;
using System.Collections;
using Uniduino;

public class LightIntensity : MonoBehaviour {

 public Arduino arduino;
 public GameObject Sunlight;
 private float lightScale;

 void Start () {
arduino = Arduino.global;
arduino.Setup(ConfigurePins);
 }

 void Update () {

 }

 void FixedUpdate () {
lightScale = Mathf.Round(arduino.analogRead(0));
arduino.reportAnalog(0,1);
Sunlight.light.intensity = lightScale / 100;
 }

 void ConfigurePins(){
arduino.pinMode(9, PinMode.OUTPUT);
 }
}

 

Wenn Sie Ihr Projekt nun starten und die Hand vor den Helligkeitssensor am Arduino Board halten,

sollte auch die Sonne in Ihrem Projekt dementsprechend weniger hell strahlen.

 

Hinweis: Sie müssen UNIDUINO nicht kaufen, wenn Sie Windowsnutzer sind dann schauen Sie sich einfach mal mein anderes Unity3D Tutorial an. Alles was hier unter dem Punkt “Arduino†beschrieben

ist. bleibt gleich. Sie müssten lediglich die Funktionen für den Verbindungsaufbau zum Arduino wie in

meinem anderen Beitrag, selber managen.

 

Ich hoffe Ihnen hat mein Tutorial gefallen.

Bei Fragen oder Anregungen nutzen Sie bitte die Kommentarfunktion.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist ein nettes Projekt! :) Tagsüber mit offenen Rollläden ein Spiel, das bei Nacht spielt, zu spielen, kann ziemlich frustrierend sein. :D

 

Kennst Du gute Tutorials, Bücher oder andere Quellen in denen gut erklärt wird, warum man z.B. einen ( und welchen ) Widerstand zwischen Controllerboard und Sensor einbauen muss ? ( Also Elektrotechnikgrundlagen.. )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...