Unity3D---UGUI---Button相關(guān)逻锐、點(diǎn)擊、按下雕薪、抬起谦去、長(zhǎng)按事件

一、先介紹一下Inspector面板里的東西

Button里一共有兩個(gè)腳本蹦哼。

image.png
Image(Script)
  • 這個(gè)跟Image里是一樣的
Button(Script)
  • Interactable(交互):Button是否可以點(diǎn)擊的開關(guān)鳄哭,關(guān)閉進(jìn)入Disabled狀態(tài)
image.png
  • Transition(變化):設(shè)置Button按下,彈起纲熏,不可用的顯示狀態(tài)
1.None(空):不管怎么樣都只使用Image(Script)里設(shè)置的圖片的
2.Color Tint(著色):在Image(Script)里設(shè)置的圖片基礎(chǔ)上進(jìn)行著色
  • Target Graphic(目標(biāo)圖形):可選擇任意Graphic對(duì)象進(jìn)行著色
  • Normal Color(正常狀態(tài)顏色)
  • Highlighted Color(突出狀態(tài)顏色):鼠標(biāo)懸妥鼻穑或者選擇狀態(tài)的顏色
  • Pressed Color(按下狀態(tài)顏色)
  • Disabled Color(不可用狀態(tài)顏色)
  • Color Multiplier(增加顏色):這個(gè)不知道有什么用锄俄,emmmm 保持默認(rèn)就好了
  • Fade Duration(消失時(shí)間):其實(shí)就是著色時(shí)間與褪色時(shí)間
3.Sprite Swap(圖片切換):選項(xiàng)跟Color Tint中的相似,區(qū)別在于設(shè)置的是圖片
4.Animation(執(zhí)行動(dòng)畫)
image.png
  • Navigation(導(dǎo)航):選中該按鈕后可以用方向鍵比如WASD以及上下左右按鍵選擇其他按鈕勺拣,前提是導(dǎo)航目標(biāo)按鈕也開啟了導(dǎo)航功能奶赠,可通過回車或者空格點(diǎn)擊按鈕響應(yīng)點(diǎn)擊事件
1.None(關(guān)閉)
2.Horizontal(水平導(dǎo)航):左右能導(dǎo)航到按鈕
3.Automatic(自動(dòng)導(dǎo)航):上下左右按鍵都能導(dǎo)航到按鈕
4.Vertical(垂直導(dǎo)航):上下能導(dǎo)航到按鈕
5.Explicit(指定導(dǎo)航):指定上下左右按鍵能導(dǎo)航到那個(gè)按鈕上
image.png
  • Visualize(可視化):把按鍵能夠?qū)Ш降降穆窂娇梢暬吡恋狞S色箭頭為當(dāng)前按鈕可導(dǎo)航到的目標(biāo)(目前只看到該可視化药有,可能還有其他大州?)

二、Button點(diǎn)擊事件

點(diǎn)擊事件很簡(jiǎn)單座咆,直接在Button里能找到一個(gè)On Click()的地方锨推,選擇Editor And Runtime。


image.png

然后選擇組件


image.png

然后選擇執(zhí)行該控件的腳本函數(shù)宦言,像顯示隱藏就直接GameObject>>SetActive(bool)
image.png

如果該函數(shù)需要傳參扇单,在下面會(huì)需要填寫參數(shù),比如我選擇的是GameObject>>SetActive(bool)奠旺,則需傳送bool值蜘澜,空為false,√為true响疚。之后點(diǎn)擊該按鈕就能隱藏BackImage這個(gè)控件了鄙信。控制其他得也同理忿晕。


image.png

三扮碧、Button按下、抬起杏糙、長(zhǎng)按事件

按下事件對(duì)于游戲開發(fā)來說很重要慎王,之前工作開發(fā)項(xiàng)目是MMORPG游戲,像攻擊類的按鍵宏侍,都是通過按下來觸發(fā)
與其說是Button長(zhǎng)按赖淤,不如說是所有能接受事件的所有控件的長(zhǎng)按都可以這么實(shí)現(xiàn)。
點(diǎn)擊Button谅河,然后看到該Button的Inspector然后點(diǎn)擊AddComponent >> Event >> Event Trigger咱旱。或者可以直接上面搜索框搜索绷耍。


image.png

之后能看到Event Trigger組件吐限,然后點(diǎn)擊里面的Add New Event Type >> PointerDown,再添加PointerUp褂始,現(xiàn)在估計(jì)有人知道我為什么把按下诸典,抬起,長(zhǎng)按放在一起了崎苗,長(zhǎng)按是通過PointerDow(按下)狐粱、PointerUp(抬起)實(shí)現(xiàn)的


image.png

創(chuàng)建一個(gè)腳本舀寓,代碼貼在下面

using UnityEngine;
public class ChangAn : MonoBehaviour 
{
    public float Ping;
    private bool IsStart = false;
    private float LastTime = 0;
    void Update () {
        if (IsStart && Ping > 0 && LastTime > 0 && Time.time - LastTime > Ping)
        {
            Debug.Log("長(zhǎng)按觸發(fā)");
            IsStart = false;
            LastTime = 0;
        }
    }
    public void LongPress(bool bStart)
    {
        IsStart = bStart;
        if(IsStart)
        {
            LastTime = Time.time;
            Debug.Log("長(zhǎng)按開始");
        }
        else if(LastTime != 0)
        {
            LastTime = 0;
            Debug.Log("長(zhǎng)按取消");
        }    
    }
}

然后把寫好的腳本文件拖到你想設(shè)置長(zhǎng)按功能的控件里,然后設(shè)置好肌蜻,Down傳True互墓,Up傳false,Ping傳3蒋搜,長(zhǎng)按3秒觸發(fā)長(zhǎng)按


image.png

Unity3D的C# API文檔中還有有很多其他得函數(shù)篡撵,目前我知道的覺得能使用到的函數(shù)就整理出來了下面幾個(gè),進(jìn)入按鈕離開按鈕在PC的某些游戲會(huì)用到豆挽,鼠標(biāo)懸停在按鈕上的話出現(xiàn)一些小提示育谬,離開這些小提示又會(huì)消失,通過這連個(gè)函數(shù)能夠?qū)崿F(xiàn)

using UnityEngine;
using UnityEngine.EventSystems;

public class OnImage : EventTrigger
{
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
        Debug.Log("按下" + this.gameObject.name);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);
        Debug.Log("抬起" + this.gameObject.name);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        base.OnPointerExit(eventData);
        Debug.Log("離開" + this.gameObject.name);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        base.OnPointerEnter(eventData);
        Debug.Log("進(jìn)入" + this.gameObject.name);
    }
}

這段時(shí)間通過學(xué)習(xí)祷杈,更新一下用來實(shí)現(xiàn)Button相關(guān)、點(diǎn)擊渗饮、按下但汞、抬起、長(zhǎng)按事件互站,原理還是差不多私蕾,只是調(diào)用的方法變了
代碼如下

using UnityEngine;
using UnityEngine.EventSystems;

public class OnImage : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler,IPointerEnterHandler
{
    public float Ping;
    private bool IsStart = false;
    private float LastTime = 0;

    void Update()
    {
        if (IsStart && Time.time - LastTime > Ping)
        {
            IsStart = false;
            Debug.Log("長(zhǎng)按");
        }
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        LongPress(true);
        Debug.Log("按下");
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        if(IsStart)
        {
            LongPress(false);
            Debug.Log("抬起");
        }      
    }
    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("離開");
    }
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("進(jìn)入");
    }
    public void LongPress(bool bStart)
    {
        IsStart = bStart;
        LastTime = Time.time;
    }
}

如果對(duì)Event Trigger其他的函數(shù)還有興趣的話可以看官方的API
Event Trigger官方API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胡桃,隨后出現(xiàn)的幾起案子踩叭,更是在濱河造成了極大的恐慌,老刑警劉巖翠胰,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件容贝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡之景,警方通過查閱死者的電腦和手機(jī)斤富,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锻狗,“玉大人满力,你說我怎么就攤上這事∏峒停” “怎么了油额?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刻帚。 經(jīng)常有香客問我潦嘶,道長(zhǎng),這世上最難降的妖魔是什么崇众? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任衬以,我火速辦了婚禮缓艳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘看峻。我一直安慰自己阶淘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布互妓。 她就那樣靜靜地躺著溪窒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冯勉。 梳的紋絲不亂的頭發(fā)上澈蚌,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音灼狰,去河邊找鬼宛瞄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛交胚,可吹牛的內(nèi)容都是我干的份汗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蝴簇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杯活!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熬词,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤旁钧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后互拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歪今,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年颜矿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤委。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡或衡,死狀恐怖焦影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情封断,我是刑警寧澤斯辰,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站坡疼,受9級(jí)特大地震影響彬呻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一闸氮、第九天 我趴在偏房一處隱蔽的房頂上張望剪况。 院中可真熱鬧,春花似錦蒲跨、人聲如沸译断。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孙咪。三九已至,卻和暖如春巡语,著一層夾襖步出監(jiān)牢的瞬間翎蹈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工男公, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荤堪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓枢赔,卻偏偏與公主長(zhǎng)得像澄阳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糠爬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評(píng)論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程寇荧,因...
    小菜c閱讀 6,367評(píng)論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)举庶、插件执隧、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 網(wǎng)絡(luò)時(shí)代,越來越多的人適應(yīng)户侥、甚至喜歡上了“快餐式”消費(fèi)镀琉。隨之而來的影響,我們沒有了“英雄”蕊唐,滿文具店的是一次性水筆...
    浩哥隨思錄閱讀 302評(píng)論 0 0
  • 比較喜歡指繪屋摔,閑暇時(shí)拿手機(jī)出來玩,何不如來畫畫替梨,看著自己的作品慢慢完成钓试,而且又能得到他人的喜歡,感覺好有成就感∩_...
    夜魚fish閱讀 409評(píng)論 12 6