老规矩,先安装unity,再安装安卓平台,安装AndroidStudio ,安装JDK,安装SDK
配置JDK 环境,在Unity里面引用SDK 和 JDK

Unity中的Android Build Support下载
在Unity中的File>Building Settings>Android>Open Download Page
或在Unity官网下载对应版本的Unity安装助手自行追加安装

JDK下载(请勿使用JDK9,JDK8u152,JDK8u151任选,x64版本出现签名错误的话可以尝试x86版本)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Android Studio下载(能打开哪个用哪个)
https://developer.android.com/
https://developer.android.google.cn/index.html
http://www.androiddevtools.cn/
链接:https://pan.baidu.com/s/1yliepB4sO5qz2df38-vEHQ
提取码:pang



一般在AndroidStudio 里面下载SDK ,也可以在网站下载
https://www.androiddevtools.cn/

如果是IL2Cpp打包方式的话还需要下载NDK
https://developer.android.google.cn/ndk/downloads/



选择custom 可以在后面安装的时候,自己定义选择安装的位置,不然默认安装在C盘,会非常大

三种BuildSystem的简介


这两个方便调试和监测性能

用原生方式创建签名
Win + R
CMD 打开命令行窗口 cd 到你安装jdk 的目录

使用命令行创建

是用Unity Remote 记得先在AndroidStudio 里面安装google use driver 谷歌USB 驱动

设置1

手机开发者选项设置支持USB 调试,USB 安装
失败原因:
其实并不是手机root没root的原因。
真正的原因是我们操作错误导致无法调试的。
正确操作步骤:
1.将手机插到电脑上(并且保证你的手机开启了调试模式)
2.开启手机中的unity remote软件
3.打开unity(注意:在手机没运行unity remote软件的时候千万不可以开启unity!!)
4.将unity中的Edit->ProjectSettings->Editor->UnityRemote(其中的Device选项选择你当前使用的手机系统Android/IOS)
5.现在,运行你的unity工程吧
6.成功

刚开始我一直试也没用
后面先开remote 再开unity 就可以了

太牛了 哈哈哈哈哈哈哈


Unity Remote 只能进行一些简单的调试,真正运行还是在Unity 编辑器上运行
所以我们接下来可以进行AVD 调试 ,在AndroidStudio 上创建一个虚拟的设备


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210202171444561.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbmdQYW5nUGlnMTIz,size_16,color_FFFFFF,t_70


这里可以选更高版本的Oreo x86_64



接下来便能启动一个真正的设备,纯原生安卓系统
然后我们回到unity build and run 在虚拟设备上运行

不使用AndroidStudio的Logcat 去查看日志,可以使用命令行进入ADB 目录下查看日志


还有种办法就是运行夜神安卓模拟器 连接AndroidStudio

接下来讲述的事Unity 打出来的包对设备的适应

无论后面的窗口有多大,小三角和蓝色原点的距离都不会变

如果需要让背景跟随屏幕大小改变,则

想让图片按一定的百分比显示在父物体上,

一般是这样拖 ,或者直接四个三角和4个原点


手动设置缩放比较麻烦
接下来可以使用Canvas 的缩放

一般填1280 * 720的分辨率
完成Canvas 的自适应后,接下来是设置视口的自适应

这种模式是高度自适应,宽度裁剪剔除
只能写脚本,让宽度也自适应

这方法只对正交的摄像机有效

using UnityEngine;public class CamearAdaptation : MonoBehaviour
{public float initOrthoSize;public float initWidth;public float initHeight;float factWidth;float factHeight;void Start () {factWidth = Screen.width;factHeight = Screen.height;//实际正交视口 = 初始正交视口 * 初始宽高比 / 实际宽高比GetComponent<Camera>().orthographicSize = (initOrthoSize * (initWidth / initHeight)) / (factWidth / factHeight);}
}

移动端的触屏 Touch 类的一些常见方法

using UnityEngine;
using UnityEngine.UI;public class TouchDemo : MonoBehaviour
{public GameObject effectPrefab;public Text infoText;GameObject markGo;string info;Vector2 touchOrigin;void Start(){Input.backButtonLeavesApp = true;}void Update () {if (Input.GetKeyDown(KeyCode.Escape)){info += "Escape\n";}//所有Touch类在PC端均不生效//每当一个手指触摸屏幕时,Unity都会为其生成一个Touch对象//Input.touchCount可以获取当前Touch对象的个数if (Input.touchCount > 0){info = string.Empty;//以下三行在移动端也生效,带来方便的同时也会带来隐患info += "GetMouseButton(0) : " + Input.GetMouseButton(0) + "\n";info += "GetAxis(\"Mouse X\") : " + Input.GetAxis("Mouse X") + "\n";info += "GetAxis(\"Mouse Y\") : " + Input.GetAxis("Mouse Y") + "\n";info += "touchCount : " + Input.touchCount + "\n";//Unity会将当前存在的所有Touch对象放在Input.touches这个数组中//另一种方式获取指定Index的Touch对象:Input.GetTouch(index);Touch myTouch = Input.touches[0];//fingerId是用来识别当前手指的唯一标示info += "fingerId : " + myTouch.fingerId + "\n";//deltaPosition当前位置与上次位置之间的差info += "deltaPosition : " + myTouch.deltaPosition + "\n";//deltaTime本次记录Touch对象状态与上次记录Touch状态之间的时间差info += "deltaTime : " + myTouch.deltaTime + "\n";//Touch对象的生命周期的结束并不是手指离开屏幕后立刻销毁//如果一根手指在同一位置快速点击,则视作同一Touch对象//tapCount为Touch对象所对应的手指点击屏幕的次数info += "tapCount : " + myTouch.tapCount + "\n";//phase表示当前手指所对应的Touch对象的阶段(状态)info += "phase : " + myTouch.phase + "\n";//rawPosition为当前Touch对象所对应的手指的初始(刚按下时)屏幕坐标info += "rawPosition : " + myTouch.rawPosition + "\n";//position为当前Touch对象所对应的手指的屏幕坐标info += "position : " + myTouch.position + "\n";switch (myTouch.phase){//当一个手指刚按下时,其对应的Touch对象的Phase是Begancase TouchPhase.Began:touchOrigin = myTouch.position;markGo = Instantiate(effectPrefab, Camera.main.ScreenToWorldPoint(myTouch.position) + new Vector3(0, 0, 10), Quaternion.identity);break;//当一个手指在屏幕上移动时,其对应的Touch对象的Phase是Movedcase TouchPhase.Moved://当一个手指在屏幕上按住不动时,其对应的Touch对象的Phase是Stationarycase TouchPhase.Stationary:markGo.transform.position = Camera.main.ScreenToWorldPoint(myTouch.position) + new Vector3(0, 0, 10);break;//当一个手指离开屏幕时,其对应的Touch对象的Phase是Endedcase TouchPhase.Ended://当因为某些原因(系统原因)取消对某个手指的追踪时,其对应的Touch对象的Phase是Canceledcase TouchPhase.Canceled:**滑动手势判断**if (touchOrigin.x >= 0 && touchOrigin.y >= 0){Vector2 touchEnd = myTouch.position;float x = touchEnd.x - touchOrigin.x;float y = touchEnd.y - touchOrigin.y;if (Mathf.Abs(x) > Mathf.Abs(y)){if (x > 0.25f){info += "dir : Right\n";}else if (x < -0.25f){info += "dir : Left\n";}else{info += "dir : Unknow\n";}}else{if (y > 0.25f){info += "dir : Up\n";}else if (y < -0.25f){info += "dir : Down\n";}else{info += "dir : Unknow\n";}}}Destroy(markGo);break;default:break;}}infoText.text = info;}
}

unity 打包的app 返回键由uniy app 接管
添加此方法可以把返回键功能交还给Android 接管
接管后,app 不会执行Exscap 键里面的功能,而是直接退出app


Android 和 IOS

不用EasyTouch 虚拟摇杆 ,而是用Unity自带的资源来实现摇杆

如果之前安装时没勾选Standard 资源的 请在Hub上下载 或者在Asset Store 搜索Standard 下载

里面有许多控制的案例,要保证控制开着


获取摇杆水平方向上的拖动, 使用Input.GetAxis(“Horizontal”) 获取不值

接下来是Unity 与安卓的交互****这一节很重要

Unity 跟安卓交互 在打包APK 上
Unity 可以打包APK ,也可以修改好功能后导出包 到AndroidStudio 上打APK ,在AndroidStudio 上写Java 代码来实现对安卓的调用,,当然也可以将Java 代码打包成Jar 包放到Unity 中调用
Android 里面每一个界面或页面都是一个Activity
Unity 里面所有场景界面只有一个Activity ==> MainActivity
可以在Android 里扩充Unity 的MainActivity 也可以让Android提供Plugins 供Unity 使用
调用方式:
方法可以在Android 里用Java 写 ,也可以在Unity里面用C#写

新建一个AndroidStudio 工程 语言选Java 然后


命完名字后点Finish 即可


新建空的Activity


删掉这个Xml布局

这句话也删掉

导入Unity 的支持包,这样才能调用Unity 里面的东西扩展MainActivity里面的东西
E:\Unity2019.3.7f1\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
复制里面的classes.jar 包到Android 工程的 上面创建的那个库的 libs 文件夹

右键点击jar 包

添加jar到新建的库
添加完后 界面调回Android
把App AndroidManifest 里的代码复制到创建的库文件里的AndroidManifest

报红色的就删除, Label 改为应用的名字

删掉这行时要把小尖括号给到上面
android:supportsRtl=“true”>
lable 是应用显示的名字

加上这句

接下来在库里的MainActivity里面写代码
2017版本的jar 包有UnityPlayerActivity

2019版本的Classes Jar 包里面没有
新版的Unity中UnityPlayerActivity类被单独提取出来,放在Editor\2019.3.15f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player目录下
(将其与mainActivity.java放到一个目录下,不然mainActivity找不到ta)

完成后,添加一个方法

接下来选中库 然后 Build

新版AndroidStudio生成的模块不在Bundles 文件夹了 而是在
output 的 aar 那里

把aar 包解压出来

然后删掉libs 里面的Classes.jar 把外层的classes.jar 拖进去 重新压缩成一个aar 文件
把libs res 以及这个文件夹的AndroidManifest 文件拷贝出来出来放桌面,待会还要用到unity 上

修改AndroidManifest 文件里的包名,为unity里面的包名,包名全部写出小写

Unity-Android常见的那些骚操作相关推荐

  1. 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送

    写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...

  2. Android文件存储编程实验,Android编程中File文件常见存储与读取操作demo示例

    本文实例讲述了Android编程中File文件常见存储与读取操作.分享给大家供大家参考,具体如下: MainActivity文件代码如下: package example.com.myapplicat ...

  3. iphone6s 刷android,iPhone也能刷安卓,只限两款手机,国外大神骚操作

    原标题:iPhone也能刷安卓,只限两款手机,国外大神骚操作 近日,有外国团队打破了iPhone与Android的界限,成功地在iPhone上跑起了Android系统!该团队推出了Project Sa ...

  4. Android微信小尾巴,微信骚操作,微信聊天小尾巴这样自定义设置,安卓苹果都支持...

    原标题:微信骚操作,微信聊天小尾巴这样自定义设置,安卓苹果都支持 前段时间,在大家"拍一拍"玩得不亦乐乎的时候,有小伙伴问我微信聊天的小尾巴怎么实现? 当时,给我发来一张效果图,当 ...

  5. Android常见的问题

    转载:http://stane.sinaapp.com/android面试必过-android常见的问题/ 水平有限,有错误请提出来. Android常见的问题 标签(空格分隔): 移动开发 常见算法 ...

  6. K项目的一些心得之全球模板里的几个骚操作

    K项目的一些心得之全球模板里的几个骚操作 1,数据迁移阶段,物料主数据分类视图里,batch class的代码跟物料号相同. 这意味着如果需要迁移的物料有1万个,导入程序会自动创建1万023类型的分类 ...

  7. unity android模糊ios清晰,Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题

    一般我们在Unity项目中,都是美术给到图片,然后程序直接导入Unity,Android端给图片设置为 RBGA Compressed ETC2 8bit,iOS端给图片设置为 RBGA Compre ...

  8. RabbitMQ 的这些骚操作你知道吗?

    RabbitMQ的Java客户端统一使用com.rabbitmq.client作为顶级包名.其中,最核心的类主要有:ConnectionFactory.Connection.Channel.Consu ...

  9. 骚操作!用Python自动下载抖音美丽小姐姐(有对象的同学小心尝试!)

    阅读文本大概需要 15 分钟. 1 目 标 场 景 相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯. 如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜值高的小 ...

最新文章

  1. windows2016重新配置sid
  2. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码
  3. java例子:数组 数3退1
  4. 逻辑回归、线性回归直观感受
  5. linux find 命令详解
  6. 覆盖17类面试题小结
  7. loss曲线 pytorch_PyTorch应用:用ResNet进行交通标志分类
  8. 解决 Orange Pi 烧录完系统后剩余可用空间过少的问题
  9. keil5 项目管理
  10. 有道词典(android)v4.3.3去广告清爽版+离线词,有道词典4.3.3安
  11. html怎么改变字段字体,怎么换字体?
  12. html导航栏的颜色怎么改变,我怎样才能改变导航栏的背景颜色
  13. opencv抠出圆形区域_用OpenCV检测圆形区域(包含大量小对象)
  14. 水量调节大师外挂___安卓版
  15. 如何防止局域网病毒春风吹又生--之一
  16. 【Bzoj2242】计算器
  17. 网络基础2---->网络数据传输(局域网)
  18. 纳秒脉冲等离子体放电
  19. 彻底删除2345输入法
  20. 有没有人可以解答一下?

热门文章

  1. PHP技术名词解释题,[名词解释] 技术质量
  2. 校企合作 | 璞华×中南财经政法大学,共建教学实习(就业实践)基地
  3. BUG:Win由于找不到iutils.dIl 无法继续执行代码……
  4. null 和undefined的区别,以及undefined和undeclared的区别
  5. 安卓手机安装Linux双系统,【12-31】关于安卓手机实现双系统原理及其方法
  6. windows下的安装使用Vagrant,Docker
  7. mysql 触发器采坑记录(mysql 触发器采坑记录 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行。 当创建触发器(视图、存储过程、函数)时,如果没有)
  8. 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)
  9. 主食应为主少吃饭多吃菜是误区
  10. proteus矩阵按键计算机,基于proteus的51单片机仿真实例八十二、4X4矩阵键盘应用实例...