2016-08-15 2 views
1

Я хочу использовать датчик света на Android с Unity. Unity не может этого сделать, и в магазине нет актива/плагина, который мог бы это сделать. И Google не так Товарищеский с этим вопросом ...Как использовать датчик света Android в Unity

+0

Поскольку мне требуется некоторое время, чтобы справиться с этой проблемой и не видели никаких решений в Интернете. Поэтому я хотел поделиться им, чтобы другие не могли бороться, как я. И я выбираю Stack Overflow для видимости. Когда я ищу в google, я предпочитаю ссылку SO больше, чем ссылку в блоге. (Кстати, у меня нет блога) –

+0

Если бы это был очень конкретный вопрос, я должен его разработать. Но на самом деле мой вопрос был буквально «Я хочу получить значение светочувствительного сенсора в единстве», и кроме плагина стоимостью 45 $ нет ответа. Поэтому я дал мне. Когда у людей возникают проблемы в коде, они должны предоставить максимум информации, но здесь дело обстоит не так. –

+1

Я думаю, что это очень полезный вопрос и ответ. Я уже делал что-то подобное и знаю, что многие люди тоже хотят это сделать, и это должно помочь им. Единственное различие заключается в том, что я использую 'UnityPlayer.UnitySendMessage' для вызова функции C# при изменении значения датчика. – Programmer

ответ

4

Простая версия

Эта часть объясняет, как использовать мой код.

  1. Поместите файл .jar в Assets/Plugins/Android папку
  2. Затем просто добавить скрипт LightSensorPluginScript.cs на GameObject вы хотели.
  3. Тогда, если вы хотите, чтобы получить значение датчика:

    TextMesh tm; 
    LightSensorPluginScript test; 
    void Start() { 
        tm = transform.GetComponent<TextMesh>(); 
        test = GetComponent<LightSensorPluginScript>(); 
    } 
    void Update() { 
        tm.text = test.getLux().ToString(); 
    } 
    
  4. Все файлы можно найти в этом zip archive

Подробная версия

Эта часть объясняет, как создать плагин.

Прежде всего, вам необходимо создать библиотеку 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; 
    } 
} 

Тогда у меня есть 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 
    } 
} 

Теперь вы можете сделайте то, что объясняется в части статьи Simple version датчик.

Если вы хотите любой точности, я был бы рад ответить и обновить сообщение.

Для версии IO Извините, но у меня нет макинтоша, чтобы развить это ... Поэтому, если вы хотите одолжить мне одну, я был бы рад сделать это.

Я мог бы добавить его в качестве плагина в хранилище активов, но он чувствует себя немного громоздким. Поэтому я предпочитаю публиковать его в StackOverflow, где редактор сообщений действительно опрятен.

Наконец-то я надеюсь, что это поможет некоторым разработчикам.