2016-08-15 1 views
1

Ich möchte den Lichtsensor auf Android mit Unity verwenden. Unity kann das nicht und es gibt kein Asset/Plugin im Store, das das tun könnte. Und Google ist nicht so frendly mit dieser Frage ...So verwenden Sie den Android-Lichtsensor in Unity

+0

Weil es einige Zeit dauert, um dieses Problem zu lösen, und habe keine Lösung im Internet gesehen. Also wollte ich es teilen, um zu verhindern, dass andere so kämpfen wie ich. Und ich wähle Stack Overflow für die Sichtbarkeit. Wenn ich auf Google suche, bevorzuge ich einen SO-Link mehr als einen Blog-Link. (Und ich habe übrigens keinen Blog) –

+0

Wenn es eine sehr spezifische Frage war, sollte ich es ausarbeiten. Aber in der Tat war meine Frage buchstäblich "Ich möchte den Wert des Lichtsensors in Einheit bekommen" und außer einem Plugin, das 45 $ kostet, gibt es keine Antwort. Also habe ich meins gegeben. Wenn Leute Probleme in ihrem Code haben, müssen sie das Maximum an Informationen geben, aber das ist hier nicht der Fall. –

+1

Ich denke, das ist eine sehr hilfreiche Frage und Antwort. Ich habe vorher schon etwas Ähnliches gemacht und weiß, dass viele Leute es auch machen wollen und das sollte ihnen helfen. Der einzige Unterschied ist, dass ich 'UnityPlayer.UnitySendMessage' verwende, um eine C# -Funktion aufzurufen, wenn sich der Sensorwert ändert. – Programmer

Antwort

4

Einfache Version

Dieser Teil erklären, wie mein Code zu verwenden.

  1. Setzen Sie die .jar Datei in Assets/Plugins/Android Ordner
  2. Dann einfach das Skript hinzufügen LightSensorPluginScript.cs auf dem Gameobject Sie wollten.
  3. Dann, wenn Sie den Sensorwert erhalten möchten:

    TextMesh tm; 
    LightSensorPluginScript test; 
    void Start() { 
        tm = transform.GetComponent<TextMesh>(); 
        test = GetComponent<LightSensorPluginScript>(); 
    } 
    void Update() { 
        tm.text = test.getLux().ToString(); 
    } 
    
  4. Alle Dateien können in diesem zip archive

Detailansicht finden

Dieser Teil erklären, wie zu schaffen das Plugin.

Zuerst müssen Sie eine Android-Bibliothek erstellen. Wenn Sie Android Studio verwenden, werden sie in .aar Dateien konvertiert. Entpacken Sie sie wie eine Zip-Datei und Sie werden eine classes.jar Datei finden, die die richtige .jar Sie wollen. Sie können es umbenennen, wie Sie wollen, Unity war es egal.

Android Java-Code

public class LightSensorLib{ 

    private SensorManager mSensorManager; 
    private Sensor mSensorRot; 
    private float lux = -1000; 

    public void init(Context context) { 
     mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 
     mSensorRot = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 

     SensorEventListener mySensorEventListener = new SensorEventListener() { 
      @Override 
      public void onSensorChanged(SensorEvent event) { 
       float sensorData[]; 

       if(event.sensor.getType()== Sensor.TYPE_LIGHT) { 
        sensorData = event.values.clone(); 
        lux = sensorData[0]; 
       } 
      } 

      @Override 
      public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
     }; 
     mSensorManager.registerListener(mySensorEventListener, mSensorRot, 500); 
    } 

    public float getLux() { 
     return lux; 
    } 
} 

Dann habe ich eine C# Skript, der die Brücke zwischen Android Java und Unity

public class LightSensorPluginScript : MonoBehaviour { 
    private AndroidJavaObject activityContext = null; 
    private AndroidJavaObject jo = null; 
    AndroidJavaClass activityClass = null; 

    void Start() { 
     #if UNITY_ANDROID 
     activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
     activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity"); 

     jo = new AndroidJavaObject("com.etiennefrank.lightsensorlib.LightSensorLib"); 
     jo.Call("init", activityContext); 
     #endif 
    } 

    public float getLux() { 
     #if UNITY_ANDROID 
     return jo.Call<float>("getLux"); 
     #endif 
    } 
} 

Jetzt

C# Brücke Code tut können Sie tun, was im Simple version Teil dieses Beitrags zu verwenden ist der Sensor.

Wenn Sie irgendeine Präzision wünschen, würde ich mich freuen, die Post zu beantworten und zu aktualisieren.

Für die IOs-Version tut mir leid, aber ich habe keinen Mac, um das zu entwickeln ... Also wenn Sie mir einen leihen möchten, würde ich es gerne tun.

Ich könnte es als ein Plugin im Asset Store hinzufügen, aber es fühlt sich ein bisschen umständlich an. Deshalb poste ich es lieber auf StackOverflow, wo der Post-Editor wirklich ordentlich ist.

Endlich hoffe ich, dass es einigen Entwicklern hilft.

Verwandte Themen