UM3L6——Android中嵌入Unity内容
UM3L6——Android中嵌入Unity内容
Android中嵌入Unity内容
在进行Android开发时,可能会有需求显示Unity开发的3D内容,一开始我们启动的是Android应用程序中的Activity
通过Activity我们想要打开Unity开发的内容进行展示,这就是Android中嵌入Unity内容的意思
注意:
Android中嵌入Unity存在限制问题,退出 Unity 所在的 Activity 会退出整个App,不能达到我们想要的需求
所以如果存在 Android 和 Unity 混合开发的情况,建议采用上节课的Unity中嵌入Android的方式
本节课内容主要做为拓展知识
新建Unity测试项目
在该项目中添加一些测试内容,比如方块旋转
123456789using UnityEngine;public class Test : MonoBehaviour{ void Update() { this.transform.Rotate(Vector3.up * 20 * Time.deltaTime); ...
UM3L5——Unity中嵌入Android内容
UM3L5——Unity中嵌入Android内容
Unity中嵌入Android内容
从 UM3L4——Android开发必备原理 中我们知道
在Android开发中Activity(活动)就是我们看到的一个界面(屏幕)
那么所谓的 Unity中嵌入Android内容 就是 通过Unity打开Android中制作好的Activity
让Unity可以和Android中制作的功能进行交互
注意:学习这部分知识我们只学习Unity如何开启Android中的Activity,具体的安卓开发相关需要自行学习安卓相关知识,不属于本课程范围内!
Unity中嵌入Android内容的关键点就是:最终打包时,我们需要在Unity中打包出安卓工程包后再使用Android Studio进行打包
根据各种报错信息来一步步的解决问题,缺少什么就添加什么,配置有问题就修改配置
如果以后有需求需要嵌入安卓相关内容,那么需要系统的学习一些安卓开发的相关知识,可以购买一些安卓开发相关书籍来学习
Activity创建
在Android项目中新建一个Activity并生成aar包
打开之前学习Unity和Androi ...
UM3L4——Android开发必备原理
UM3L4——Android开发必备原理
Android应用程序的基本构成
Android SDK:提供了用于开发Android应用程序的各种API和工具
编程语言:使用Java或者Kotlin语言进行开发,他们提供了丰富的库和API
XML配置文件:Android应用程序使用XML来定义UI布局、样式和资源信息等
应用程序组件组成
Android应用程序有四种组件组成:
Activity(活动)
主要用于实现用户界面,代表一个屏幕或窗口,包含了各种UI组件,按钮,文本,输入框等等
Service(服务)
是一种可以在后台执行长时间运行操作的组件,没有用户界面,一般用于处理和交互无关的逻辑
比如:上传、下载、音乐播放等
Broadcast Receiver(广播接收器)
主要用于接受系统或者其他应用程序发出的广播消息
消息可以来自系统事件(比如网络连接变化、设备启动等),也可以来自其它应用程序
Content Provider(内容提供程序)
用于管理应用程序数据,可以让其它应用程序或系统访问本应用中的数据,也可以让本应用访问其它应用或系统的数据
比如用 ...
UM3L3——Android中调用Unity内容
UM3L3——Android中调用Unity内容
本章代码关键字
1UnityPlayer.UnitySendMessage() //在安卓内执行Unity内内容,传入场景上的对象,再传入要调用的脚本的方法,再传入字符串参数
Android调用Unity规则
Android调用Unity相对比较简单,在Android端使用 UnityPlayer.UnitySendMessage API即可
想要被Android端调用的Unity函数
需要写在继承MonoBehaviour的脚本中
需要挂载在场景中处于激活状态的GameObject上
交互时,在Android端调用API:UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
注意:该API中的参数只能是String类型或者为null
测试交互
在Unity端创建测试脚本,编写测试函数
假设要调用这个类下的TestAndroidCallUnity,让屏幕上的UI输出传入的字符串
123456789101 ...
UM3L2——Unity中调用Android内容
UM3L2——Unity中调用Android内容
本章代码关键字
123456789AndroidJavaClass //安卓Java类,可以通过包名以及类名实例化androidJavaClass.GetStatic<>() //获取安卓Java类对象的方法,需要传入参数AndroidJavaObject //安卓Java类对象,通过它调用安卓的arr包内的内容androidJavaObject.Get<>() //获取成员变量androidJavaObject.Set<>() //设置成员变量androidJavaObject.GetStatic<>() //获取静态变量androidJavaObject.SetStatic<>() //设置静态变量androidJavaObject.Call<>() //执行成员方法android ...
UM3L1——交互项目创建
UM3L1——交互项目创建
这节课的主要目的就是创建之后用于生成aar包的Android Studio的工程,用于之后处理Unity和Android的交互逻辑
本节课制作的aar包,是用于和Unity进行交互的安卓包,操作的步骤不能有误,否则会影响之后的交互功能制作
创建Unity和Android Studio项目
创建Unity项目后,切换到Android平台,设置包名和Android版本
设置流程参考:UM1L1——新版Unity打包安卓应用程序
创建Android Studio
选择 Phone and Tablet,创建一个Empty Activity项目
注意:
包名和Minimum SDK版本要和Unity项目一致,若没有相同SDK版本,请在Android Studio中下载
创建完成后,等待加载结束后,删除工程中两个Test项目以及res下的无用资源
配置build.gradle文件
在Android Studio中Project页签中切换为Project
展开工程名下app页签,打开build.gradle文 ...
UM2L18——常用类库
UM2L18——常用类库
常用类库指什么
常用类库主要指Java中为了提升我们的开发效率
预先就已经写好的一些包,这些包中提供了很多常用类
目的是方便开发人员的使用,而无需再自己去实现
主要有以下内容:
变量类型的包装类 Integer、Double、Boolean、Character
存储较大数据的 BigInteger 类和 BigDecimal 类
数学计算类 Math
随机数类 Random
等等
本节课主要指明方向,由于这些知识只是API的使用
所以对于这些类的常用方法只会提及,不会举例,了解他们提供的方法名,基本就知道如何使用了
Java中提供了很多现成的类和方法供我们使用,对他们产生印象,当自己开发时有类似需求时
直接使用他们,可以提升我们的开发效率,因为无需我们自己去实现对应逻辑,直接使用即可
变量的包装类
Number
它是 Byte Integer Short Long Float Double类的父类
主要方法:
123456byteValue() 以byte形式返回指定的数值intValue() 以i ...
UM2L17——方法的引用和Function接口
UM2L17——方法的引用和Function接口
方法的引用
使用函数式接口去装载我们在类中声明的方法,而不是lambda表达式
不管是使用lambda表达式还是想要引用方法,我们都需要使用函数式接口来装载
除了Function以外Java中还写好了很多函数式接口供我们使用,用现成的还是自己写,自己决定即可
如何进行方法的引用
引用静态方法 类名::静态方法名
1234567891011121314interface ITest01 { void fun();}public class Lesson22 { public static void Test() { System.out.println("方法调用"); } public static void main(String[] args) { ITest01 t = Lesson22::Test; t.fun(); }}
输出:
1方法调用
...
UM2L16——lambda表达式
UM2L16——lambda表达式
Java中lambda表达式语法
Java中的lambda表达式和C#中区别很大,Java中没有委托和事件
只有通过函数式接口来存储lambda表达式来进行使用,Java的函数式接口可以充当C#中委托的角色
基本结构:(参数) -> {代码块}
基于基本结构的写法:
() -> {代码块};
() -> 结果表达式;(相当于返回值)
(参数) -> {代码块};
参数 -> {代码块}; (当参数只有一个时)
参数 -> 结果表达式;(相当于返回值)
(参数1,参数2,参数3...) -> {代码块};
(参数1,参数2,参数3...) -> 结果表达式;(相当于返回值)
用于装载lambda表达式的函数式接口
Java没有如C#那样的委托与事件,如果想要实现类似于委托那样的实现,我们可以通过函数式接口存储lambda表达式方法来实现
函数式接口指仅仅包含一个抽象方法的接 ...
UM2L15——异常处理
UM2L15——异常处理
本章代码关键字
12try { } catch { } finally { } //错误捕获exception.getMessage() //获取错误消息
Java异常处理
Java中的异常捕获和C#中使用基本一致,语法:
如果想要从报错类对象中获取信息,需要使用getMessage()
不管之前的代码块是否发生异常 finally 中的内容都将执行,除了以下的几种情况:
finally 语句块中发生异常
在finally之前执行了System.exit()退出程序
程序所在的线程销毁
关闭CPU
123456789101112131415161718192021try { //需要进行异常捕获的代码块} catch (NullPointerException ex) { //空指针报错 //ex.getMessage() //捕获异常信息} catch (ArrayIndexOut ...