Android集成Unity2019

最近,老板让我们将公司的项目,封装为Android可用的第三方插件。这让我们很为难,因为都没有接触过原生开发。但是限定时间一个月要完成。

怎么办???

由于有Unity开发经验所以可以以此类推,简单计划一下。

  1. 学习Android开发基础
  2. Android IDE基础学习
  3. JAVA基础学习
  4. Demo开发
  5. 断点调试、Bug修复
  6. 性能优化
  7. 与Unity结合

最先开始想到的教程是从B站上的视频看起,但是公司电脑耳机不能用,所以果断换!

  1. Unity提供的方法:将Unity作为library集成到Android原生开发https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.mdhttps://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md
  2. Unity手册中关于集成Unity到Android原生开发的描述及限制https://docs.unity3d.com/cn/2021.2/Manual/UnityasaLibrary.htmlhttps://docs.unity3d.com/cn/2021.2/Manual/UnityasaLibrary.html这里说到"在 Android 和 iOS 上,仅支持全屏渲染。无法仅在部分屏幕上渲染。"其实是个误解,后来找到一些链接可以做到部分显示。                                                                           这三个链接是重点!!!
    1. 可以看第5点. Android 自定义Unity显示形式https://www.jianshu.com/p/a68168463b29https://www.jianshu.com/p/a68168463b29
    2. Android与Unity交互研究(发布时间:2015年)https://blog.csdn.net/crazy1235/article/details/46733221https://blog.csdn.net/crazy1235/article/details/46733221
    3. Android Studio项目集成Unity详细教程https://www.jianshu.com/p/89372a431e86https://www.jianshu.com/p/89372a431e86
  3. Android Developer开发者中心提供的基础课程(中级)https://developer.android.google.cn/courses/fundamentals-training/overview-v2https://developer.android.google.cn/courses/fundamentals-training/overview-v2

跟着教程学习1天后,简单demo已经可以做了。所以就开始着手完成工作目标。

最开始,我是跟着百度上教程做的。但是由于教程大多都是使用Unity旧版本做的,在Unity2019.2前后,导出的Android 项目差别较大,所以在这里卡了很久。公司也无人可以请教,只能自己不停的试错。

后来想到:官方不是给Demo了嘛,就直接把公司项目导出为Android项目之后,进行替换不就可以了嘛!

然后又是痛苦的两天,遇到的错误非常繁多,因为刚接触,所以很多Error的深层意思理解不了,只能靠百度,然而跟着百度做的话,就是解决了这个问题又出现另一个问题,很煎熬,各种试错。期间重装过3次AndroidStudio(总觉得是人家IDE有问题,或者自己没装好,我想初学者很有同感吧)后来是从B站找的视频跟着重装的IDE。总结其中遇到的部分问题

比如:

  1. 添加另一个Activity,设置为默认启动
  2. 将UnityActivity默认启动取消后闪退
  3. gradle失败
  4. SDK license 未同意
  5. 找不到应用库地址
  6. Manifest合成失败
  7. 静态接口只能在AndroidN 使用
  8. 真机运行闪退
  9. 真机运行Activity频繁重启
  10. ...

这一周非常痛苦,都不知道该如何,连个可以问的人都没有。没办法,晚上就开始加班.....

后来周末的时候突然想到:莫非是我找的教程不对!!!

赶紧搜索“Android集成Unity2019”,果然,加上这个2019就找到了上边第2点中的两个,使用Unity2019进行开发的教程。

星期六一天,就在测试这两个教程。果然做出来了。

都说程序员是站在巨人的肩膀上的,但是你也要能找到巨人。如果你不够聪明,那就靠毅力和决心吧。

这里说明一下:第一个链接的第5点,没有讲明如何创建Activity的方法(题主是多年开发经验,但是对小白来说,这个无疑也是一座大山)                                 

我是将MainActivity直接继承UnityPlayerActivity的,这里还有一个坑,就是需要在luncher中添加引用,不然无法使用mUnityPlayer。方法如下

MainActivity源码

package com.emgent.ar;

import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
    private Button zoomInBtn, zoomOutBtn,fullScreen;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FrameLayout frameLayout = findViewById(R.id.u3d_layout);
        frameLayout.addView(mUnityPlayer);

        mUnityPlayer.requestFocus();

        zoomInBtn = findViewById(R.id.zoom_in_btn);
        zoomOutBtn = findViewById(R.id.zoom_out_btn);
        fullScreen = findViewById(R.id.u3d_fullscreen_btn);

        zoomInBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UnityPlayer.UnitySendMessage("Cube", "ZoomIn", "");
            }
        });
        zoomOutBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UnityPlayer.UnitySendMessage("Cube", "ZoomOut", "");
            }
        });
        fullScreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //TODO
            }

        });
    }
}

 继承UnityActivityPlayer后,layout配置需做相应变化

activity_main.xml源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#E0EEE0"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <!-- 3D视图区域 -->

    <FrameLayout
        android:id="@+id/u3d_layout"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:background="#a6a9af"
        android:orientation="vertical" >
    </FrameLayout>

    <!-- 放大 -->

    <Button
        android:id="@+id/zoom_in_btn"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:padding="10dp"
        android:text="@string/btn1" />

    <!-- 缩小 -->

    <Button
        android:id="@+id/zoom_out_btn"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:padding="10dp"
        android:text="@string/btn2" />

    <!-- 全屏 -->

    <Button
        android:id="@+id/u3d_fullscreen_btn"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:padding="10dp"
        android:text="@string/btn3" />
</LinearLayout >

然后就是原文中关于FramLayout的由来没有说明清楚,这个也困扰了我很久。

其实就是在MainActivity的布局文件中创建的FramLayout,这个创建过程,我是使用第2个教程中的配置参数做的。

如上图所示。

终于完成了集成使用AndroidStudio开发。

效果如下

Android集成Unity2019


以上为星期六在家测试基础Demo


星期一来到公司发现,公司项目引用了很多插件。如果在Luncher中添加引用的话,会报重复引用的错误。所以在Unity Library中直接创建了MainActivity就很顺畅了

这是第一个问题。

第二:启动运行,闪退。一开始我想到是像第二个链接里讲到的一样,需要在另一个线程里运行添加

android:process=":e.unitry3d"

 仍不能解决,后来使用logcat发现,需要给MainActivity添加Theme

android:theme="@style/UnityThemeSelector"

第三个问题:

MainActivity不停的关闭并开启。

一开始,我以为是什么设置不对,导致触发onConfigurationChanged

后来,一顿调试,logcat找了好久,都没有发现问题,后来用easy.bugly调试工具才发现,是程序报错引起的异常,因为使用了lua热更新,所以,windows平台拉取不到Android平台的资源。😡就这样,本来想着今天可以舒适的度过,结果一眨眼就到下午4点了......

公司还有人离职,还要交接别人的工作。道阻且长啊!

终于将公司项目给放到AndroidStudio里了。😜

接下来,如果有时间的话,要学学Android开发了🉑

不然这么一个简单的功能就快把人搞残了😱


                
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大只弱鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值