查看: 1603|回复: 70

[游戏引擎技术] 关于Unity3d的多点触屏输入问题(转载)

[复制链接]

34

主题

25

听众

987

积分

Rank: 3Rank: 3

升级   32.47%

发表于 2013-9-29 08:47 |显示全部楼层
共享资源获取更多积分!share your resources get more credits!
最近在用Unity3D做一个2D的android手机休闲游戏,游戏中用两个GUItexture来控制角色左右行走和跳跃,第一次接触U3D觉得还是蛮很容易上手的。我整理了一下Manual里面关于Input的介绍,权当自己的学习小笔记吧。    接下来进入正题,来讨论一下角色控制的一个细节问题——输入。在Unity3D中,游戏中常用的输入设备有键盘,鼠标,多点触摸屏……当然还有摇杆之类的。看了一下虚拟摇杆实现方法,相当简单方便,配合GetAxis()方法天衣无缝。但是我这次开发游戏没用到,就不赘述了。键盘,鼠标作为最传统的输入设备,可以用GetButton(),GetButtonDown(),GetButtonUp(),来获取键盘的输入.一般用GetKey()方法也可以。当然还有GetKeyDown(),GetKeyUP().有什么区别呢?我测试了一下,其实每个key是有自己的名字的.在unity提供的manual里面可以查到。我这里做个笔记,稍微写几个最常用的。
  • 字母key:"a"'b'……
  • 数字key:"1","2"……
  • 方向键:"up","down","left","right"(是全小写的哟)
  • 小键盘的数字:"[1]","[2]"...
  • 控制键:"right shift","left ctrl"
  • 特殊键:"backspace","tab","escape","delete"...
  • 功能键:"F1","F2"...
  • 鼠标:"mouse 0","mouse 1","mouse 2"(分别是左右中)

   
    这些key的名字,只能作为GetKey()方法的参数,GetButton()方法的参数是在Project Settings里面定义的Button的名字。

    重点来讨论一下多点触摸的输入。unity为我们提供了一个结构体 "Touch"来处理多点触摸输入。
    Input.touches,它是Touch类型的数组,最多5个元素吧,android设备的话性能差异比较2到5都有可能)
    这个变量结构体数组变量就是用户的输入拉~我们来分解一下这个Touch是个结构体变量。它有这些成员:
  • fingerld:touches的下标
  • position:(Vector2),记录手指的x,y屏幕坐标
  • deltaPosition:(Vector2)上次位置变化的差值
  • deltaTime:(这里也有deltaTime?)(float型),从上次变化开始,总计多少时间
  • tepCount:点击的数量。(IPhone、IPed是可以识别手指的快速按键的,用来记录用户在同一个位置连续点了多少下。android设备是不计数的,默认是1)
  • phase:阶段。

    到目前为止,我只用到position和phase两个参数。认识一下phase这个参数,类型是TouchPhase(一个枚举类型,有以下5种情况)
  • .Began :按了屏幕
  • .Moved :在屏幕上滑动了
  • .Stationary :正在按着屏幕
  • .Ended:手指离开了屏幕(这是触摸输入的最后动作)
  • .Canceled:系统停止对触摸进行追踪,比如弹出个键盘啊,有第六根手指在按之类的情况.



   那么,虚拟按键是怎么实现的呢?先定义一个GUITexture button : GUITexture;
button.HitTest(Input.GetTouch(i).position);//如果按到了就返回true
    当然可以用phase当状态机。其实呢,向上面一句那么写是咋靠谱的,使用GetTouch()方法,必须要有Touch存在啊,要不然就下标越界了,得先判断。
    我用了一个很笨的办法,每个按键对应一个flag来判断是否down……

一点非常非常基础小知识。
http://blog.sina.com.cn/s/blog_7060e7c401015z5s.html

楼主热帖
已有 1 人评分鲜花 收起 理由
flyhe630 + 1 很给力!

总评分: 鲜花 + 1   查看全部评分

0

主题

20

听众

210

积分

Rank: 2

升级   3.33%

发表于 2017-5-9 10:27 |显示全部楼层
很不错
回复

使用道具 举报

0

主题

20

听众

203

积分

Rank: 2

升级   1%

发表于 2017-5-9 10:51 |显示全部楼层
顶顶多好
回复

使用道具 举报

0

主题

20

听众

203

积分

Rank: 2

升级   1%

发表于 2017-5-9 10:50 |显示全部楼层
难得一见的好帖
回复

使用道具 举报

0

主题

20

听众

203

积分

Rank: 2

升级   1%

发表于 2017-5-9 10:31 |显示全部楼层
说的非常好
回复

使用道具 举报

0

主题

20

听众

204

积分

Rank: 2

升级   1.33%

发表于 2017-5-9 10:56 |显示全部楼层
不错不错
回复

使用道具 举报

2

主题

20

听众

204

积分

Rank: 2

升级   1.33%

发表于 2017-8-16 15:45 |显示全部楼层
楼主是超人
回复

使用道具 举报

0

主题

20

听众

200

积分

Rank: 2

升级   0%

发表于 2017-8-16 15:12 |显示全部楼层
真心顶
回复

使用道具 举报

0

主题

20

听众

200

积分

Rank: 2

升级   0%

发表于 2017-8-16 14:55 |显示全部楼层
说的非常好
回复

使用道具 举报

0

主题

20

听众

200

积分

Rank: 2

升级   0%

发表于 2017-8-16 15:09 |显示全部楼层
很好哦
回复

使用道具 举报

温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

懒人模式:

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 苏ICP备12051100号 )   

GMT+8, 2019-11-22 16:54 , Processed in 0.115050 second(s), 46 queries .