然后再点击Android Library 创建安卓库。
创建时的库名称)右键创建Empty Activity,创建一个MainActivity。
创建完MainActivity之后在资源文件里面会有一个activity_main.xml,为了防止与unity有冲突需删掉。然后在MainActivity.java里把setContenView(R.layout.activity_main);删掉。
然后我们需要找到Unity Class的jar包,一般默认路径是:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
把jar包复制到libs文件里去,这里需要先切换试图到Project,不然不会显示libs文件夹。导入到libs文件完成之后右键jar包点击Add As Library就完成了
之后的话需要调整下安卓库的AndroidManifest.xml,当点击进去的时候发现里面其实什么都没有,这里需要把app里面的AndroidManifest.xml的中间部分复制到安卓库就可以了,结果如下
然后在MainActivity里修改父类继承自UnityPlayerActivity,再写一个供unity通信测试的方法
之后再选中testlibrary 点击Build =>Make Module"testlibrary"按钮使其build。切换到Project试图,在testlibrary文件build=> intermediates=>bundles=>debug里右键Show in Explorer让其显示文件夹,然后把debug里libs里的classes.jar给删掉,然后把外面的classes给剪切过来到libs,然后把libs和res文件夹复制出去。回到AS里,把intermediates=>manifests=>full=>debug里的AndroidManifest.xml也给复制出去,这三个文件是要提供给unity的。在这里要注意下AndroidManifest.xml里面的包名要和unity的包名保持一致,包名全部小写。
接下来是Unity部分:
1.Unity调用Android方法:新建一个unity项目,创建文件夹Plugins=>Android,然后把之前复制出去的三个文件夹导入到Android文件夹下面,创建一个c#脚本,代码如下
public class AndroidTest : MonoBehaviour { private void Start() { //获得位于com.unity3d.player包下的UnityPlayer类 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获得jc所代表的类下currentActivity的对象,现在jo就=AS下的MainActivity AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); //调用MainActivity的方法,没有返回值直接调用Call,有返回值调用Call<参数类型>(方法名,参数) jo.Call<int>("add",1,2); } }2.Android调用Unity方法:
首先要在Unity中新建一个脚步供Android调用的方法,
public void AndroidCallUnity() { Debug.Log("AndroidCallUnity is pass"); }然后回到AS里面的MainActivity,这里有三个参数
UnityPlayer.UnitySendMessage(s:"Unity挂载脚步的物体名称",s1:"方法名",s2:"参数");
最后在AS Build,把libs和res替换掉unity里面就完成了