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. Tomcat启动中文乱码,淇℃伅等

    打开Tomcat根目录下的conf文件夹,打开logging.properties. 把 java.util.logging.ConsoleHandler.encoding = UTF-8 换成 ja ...

  2. js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { ...

  3. 【线段树哈希】「Balkan OI 2016」Haker

    1A海星 题目大意 给你一个长度为 $n$ ,由小写字母构成的字符串 $S$ 和 $Q$ 个操作,每个操作是以下 3 种之一: 1 x y k :询问当前字符串从位置 $x$ 到 $y$ 的子串与从位 ...

  4. jquery实现静态页面include

    最近在写一套前端页面,发现每个页面都复制一遍公共头.尾,十分不方便.于是就想能否也像PHP模板引擎一样,使用include引入公共文件,这便是接下来这段代码的意义.我们先来总结一下需求: 1.可以像使 ...

  5. Codeforces 852F String Compression

    题目 OvO http://codeforces.com/contest/825/problem/F 题解 KMP+DP 十分优雅地利用了KMP的fail数组 fail[k]表示第k个后缀的的fail ...

  6. 二叉树的序遍历x(内含结构体与非结构体版x)

    3143 codevs 二叉树的序遍历 题目描述 Description 求一棵二叉树的前序遍历,中序遍历和后序遍历 输入描述 Input Description 第一行一个整数n,表示这棵树的节点个 ...

  7. 家庭问题x

    [问题描述] 有n个人,编号为1,2,……n,另外还知道存在K个关系.一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员. 当n,k和k个关系给出之后,求出其中共有多少个家庭.最大的家庭 ...

  8. 【CUDA 基础】3.5 展开循环

    title: [CUDA 基础]3.5 展开循环 categories: - CUDA - Freshman tags: - 展开归约 - 归约 - 模板函数 toc: true date: 2018 ...

  9. 关于int main(int argc,char* argv[])详解

    平时在VS的环境下,主函数总会看到这两个参数,今天突然很想知道这两个参数的原理以及作用,因此查了下资料.真心受教了. 下面的博文是在百度空间看一位大神的,原文链接:http://hi.baidu.co ...

  10. js输入密文弹出数字键盘

    我们经常被产品要求,在移动端的web页面上的输入框输入密码时要弹出数字键盘,而不是全键盘,这个该怎么实现呢? 1.首先要弹出数字键盘,我们只能把input框的type从password改为tel 2. ...