[Unity] 新手引導(dǎo)1 - UGUI事件轉(zhuǎn)發(fā)

0凳寺、牢騷

最近一周左右的時間在做新手引導(dǎo)的開發(fā)柴信,這是第二次負(fù)責(zé)引導(dǎo)了套啤,我的內(nèi)心是崩潰的……上個項目的引導(dǎo)開發(fā)+維護都在自己手里,又要寫代碼随常,又要配文件苦不堪言啊潜沦。而且框架設(shè)計上總覺得欠缺些東西,想看看其他人的做法學(xué)習(xí)一番绪氛,結(jié)果這邊開始負(fù)責(zé)的人要離職OMG……前人留下了一個開發(fā)方案唆鸡,看了看沒法用,只好自己再來了枣察。
  這次從策劃那里了解的他們之前項目引導(dǎo)開發(fā)的大概方式争占,得到了一些還不錯的思路,然而被主策拒絕了序目,最終設(shè)計出來的和之前我那一版差不多……希望后面能再有好的思路吧臂痕。
  最近打算把開發(fā)過程中的一些東西記錄下來,前幾篇先寫幾個小工具猿涨,后面看情況說下前人方案中不可行的東西和框架的設(shè)計握童,希望能得到大佬的指點。

1叛赚、寫在前面

這次的開發(fā)環(huán)境是Unity5.4.1+UGUI澡绩,下面的工具在不同Unity版本中實現(xiàn)方式可能有一定的區(qū)別稽揭,請注意版本差別。

2肥卡、介紹

這篇要寫的是用UGUI實現(xiàn)一個事件轉(zhuǎn)發(fā)組件(EventForward):將一個Button上接收到的Click事件溪掀,轉(zhuǎn)發(fā)到另一個Button上。這里的組件不僅限于Button召调,只要是能接受UGUI的操作的組件都可以膨桥÷耄可轉(zhuǎn)發(fā)的事件也可以是任意的唠叛,不過我只實現(xiàn)了Click。
  這個組件的思路來源是NGUI的UIForwardEvents組件沮稚,之前做引導(dǎo)的時候艺沼,就是用的這個組件。雖然在我當(dāng)時的版本里蕴掏,已經(jīng)是一個Obsolete組件了障般,但它讓事件處理變得非常簡潔,去掉實在可惜盛杰。
  下面介紹下事件轉(zhuǎn)發(fā)的用處挽荡。
  需求:引導(dǎo)過程中,需要用一個半透的遮罩把不能操作的內(nèi)容擋住即供,能操作的對象要高亮顯示出來定拟。
  方案:給引導(dǎo)UI(TutorialCanvas)設(shè)置一個較高的SortLayer,里面用一個全屏的Image作為遮罩逗嫡。把要引導(dǎo)的對象青自,復(fù)制一份放到TutorialCanvas中,這樣對象上應(yīng)有的UI表現(xiàn)都可以保留下來(比如按鈕按上去的縮放效果)驱证,而且只有復(fù)制體能響應(yīng)玩家操作延窜。
  我們項目主要邏輯都在Lua中,所有的UI事件都是用代碼綁定上去的抹锄,因此復(fù)制出來的對象只是徒有其表逆瑞,沒法完成玩家的操作。為了給復(fù)制體加上靈魂伙单,就需要EventForward了~把復(fù)制體接收到的事件获高,轉(zhuǎn)發(fā)給原對象,不需要侵入現(xiàn)有邏輯就能完成引導(dǎo)车份。

3谋减、EventForward代碼

/// <summary>
/// UGUI事件轉(zhuǎn)發(fā)
/// </summary>
public class EventForward : MonoBehaviour, IPointerClickHandler
{
    /// <summary>
    /// 接收轉(zhuǎn)發(fā)事件的對象
    /// </summary>
    public GameObject Target;

    /// <summary>
    /// 任意事件執(zhí)行成功后執(zhí)行的回調(diào)
    /// </summary>
    public Action SuccessAction;

    private void _DoSuccess()
    {
        if (null != SuccessAction)
        {
            SuccessAction();
        }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if(null == Target) return;
        // Target上有能處理當(dāng)前事件的函數(shù)才會返回true
        if (ExecuteEvents.Execute(Target, eventData, ExecuteEvents.pointerClickHandler))
        {
            _DoSuccess();
        }
    }
}

這里我實現(xiàn)了接口IPointerClickHandler來響應(yīng)Click事件,UGUI所有事件都有一個對應(yīng)的接口扫沼,這些在SupportedEvents里有介紹出爹,需要其它事件的朋友可以根據(jù)Manual自行拓展庄吼。
---
  寫文章的過程中忽然想到,之前NGUI做事件轉(zhuǎn)發(fā)的方式在UGUI中應(yīng)該也能用……之前的做法不需要多復(fù)制一個對象出來严就,也算一種低耦合的表現(xiàn)吧总寻。我大概寫下之前NGUI的做法,有時間再確認(rèn)可行性梢为。
  在引導(dǎo)UI中創(chuàng)建一個接收事件的BoxCollider(EventForwardColli)渐行,引導(dǎo)的時候,將EventForwardColli的位置铸董、大小調(diào)整到和引導(dǎo)目標(biāo)上的一樣祟印,然后通過UIForwardEvents將EventForwardColli上接收到的一部分事件轉(zhuǎn)發(fā)給引導(dǎo)目標(biāo)。
  需要轉(zhuǎn)發(fā)的事件是可配置的粟害,因為有些地方只需要點擊蕴忆,有些地方只需要長按,有些地方需要點擊+長按悲幅。點擊+長按通常用來保留引導(dǎo)目標(biāo)上的縮放效果套鹅。
  這種方式避免了復(fù)制、銷毀GameObject帶來的性能開銷汰具,在表現(xiàn)上也更加保險卓鹿。我現(xiàn)在項目的縮放效果是,先放大后復(fù)原留荔,這樣復(fù)制體能完全擋住原始對象吟孙。如果是先縮小再復(fù)原呢,那就穿幫了Orz……玩家在復(fù)制體縮小的時候存谎,能看到后面還有一個一模一樣按鈕在拔疚。
  事件轉(zhuǎn)發(fā)就到這了,
睡覺既荚!*

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稚失,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恰聘,更是在濱河造成了極大的恐慌句各,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴叨,死亡現(xiàn)場離奇詭異凿宾,居然都是意外死亡,警方通過查閱死者的電腦和手機兼蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門初厚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事产禾∨抛鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵亚情,是天一觀的道長妄痪。 經(jīng)常有香客問我,道長楞件,這世上最難降的妖魔是什么衫生? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮土浸,結(jié)果婚禮上罪针,老公的妹妹穿的比我還像新娘。我一直安慰自己栅迄,他們只是感情好站故,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毅舆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愈腾。 梳的紋絲不亂的頭發(fā)上憋活,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音虱黄,去河邊找鬼悦即。 笑死,一個胖子當(dāng)著我的面吹牛橱乱,可吹牛的內(nèi)容都是我干的辜梳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惜浅?” 一聲冷哼從身側(cè)響起渔欢,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎索昂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡契耿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了螃征。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搪桂。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盯滚,靈堂內(nèi)的尸體忽然破棺而出踢械,到底是詐尸還是另有隱情拙泽,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布裸燎,位于F島的核電站顾瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏德绿。R本人自食惡果不足惜荷荤,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望移稳。 院中可真熱鬧蕴纳,春花似錦、人聲如沸个粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽都许。三九已至稻薇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胶征,已是汗流浹背塞椎。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睛低,地道東北人案狠。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像钱雷,于是被迫代替她去往敵國和親骂铁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容