canvas教程

实现Unity和Android进行交互

字号+ 作者:H5之家 来源:H5之家 2017-04-10 09:02 我要评论( )

1.背景 ??这里的实现是在Android studio 2.2和Unity 5.4上。本人是Android开发者,因为公司的业务需求需要与unity进行对接。那么暴露出来最需要解决的问题就是android上实现的方法和unity脚本上实现的方法如何进行相互的调用。在解决该问题的过程中,找了很

1.背景

??这里的实现是在Android studio 2.2和Unity 5.4上。本人是Android开发者,因为公司的业务需求需要与unity进行对接。那么暴露出来最需要解决的问题就是android上实现的方法和unity脚本上实现的方法如何进行相互的调用。在解决该问题的过程中,找了很多的教程以及google了很多其中问题的解决方法。下面就是我整理出来的一些操作步骤和问题的解决方式。

2 Android上的操作 2.1 新建Android项目

??首先新建一个android项目,file-->new-->new project,这里新建项目的名称为UnityAndroid,包名为cn.unity.android,一直点击next到finish就ok了。


新建android项目


??然后将项目切换成project的格式,打开app目录下的build.gradle文件,将apply plugin: 'com.android.application',改成apply plugin: 'com.android.library',因为android studio只有在这种格式下才可以导出unity需要使用的aar或者jar文件。然后删除defaultConfig下的applicationId,去掉默认的dependencies下的
compile 'com.android.support:appcompat-v7:25.0.0'的引入,因为这里不需要用到它,而且这个包包含了很多的资源文件我们是用不到的,最后格式为。


build.gradle文件


project格式


??接下来我们需要修改AndroidManifest文件和res文件,首先删除values下的style.xml文件,因为这里面默认包含的是之前删除的com.android.support:appcompat-v7:25.0.0包里面的主题。然后修改AndroidManifest文件中application下的theme为android自带的主题。同时将<activity android:name=".MainActivity">修改为<activity android:name="cn.unity.android.MainActivity">,防止在unity中导出的app与AndroidManifest中的包名不一致产生的问题。
??然后添加<meta-data>信息,否则在 Unity 导出 APK 时会报找不到manifest 文件的错误信息

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

??最后得到的AndroidManifest和res的格式如下


修改后的AndroidManifest


res目录结构

2.2 引入unity的 classes.jar包

??找到unity的classes.jar包。windows下和mac下包的路径分别为
C:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\classes.jar
/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Classes\classes.jar
??将其拷贝到UnityAndroid项目app目录下的libs目录下,然后进行导入,导入之后可以发现在build.gradle中就有他的引入了。


导入classes.jar


classes.jar导入成功

2.3 为unity写android方法

??首先需要让MainActivity继承UnityPlayerActivity,因为unity导出的app的视图展示需要在UnityPlayerActivity下。假如MainActivity继承的是Activity,那么显示的就是Android自己的界面。在这里我们写两个方法,一个是弹出Toast通知,一个是获取当前时间,具体代码如下。

package cn.unity.android; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.widget.Toast; import com.unity3d.player.UnityPlayerActivity; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; { private Toast mToast; { super.onCreate(savedInstanceState); } String text) { new Handler(Looper.getMainLooper()).post(new Runnable() { { if (mToast == null) { mToast = Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT); } else { mToast.setText(text); } mToast.show(); } }); } public String getNowTime() { long time = System.currentTimeMillis(); return new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.CHINESE).format(new Date(time)); } }

??接下来需要导出aar包和jar包,为接下来unity调用提供方法。点击build-->build apk,然后在app-->build-->outputs-->aar目录下的到app-debug.aar文件

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android学习笔记:Paint及Canvas的简单应用

    Android学习笔记:Paint及Canvas的简单应用

    2017-04-08 13:06

  • Node + FFmpeg 实现Canvas动画导出视频

    Node + FFmpeg 实现Canvas动画导出视频

    2017-04-05 18:03

  • Android Canvas练习(9)自已绘分割突出效果的饼图(Pie Chart)

    Android Canvas练习(9)自已绘分割突出效果的饼图(Pie Chart)

    2017-04-04 17:01

  • canvas实现钟表效果

    canvas实现钟表效果

    2017-04-04 11:04

网友点评