Unity实现安卓虚拟摇杆多点触控
代碼示例在最下面
效果如圖:
1. Unity對(duì)于觸屏操作的支持
1.1. Touch結(jié)構(gòu)體
Unity使用結(jié)構(gòu)體Touch定義觸屏設(shè)備的輸入,每一個(gè)觸控點(diǎn)(可以理解為每一個(gè)手指)對(duì)應(yīng)一個(gè)Touch,其中主要的屬性如下:
| fingerId | 觸控點(diǎn)的編號(hào),在該觸控點(diǎn)的生命周期內(nèi)(從點(diǎn)下到抬起)是不變的 |
| phase | 觸控點(diǎn)的狀態(tài),是一個(gè)Touch.Phase枚舉,包括: Began(手指按下), Move(手指滑動(dòng)), Stationary(手指已經(jīng)按下且保持不動(dòng)), Ended(手指抬起), Canceled(系統(tǒng)停止跟蹤該觸控點(diǎn)) |
| position | 觸控點(diǎn)在屏幕的坐標(biāo)(屏幕坐標(biāo)系) |
其他的屬性參考https://docs.unity3d.com/ScriptReference/Touch.html
1.2. fingerId分配
需要注意的是對(duì)于fingerId的分配,類似于下面的過程:
使用一個(gè)數(shù)組表示哪些觸控點(diǎn)當(dāng)前被激活,初始為:
[0][0][0][0][0]
其中0表示未激活,1表示已激活。每按下一個(gè)手指時(shí),從頭尋找第一個(gè)未激活的空位,把它的索引賦給fingerId,例如按下第一個(gè)手指后,數(shù)組變?yōu)?#xff1a;
[1][0][0][0][0]
手指①的fingerId=0,這個(gè)時(shí)候再按下第二個(gè)手指,數(shù)組變?yōu)?#xff1a;
[1][1][0][0][0]
手指①的fingerId=0,手指②的fingerId=1,這個(gè)時(shí)候松開第一個(gè)手指,數(shù)組變?yōu)?#xff1a;
[0][1][0][0][0]
手指②的fingerId不變,還是1,這時(shí)候再按下第三個(gè)手指,數(shù)組變?yōu)?#xff1a;
[1][1][0][0][0]
手指②的fingerId不變,還是1,把數(shù)組的0號(hào)為給手指③,因此手指③的fingerId=0
1.3. Input類
Untiy的Input類中與Touch有關(guān)的API如下:
| Input.TouchCount | int, 觸控點(diǎn)數(shù)量,即當(dāng)前按下的手指數(shù) |
| Input.touches | Touch[],當(dāng)前所有的Touch結(jié)構(gòu)體數(shù)組 |
| Input.GetTouch(int index) | 返回第index個(gè)Touch,index與fingerId無關(guān) |
| Input.multiTouchEnabled{get;set;} | 是否支持多點(diǎn)觸控 |
2. 多點(diǎn)觸控
當(dāng)存在多個(gè)搖桿時(shí),需要控制每個(gè)搖桿對(duì)應(yīng)的fingerId,這里把搖桿類命名為JoyStick,另外定義一個(gè)控制類TouchEvent用于管理Touch與JoyStick的對(duì)應(yīng)關(guān)系,TouchEvent在每次Update中讀取所有的Touch:
代碼如下:
TouchEvent.cs
3. 搖桿實(shí)現(xiàn)思路
搖桿就是一個(gè)大圈+一個(gè)小圈組成,并且有一個(gè)可以觸發(fā)的區(qū)域,如圖:
矩形白色區(qū)域代表可以開始觸控的區(qū)域,當(dāng)手指按下時(shí),把大圈的位置設(shè)為Touch的position,當(dāng)手指滑動(dòng)時(shí),讓小圈跟著動(dòng),并且限制它相對(duì)大圈的最大距離。
代碼如下:
JoyStick.cs
4. 代碼使用
把TouchEven.cst掛在任意物體上,我這里掛在了EventSystem上
每一個(gè)搖桿如圖中紅框所示,
三個(gè)搖桿場(chǎng)景如圖:
把JoyStick.cs掛在Joy1上,把circle賦給circle,joy賦給point,把TouchEvent也賦好值,如圖:
5. 在手機(jī)上實(shí)時(shí)調(diào)試
在手機(jī)上安裝Unity Remote app,下載鏈接:
鏈接:https://pan.baidu.com/s/1moiz-4It5euHtpd86cLwgQ
提取碼:z0fy
在Unity中點(diǎn)擊edit->project settings,設(shè)置Editor,如圖:
手機(jī)打開USB調(diào)試,連接電腦,然后運(yùn)行,記得調(diào)整好分辨率
總結(jié)
以上是生活随笔為你收集整理的Unity实现安卓虚拟摇杆多点触控的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星系列机型 刷机的一些基本常识
- 下一篇: github注册以及安装教程