Unity调用Android jar包方法——(三、使用UnitySendMessage发送数据)

Unity工程里调用安卓的方法,需要用到JAR包。此文档主要介绍了Unity与Android相互通信的方法三。

    使用方法1,需要修改程序的主Activity,所以可以在程序的生命周期做一些初始化和其他工作。
    使用方法2,不需要修改主Activity,并可同时使用多个JAR包。
    使用方法3,Unity脚本中的方法可以被JAR包内调用,通常用来接受广播并将信息发送到Unity。

 

3、Unity直接调用jar包方法

Android工程中:

1、创建新的Android工程,在工程中app->libs导入classes.jar, 并右击选择Add As Library;

unity图标右键选择属性->打开文件位置找到classes.jar(Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar)

2、Android类继承UnityPlayerActivity;

3、在需要的地方调用UnityPlayer.UnitySendMessage(String s1, Strinig s2, String s3);(至少需要传入两个参数,第一个参数为unity中的一个gameobject名称,第二个参数为这个gameobject身上捆绑的脚本中的一个方法,而第三参数事实上是这个对应方法上的参数。)

如在接收到蓝牙广播时通知Unity:

switch (message) {

           case BluetoothAdapter.STATE_OFF:

                     UnityPlayer.UnitySendMessage("SetState", "setBluetoothState", "bt_state_off");

                     break;

       … …

4、删除 setContentView(R.layout.activity_main); 代码行;

5、将Android工程导出Jar包,如:unityToAndroid.jar

Unity工程中:

6、将Jar包(unityToAndroid.jar)拷贝到Unity工程中Assets/Plugins/Android/目录下。

7、Unity中创建UnityPlayer.UnitySendMessage(String s1, Strinig s2, String s3);jar包中提到的名为s1的gameobject。如上例中的“SetState”。

8、创建新脚本,挂在到名为s1的gameobject上,并在脚本中创建方法名为s2。如上例中的“setBluetoothState”。

 public Text wifiText;

 public void setWifiState(string s){

           wifiText.text = s;

            ......

 }

9、jar包中的UnityPlayer.UnitySendMessage(String s1, Strinig s2, String s3)一旦执行,此方法就会被调用,并将s3作为参数传入Unity中的s2方法中。如上例中的 "bt_state_off"作为参数传递给setWifiState(string s){}中的s。

注:该方法是一种Unity被动接受消息的方式,适用于Unity接受系统消息,如:wifi、蓝牙、电量等状态的变化信息等。

 

你可能感兴趣的:(Android)