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
Antwort
Einfache Version
Dieser Teil erklären, wie mein Code zu verwenden.
- Setzen Sie die
.jar
Datei inAssets/Plugins/Android
Ordner - Dann einfach das Skript hinzufügen
LightSensorPluginScript.cs
auf dem Gameobject Sie wollten. 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(); }
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.
- 1. So erhöhen Sie den Rotationswinkel mit Unity mit Quaternion
- 2. So verwenden Sie Umgebungsvariablen in den Ideeneinstellungen
- 3. So verwenden Sie den Vergleich in GHC.TypeLits
- 4. So verwenden Sie den Präprozessor in mirthconnect
- 5. So verwenden Sie Listen in den Bedingungen
- 6. Unity: Verwenden Sie HTTP PUT in Unity3D
- 7. So ändern Sie Materialien in Unity
- 8. So ändern Sie den Winkel von Unity transform.forward
- 9. So richten Sie Unity-Testtools auf Unity 5 ein
- 10. Verwenden Sie die Sitzung erneut, wenn Sie Unity verwenden
- 11. So verwenden Sie den Wert von imeactionId
- 12. So verwenden Sie den Kontextmanager mit Ausnahmen
- 13. So verwenden Sie den Befehl merge
- 14. So verwenden Sie den Rahmenabstand im Vollkalender
- 15. So verwenden Sie den öffentlichen Service asmx
- 16. So verwenden Sie den Befehl ghostscript tiffcp
- 17. So verwenden Sie den IsA-Matcher
- 18. Verwenden des Ressourcenordners in Unity
- 19. So verwenden Sie den Unterrichtsservice mit GoogleApiClient
- 20. Wie kann ich den Bluetooth-Controller in Unity verwenden?
- 21. So zeigen Sie ein Facebook-Profilbild in Unity C an #
- 22. So verwenden Sie den Konstruktor für den Javascript-Client
- 23. Capture-Tastendruck in Unity, wenn Unity nicht den Eingabefokus hat
- 24. So integrieren Sie Unity in eine Android-Aktivität
- 25. So identifizieren Sie Server und Client getrennt in Unity 3d
- 26. So verwenden Sie den nativen Equalizer in der App
- 27. So verwenden Sie den ROLLUP-Operator in ActiveRecord
- 28. So verwenden Sie den Barcode-Scanner in der Webanwendung
- 29. So verwenden Sie den Standortwert der ContextConfiguration-Annotation in Frühlingstests
- 30. So verwenden Sie den Verlaufsserver in Apache Spark
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) –
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. –
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