目录
二、AndroidStudio的代码(不需要setContentView):
三、Manifest配置(注意在unity中需要包名与Android的一致,且Android的Activity需要设置Launcher/Main意图过滤器):
AndroidForUnity(安卓代码供Unity调用)
一、引入Lib包:
需要unity的classes.jar,内含unity的根Activity
二、AndroidStudio的代码(不需要setContentView):
package com.zbv.androidforunity;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
import com.unity3d.player.UnityPlayerActivity;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class AndroidForUnityActivity extends UnityPlayerActivity {
//可以考虑使用自己的包使用来调方法
public static Activity mActivity;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x7) {
popToast(AndroidForUnityActivity.this, "你好" + msg.arg1, false);
}
}
};
private Toast mToast;
private void popToast(Context context, String content, boolean isShowLong) {
if (mToast == null) {
mToast = Toast.makeText(context, content, Toast.LENGTH_SHORT);
}
if (isShowLong) {
//7000ms
mToast.setDuration(Toast.LENGTH_LONG);
} else {
//4000ms
mToast.setDuration(Toast.LENGTH_SHORT);
}
mToast.setText(content);
mToast.show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;
}
/**
* 供Unity调用的获取当前时间的Android公共方法
*/
public String getNowTime() {
Date date = new Date();
Log.e("zbv", "currentDate=" + date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}
/**
* 供Unity调用的获取设备生产商的Android私有方法
* 可行的
*/
private String getDeviceBrand() {
return Build.BRAND;
}
private static final int COUNT = 10;
private int count = 0;
/**
* 供Unity调用的开线程弹吐司的Android公有方法
*/
public void threadToast() {
final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
count++;
if (count > COUNT) {
scheduledExecutorService.shutdown();
return;
}
Message message = mHandler.obtainMessage();
message.what = 0x7;
message.arg1 = count;
message.sendToTarget();
}
}, 1000, 1000, TimeUnit.MILLISECONDS);
}
}
三、Manifest配置(注意在unity中需要包名与Android的一致,且Android的Activity需要设置Launcher/Main意图过滤器):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zbv.androidforunity">
<application android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="true"
android:supportsRtl="true">
<activity android:name=".AndroidForUnityActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true" />
</activity>
</application>
</manifest>
四、Unity的调用:
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
//这是调用公有方法可以
string nowTime = jo.Call<string>("getNowTime");
//这是调用私有方法可以
string deviceBrand=jo.Call<string>("getDeviceBrand");
五、Android调用Unity方法:
例如:UnityPlayer.UnitySendMessage("cube", "dance","parameter");
解释:Unity中需要有一个名字叫cube的物体对象上挂在脚本方法dance,传入参数是parameter