天天看點

EasyTouch插件的簡單使用經驗

移動平台上的RPG類的遊戲,我們常用虛拟搖杆來控制人物角色的行走和一些行為,相信我們對它并不陌生。而EasyTouch正是完善的幫我們實作了這一功能。

EasyTouch支援觸摸屏所有主流手勢:輕觸、連擊、重擊、扭、捏等等。對于快速內建的虛拟搖杆插件,初次使用後向大家分享一下經驗。下面以我做的第一款遊戲《紅内内俠》舉例

(一)簡單介紹

1.在easytouch裡面,建立的搖杆或者按鈕的transform是不起作用的,隻能通過ButtonPosition&Size來設定。

EasyTouch插件的簡單使用經驗

在代碼是通過stick.JoystickPositionOffset來設定位置的,這個參數是個很糾結的參數。

2.Interactiontype4種互動類型:

Direct:直接通過參數控制;

EasyTouch插件的簡單使用經驗

Incude:直接控制joystick中的值

EventNotification:通過發送消息類通知joystick的移動類型:這是比較常用的方式。通過聲明這些委托來動态控制

EasyJoystick.On_JoystickMove += OnJoyMove;(運動有效時循環執行,dead zone radius範圍内無效)

EasyJoystick.On_JoystickMoveEnd += On_JoystickMoveEnd;(當運動停止時執行一次)

EasyJoystick.On_JoystickTouchUp += OnJoyTouchUp;(當手指按下時執行一次)

EasyJoystick.On_JoystickTouchStart += OnJoyTouchDown;(當手指擡起時執行一次)

EasyJoystick.On_JoystickMoveStart += OnJoyMoveStart;(當開始移動時執行一次)

。。。。。。

DirectAndEvents:Direct和EventNotification兩種模式的結合,也比較常用。

預設的類型是Direct,但是此種方法下接收不到消息。

3.搖杆的調節:

EasyTouch插件的簡單使用經驗

Area radius:指的是easytouch的有效點選區域,也就是說,感覺搖杆範圍的大小。

Touch radius:指的是搖杆觸摸點的大小。我的遊戲裡面平時不點選時顯示的比較小,當按下時就會把這個值設定大一點,這樣比較美觀。

dead zone radius:指的是,當搖杆偏離中心多少距離才會發生效果,此值設定的越小越靈敏。

3.代碼控制:

以OnJoyMove (MovingJoystick move)為例。

move.joystickAxis.x,move.joystickAxis.y的範圍是(-1,1);對于控制物體運動來說,可以用rigidbody2D.velocity = new Vector()。

因為move.joy

stickAxis的值一直變化,如果想控制某個物體勻速運動,我是這樣寫的(僅供參考):

EasyTouch插件的簡單使用經驗

(二)螢幕自适應

因為我做的遊戲控制器的外邊需要有一個“血條”,也就是在控制器外包了一圈同心圓:

EasyTouch插件的簡單使用經驗

綠色以内的是搖杆Easytouch,外邊是血條。因為我們是在UIRoot下面操作的,預設的分辨率是800*480,采用fixedSizeOnMobiles的自适應方式,是以根據手機螢幕的長寬比,以高為基準進行縮放的。是以如果不對EasyTouch進行調整,那麼它的位置在每種長寬比的手機裡顯示是不一樣的。自适應位置代碼如下:

1.大小跟随EasyTouch自适應(血條):其中5f/3f實際為800/480:

EasyTouch插件的簡單使用經驗

2.EasyTouch位置自适應:

stick.JoystickPositionOffset = new Vector2(106f,Screen.height*(float)ConstPreference.SCREEN_WIDTH/Screen.width-105f);

106f,105f是常量(即原始分辨率800*480下,在easyStick調整好固定位置後,血條對應Stick時的transform.localPostion的x,y值)。

3.easyStick根據螢幕長寬的差異自适應了,那麼血條也要跟随移動(原理是調整原始分辨率800*480對應的(106,105,z)為最新位置):

collder.transform.position = UICamera.currentCamera.ScreenToWorldPoint( new Vector3(106f*Screen.width/(float)ConstPreference.SCREEN_WIDTH,105f*Screen.width/(float)ConstPreference.SCREEN_WIDTH));

4.注意,如果要是做非固定方式的搖杆,也就是跟随手指在全螢幕範圍内移動的TouchStick的話,血條跟随全螢幕移動可以這樣寫:

EasyTouch插件的簡單使用經驗

其中,collder為血條的gameobject,SCREEN_WIDTH是螢幕設定的寬度即800。ViewportToWorldPoint()是在NGUI相機下對應的位置螢幕百分比(以左下為基準,0-1到右、上)轉換為世界坐标。而最關鍵的一個參數:Rect stickRect的擷取。這個參數來自于EasyTouch内部代碼GUI繪圖的時候所用。即在EasyJoyStick.cs裡面的:areaRect—>GUI.DrawTexture( areaRect, areaTexture,ScaleMode.StretchToFill,true);//内部OnGUI裡面的代碼

EasyTouch就先簡單介紹到這裡,如果遇到難解的文字,歡迎大家一起讨論、實驗、研究源代碼,實作最強悍的功能。

繼續閱讀