Unity(2019)嵌入安卓开发-实现相互跳转
思路
先将unity打包成as能识别的文件格式,里面需要包含从unity跳转到安卓原生界面的方法。然后在as中导入unity打包好的模块,添加一些配置信息,添加从原生安卓界面跳转到unity的方法,最后打包apk测试即可
流程
先在unity中添加跳转到安卓的方法
AndroidJavaObject jo;
public Button btn;
private void Awake()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
btn.onClick.AddListener(CallAndroid);
}
public void CallAndroid()//这个是从unity跳转到原生app界面的方法,这里用到的个人的理解是反射的原理,通过在unity获得java的反射从而调用他的方法(纯粹个人猜测)
{
jo.Call("ShowToast");
Debug.Log("点击按钮");
System.Console.WriteLine("点击按钮");
}
注意
这两坨是不能改的(看大佬的帖子是这么说的,还没试过修改)
然后在场景中添加一个button的ui,把脚本挂载到场景中的某个物体,然后把button挂载到脚本上即可
然后打包
2019是这么操作的,由于项目升级,2018的打包方式和2019是不一样的,18的话点击gradle打包方式就可以了
AS配置unity的信息
这里可以看下面这两个大佬的帖子,写的很详细,跟着做就行了
https://blog.csdn.net/weixin_43271060/article/details/109547834
https://blog.csdn.net/qq_45888298/article/details/104209044?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control
这里我主要以第二个帖子为主进行的配置
在as里找到setting.gradle配置文件,然后添加
include ':unityLibrary'
project(':unityLibrary').projectDir=new File('F:\\test\\unityLibrary')
这两行代码,意思是让as去找对应路径下的unity打包好的项目
然后
在app模块的build.gradle里添加
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])
这两行代码,这里我的大概理解是把里面的jar add as library的方法
然后还需要
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
这行代码,这里我感觉和前面的用处差不多,不过没有仔细研究
然后sync一下,如果找不到的话,可以
右上角的红框,点击是一样的效果
然后就能看到unitylibrary导入在我们的as 里了
然后打开unitylibrary的androidmanifest.xml文件,吧把红框里的注释掉
不然apk在生成的时候会出现两个apk。一个是原生的,一个是unity的
到这里as 的配置也差不多了,接下来就是添加互相跳转的方法即可
as添加跳转至unity的方法
在app的MainActivity类里添加下面的代码
这里的意思是给原生app界面里的button添加监听事件,当点击的时候则跳转到unity的activity里
上面是在as里简单添加button的流程(本人对as的使用不熟练,用的都是比较简单的~)
记住这里button 的id,我们上面跳转到unity的方法里需要用到这个button的id来找到这个button
as添加unity跳转到app的方法
在app模块的路径下,创建一个新的activity类,然后继承unityplayerActivity这个父类
添加下面的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_unity);
}
public void ShowToast(){
Intent intent = new Intent(this,MainActivity.class);
this.startActivity(intent);
}
需要引用的alt+enter让程序自动添加引用即可
到这里就可以进行打包调试了
调试的方法
pc上
然后ok即可
手机上
打开开发者选项(没有的在关于手机里点多几次版本号就有了)
打开usb调试,注意,这里我的手机是neo5,点击管理文件的话as是识别不了的,我是点击传输照片才行的
然后点击
这个播放键,手机就会自动安装我们写好的程序
这里需要注意,打包好后,如果有的大佬和我一样出现了string
类似这种问题的话,需要在
路径下添加这个代码
<string name="game_view_content_description">Game view</string>
小的也不是很懂这个代码的含义,但能解决string出现的问题
然后测试运行即可,到这里小弟的跳转功能就实现了,就是从app跳转到unity上的时间会有点长
历经将近半年的时间,终于把这个难关打通了~其实之前已经基本实现了,就是卡在string这个bug上,一直不知道怎么解决,就搁置了,之前使用的是2018的版本,所以2018的跳转按照流程来走的话应该是没问题的,只要在string.xml文件里添加上面的代码就能解决
解决了就一个字,爽!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
加油,不能骄傲~
后期项目就要开始负责了,成长系统任务系统装备系统等等等等,还有资源热更新的问题,让一个半路出家的人来承受确实顶,希望能坚持住吧,加油~
同天晚上更新
有些细节没有处理
1,app跳转到unity的时候虽然能正常运行,但时间太长
2,当从unity跳转到app的时候,回来都是重新打开的状态,体验极差
这两个目前感觉只能从as上下手,但是本人对as的研究太浅,网上对这些的处理有的行不通, 有的是看不懂,这些问题只能等大佬或者以后自己研究研究解答了
隔天更新一下有关两个项目的包名是否需要一致的问题,这里我测试的时候用的不是一致的包名,也能够正常运行,所以应该是不用一致的
不过这可能只适用于2019版本及以上,以下的话就不清楚了~
转载:https://blog.csdn.net/pure81/article/details/116425911