美文网首页unity3D技术分享unity学习iOS
Unity3D---UGUI---Button相关、点击、按下、

Unity3D---UGUI---Button相关、点击、按下、

作者: Xeroo | 来源:发表于2018-01-30 17:27 被阅读1204次

    一、先介绍一下Inspector面板里的东西

    Button里一共有两个脚本。

    image.png
    Image(Script)
    • 这个跟Image里是一样的
    Button(Script)
    • Interactable(交互):Button是否可以点击的开关,关闭进入Disabled状态
    image.png
    • Transition(变化):设置Button按下,弹起,不可用的显示状态
    1.None(空):不管怎么样都只使用Image(Script)里设置的图片的
    2.Color Tint(着色):在Image(Script)里设置的图片基础上进行着色
    • Target Graphic(目标图形):可选择任意Graphic对象进行着色
    • Normal Color(正常状态颜色)
    • Highlighted Color(突出状态颜色):鼠标悬停或者选择状态的颜色
    • Pressed Color(按下状态颜色)
    • Disabled Color(不可用状态颜色)
    • Color Multiplier(增加颜色):这个不知道有什么用,emmmm 保持默认就好了
    • Fade Duration(消失时间):其实就是着色时间与褪色时间
    3.Sprite Swap(图片切换):选项跟Color Tint中的相似,区别在于设置的是图片
    4.Animation(执行动画)
    image.png
    • Navigation(导航):选中该按钮后可以用方向键比如WASD以及上下左右按键选择其他按钮,前提是导航目标按钮也开启了导航功能,可通过回车或者空格点击按钮响应点击事件
    1.None(关闭)
    2.Horizontal(水平导航):左右能导航到按钮
    3.Automatic(自动导航):上下左右按键都能导航到按钮
    4.Vertical(垂直导航):上下能导航到按钮
    5.Explicit(指定导航):指定上下左右按键能导航到那个按钮上
    image.png
    • Visualize(可视化):把按键能够导航到的路径可视化,高亮的黄色箭头为当前按钮可导航到的目标(目前只看到该可视化,可能还有其他?)

    二、Button点击事件

    点击事件很简单,直接在Button里能找到一个On Click()的地方,选择Editor And Runtime。


    image.png

    然后选择组件


    image.png
    然后选择执行该控件的脚本函数,像显示隐藏就直接GameObject>>SetActive(bool)
    image.png

    如果该函数需要传参,在下面会需要填写参数,比如我选择的是GameObject>>SetActive(bool),则需传送bool值,空为false,√为true。之后点击该按钮就能隐藏BackImage这个控件了。控制其他得也同理。


    image.png

    三、Button按下、抬起、长按事件

    按下事件对于游戏开发来说很重要,之前工作开发项目是MMORPG游戏,像攻击类的按键,都是通过按下来触发
    与其说是Button长按,不如说是所有能接受事件的所有控件的长按都可以这么实现。
    点击Button,然后看到该Button的Inspector然后点击AddComponent >> Event >> Event Trigger。或者可以直接上面搜索框搜索。


    image.png

    之后能看到Event Trigger组件,然后点击里面的Add New Event Type >> PointerDown,再添加PointerUp,现在估计有人知道我为什么把按下,抬起,长按放在一起了,长按是通过PointerDow(按下)、PointerUp(抬起)实现的


    image.png

    创建一个脚本,代码贴在下面

    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("长按触发");
                IsStart = false;
                LastTime = 0;
            }
        }
        public void LongPress(bool bStart)
        {
            IsStart = bStart;
            if(IsStart)
            {
                LastTime = Time.time;
                Debug.Log("长按开始");
            }
            else if(LastTime != 0)
            {
                LastTime = 0;
                Debug.Log("长按取消");
            }    
        }
    }
    

    然后把写好的脚本文件拖到你想设置长按功能的控件里,然后设置好,Down传True,Up传false,Ping传3,长按3秒触发长按


    image.png

    Unity3D的C# API文档中还有有很多其他得函数,目前我知道的觉得能使用到的函数就整理出来了下面几个,进入按钮离开按钮在PC的某些游戏会用到,鼠标悬停在按钮上的话出现一些小提示,离开这些小提示又会消失,通过这连个函数能够实现

    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("进入" + this.gameObject.name);
        }
    }
    

    这段时间通过学习,更新一下用来实现Button相关、点击、按下、抬起、长按事件,原理还是差不多,只是调用的方法变了
    代码如下

    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("长按");
            }
        }
        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("进入");
        }
        public void LongPress(bool bStart)
        {
            IsStart = bStart;
            LastTime = Time.time;
        }
    }
    

    如果对Event Trigger其他的函数还有兴趣的话可以看官方的API
    Event Trigger官方API

    相关文章

      网友评论

        本文标题:Unity3D---UGUI---Button相关、点击、按下、

        本文链接:https://www.haomeiwen.com/subject/xqtfzxtx.html