Ice*_*aze 2 android unity-game-engine
我想在Android上使用Unity上的光传感器.Unity无法做到这一点,商店里没有资产/插件可以做到这一点.谷歌对这个问题并不那么友好......
这部分解释了如何使用我的代码.
.jar文件放入Assets/Plugins/Android文件夹LightSensorPluginScript.cs在您想要的GameObject上添加脚本.然后,如果你想获得传感器值:
TextMesh tm;
LightSensorPluginScript test;
void Start() {
tm = transform.GetComponent<TextMesh>();
test = GetComponent<LightSensorPluginScript> ();
}
void Update() {
tm.text = test.getLux().ToString();
}
Run Code Online (Sandbox Code Playgroud)所有文件都可以在这个zip存档中找到
这部分解释了如何创建插件.
首先,您必须创建一个Android库.如果您使用的是Android Studio,则会将它们转换为.aar文件.像zip文件一样提取它们,你会找到一个你想要classes.jar的正确文件.jar.您可以根据需要重命名,Unity并不关心.
Android Java代码
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个C#脚本,它在Android Java和Unity之间建立了桥梁
C#桥代码
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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以执行Simple version本文后面部分中的说明来使用传感器.
如果您想要任何精度,我很乐意回答并更新帖子.
对于IOs版本我很抱歉,但我没有开发这个...所以如果你想借给我一个,我很乐意这样做.
我可以将它作为插件添加到资产商店,但感觉有点麻烦.所以我更喜欢将它发布在StackOverflow上,其中帖子编辑器非常整洁.
最后,我希望它能帮助一些开发人员.