1 UI自适应(UGUI)

UI自适应又分为锚点自适应和缩放。锚点主要控制UI控件在父控件之中的位置,同时也能影响缩放。

锚点自适应缩放:

我们使用UGUI创建一个界面,设计使用1920x1080分辨率

在我们设计好,然后改变设计大小时,会发生意想不到的情况

这个时候我们可以使用锚点的自适应,在这里选择好缩放方法和设计尺寸

然后不管我们怎么缩放,都能够很好的适配

2 视口自适应(摄像机)

首先创建一个场景

然后我们改变视口大小,发现Unity的自适应做的很好,只不过它是优先保证高度看全,自动裁剪宽度上的东西

有的时候我们需要宽度看全,高度不需要。这个时候我们可以在摄像机上挂一个脚本来控制。

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);
}
}

3 Touch类介绍

下面的代码包含了Touch类的一些成员,然后使用这个做了一个手指追踪的小Demo和单手势识别的小Demo,还有返回键的操控权,以及双端通用的API

using UnityEngine;
using UnityEngine.UI; public class TouchDemo : MonoBehaviour
{
public GameObject effectPrefab;
public Text infoText;
GameObject markGo;
string info;
Vector2 touchOrigin; void Start()
{
// 这句代码表示使用Android的返回键直接退出App
Input.backButtonLeavesApp = true;
} void Update ()
{
// 返回键,点击Android的返回键会调用
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是Began
case TouchPhase.Began:
touchOrigin = myTouch.position;
markGo = Instantiate(effectPrefab, Camera.main.ScreenToWorldPoint(myTouch.position) + new Vector3(0, 0, 10), Quaternion.identity);
break;
//当一个手指在屏幕上移动时,其对应的Touch对象的Phase是Moved
case TouchPhase.Moved:
//当一个手指在屏幕上按住不动时,其对应的Touch对象的Phase是Stationary
case TouchPhase.Stationary:
markGo.transform.position = Camera.main.ScreenToWorldPoint(myTouch.position) + new Vector3(0, 0, 10);
break;
//当一个手指离开屏幕时,其对应的Touch对象的Phase是Ended
case TouchPhase.Ended:
//当因为某些原因(系统原因)取消对某个手指的追踪时,其对应的Touch对象的Phase是Canceled
case 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;
}
}

4 虚拟摇杆

Unity官方自带了虚拟摇杆,但是我们使用Easy Touch 5这个插件来控制虚拟摇杆和触摸

Android开发 移动端适配的更多相关文章

  1. Android APP 多端适配

    Android APP 多端适配 传统的多终端适配方案,是为大尺寸 Pad开发一个特定的 HD版本. 但是目前支持 Android 系统的设备类型越来越丰富,不同类型的设备尺寸也越来越多样化,特定的H ...

  2. web开发中移动端适配

    这个话题有些复杂,说起来有些琐碎,因为和移动端适配相关的问题太多了. 1. 概念 1.1 设备像素 设备像素被称为物理像素,它是显示设备中一个最小的物理部件.每个像素可以根据操作系统设置自己的颜色和亮 ...

  3. android 开发对gif解码(适配android 4.2、4.3、4.4版本)

    android 开发对gif解码(适配android 4.2.4.3.4.4版本) 使用方法: public class ImageInputActivity extends Activity imp ...

  4. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  5. Android 开发中的屏幕适配技术详解

    本文主要介绍Android开发中比较头疼繁琐的一个问题-屏幕适配问题.主要从适配原因.基本核心概念.适配方法等方面介详细 介绍从而是的深入或者进一步对Android屏幕适配技术的掌握和理解. 真题园网 ...

  6. 职业定位(移动端、ios开发、Android开发)

    移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...

  7. Python 制作Android开发 所需的适配不同分辨率的套图

    使用Python做起工具来还真是爽,简单,方便,快捷.今天忙活了一下,制作出一个比较实用的小工具. 自动化套图制作,适配不同屏幕 尤其是对于android开发来说,要适配不同屏幕就需要多套切图,那么. ...

  8. android开发分辨率适配总结

    重要概念 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 什么是dp.dip.dpi.sp.px?他们之间的关系是什么? 什么是mdpi.hdpi.xdpi.xxdpi?如何计算和区分? 在下面的内容中我 ...

  9. Android开发——Android手机屏幕适配方案总结

    )密度无关像素,单位为dp,是Android特有的单位 Android开发时通常使用dp而不是px单位设置图片大小,因为它可以保证在不同屏幕像素密度的设备上显示相同的效果. /** * dp与px的转 ...

随机推荐

  1. 【洛谷P4172】水管局长

    题目大意:给定 N 个点,M 条边的无向图,支持两种操作:动态删边和查询任意两点之间路径上边权的最大值最小是多少. 题解: 引理:对原图求最小生成树,可以保证任意两点之间的路径上边权的最大值取得最小值 ...

  2. SOA架构分析

    SOA架构的定义: 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于 ...

  3. webpack 配置文件说明

    var path = require("path"); var webpack = require("webpack"); var HtmlwebpackPlu ...

  4. nginx 入门实战

    nginx入门实战 nginx 安装与卸载 下载安装 进入 http://nginx.org/en/download.html 下载自己想要的版本,我选择的stable版本 tar -zxvf ngi ...

  5. 消息模板-RabbitTemplate

    RabbitTemplate是我们在与SpringAMQP整合的时候进行发送消息的关键类该类提供了丰富的发送消息的方法,包括可靠性消息投递.回调监听消息接口ConfirmCallback.返回值确认接 ...

  6. window7上爬虫框架Scrapy的安装 --错误分析lxml

    本文讲解的是python已经安装成功的情况下,且pip可以使用 版本:python2.7.10 #安装 pip install Scrapy 在安装Scrapy框架时总会报lxml安装不了的各种错误, ...

  7. nginx中location匹配规则介绍

    一,匹配规则 1,= 表示精确匹配 例子:http://localhost/  将匹配到 location = / {...} http://localhost/aaa  可以匹配到 location ...

  8. selenium 入门(Java)

    官网:https://www.seleniumhq.org/ 下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 华 ...

  9. char能不能存储一个汉字

    答案是肯定的 请参见博客:https://www.cnblogs.com/1017hlbyr/p/6419016.html

  10. Win10 的微软输入法输入稍快竟然会导致死机

    一周前,新装机器一次,竟然死机两三次,多发生在敲字时,最近逐步排查发现的这个问题,查阅了一下网上方案,果断采用了第三方输入法,至今没再死机过. 不过第三方输入法也不安分,是不是推送点头条新闻过来,和驱 ...