文章目录
任何游戏都应该提供给用户交互的方式,根据不同的设备有不同的输入方式,比如像传统小霸王机的手柄,电脑的鼠标、键盘,手机平板的触摸、位置、重力感应输入等。为了能够更好的整理Unity的输入系统,暂时将其分为移动平台的输入和传统的输入。
移动平台的输入
在手机和pad上主要的输入方式就是:触摸,重力加速器,虚拟键盘等。Unity将这些操作都封装到了UnityEngine.Input和UnityEngine.TouchScreenKeyboard这两个类里。
触摸
触摸相关的函数
在UnityEngine.Input类中为我们提供了触摸相关的函数,以及在UnityEngine命名空间中涉及到的类,相关函数和类如下表:
函数表:
函数名 | 作用 |
---|---|
multiTouchEnabled | 是否启用多点触摸 |
simulateMouseWithTouches | 启用/禁用使用触碰仿真鼠标的操作 |
touchCount | 在此帧中的触摸数量 |
touches | 在上一帧中的触摸点(Touch)信息 |
touchSupported | 标示当前运行此程序的设备是否支持触摸 |
GetTouch | 根据触摸点的索引获取触摸点的信息 |
类表:
类名 | 作用 |
---|---|
Touch | 触摸点信息 |
TouchPhase | 触摸点的状态信息 |
触摸的一个示例
此示例主要实现如下三个功能:
- 显示触摸点的属性信息
- 显示点击到的物体
- 测试仿真鼠标
示例代码,如下:
public class TouchInputTest : MonoBehaviour {
public Camera m_mainCamera = null;
private bool m_isRatating = false;
private GameObject m_objRatation = null;
private float m_nSpeedRatation = 30.0f;
private float m_nTotalAngle = 0;
private const int nMaxSelectedSize = 5;
private string[] m_strSelectedGameObject = new string [nMaxSelectedSize]{
"", "", "", "", ""};
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
//将是否支持触碰
if (Input.touchSupported)
{
print("Number of touches:" + Input.touchCount);
print("Length of touches:" + Input.touches.Length);
print("---------------------------------------------");
for (int i = 0; i < Input.touches.Length; ++i )
{
Touch tch = Input.touches[i];
//打印触摸点的信息
print("Index:" + tch.fingerId);
print("State:" + tch.phase.ToString());
print("Positon:" + tch.position);
print("TapCount:" + tch.tapCount);
print("deltaPosition:" + tch.deltaPosition);
print(