• Unity技术手册-UGUI零基础详细教程-Button按钮


    往期文章分享

    本文约5千字,新手阅读需要7分钟,复习需要2分钟收藏随时查阅不再迷路

    👉关于作者

    众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
    专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
    有什么需要欢迎私我,交流群让学习不再孤单

    在这里插入图片描述

    👉前提

    这是小空坚持写的Unity新手向系列,欢迎品尝。

    小空为了方便更多的人(新手)看明白,使用的汉字,真实项目尽量使用英文规则昂。

    新手(√√√)

    大佬(√)

    👉实践过程

    创建Button按钮很简单,在Hierachy面板中直接右键找到UI-Button即可。创建后我们可以看到Button其实就是挂载了一个Image组件一个Button组件,顺便携带一个Text子物体。
    在这里插入图片描述
    其中Image组件的属性,小空之间有单独介绍过,在这不赘述了。我们详细看Button组件中的内容,注意,所有参数是运行时生效。

    😜属性详解

    Interactable:表示是否可交互,取消勾选Button就不能触发点击了,并且设置的颜色或精灵等都不会生效。
    Transition:设置Button的过度效果,有四个设置选项(下方有图,重点属性)无、颜色过度、精灵图切换过度、动画过度。
    (Color Tint-表示颜色过度)

    • Target Graphic:表示该组件的属性作用于哪个对象或者说UI控件实现效果的对象,一般都是自身,虽然可以指定其他按钮,但是这种需求不多。
    • Normal Color:正常颜色。鼠标不在Button上时的颜色。
    • Highlighted Color:高亮颜色。鼠标悬浮在Button上时的颜色(不点击)。
    • Pressed Color:表示按压颜色值。鼠标点击Button时的颜色,松开后恢复。
    • Selected Color:表示被选中的颜色值。鼠标点击Button时的颜色,松开后保持不变,除非点击Button外的界面才会恢复。
    • Disabled Color:禁用时的颜色。禁用Button后的颜色,脚本中禁用。
    • Color Multiplier:颜色倍数,1-5之间,一般默认1即可,如果想突出颜色,增大即可。
    • Fade Duration:淡入淡出的持续时间,表示不同按钮状态切换的时间。
      (Sprite Swap-表示精灵过度)
    • Target Graphic:表示该组件的属性作用于哪个对象或者说UI控件实现效果的对象,一般都是自身,虽然可以指定其他按钮,但是这种需求不多。
    • Highlighted Sprite:高亮时候显示的精灵。鼠标悬浮在Button上时的精灵(不点击)。
    • Pressed Sprite:表示按压精灵值。鼠标点击Button时的精灵,松开后恢复。
    • Selected Sprite:表示被选中的精灵。鼠标点击Button时的精灵,松开后保持不变,除非点击Button外的界面才会恢复。
    • Disabled Sprite:禁用时的精灵。禁用Button后的精灵,脚本中禁用。
      (Animation-动画)
    • Normal Trigger:正常时间的动画。鼠标不在Button上时的动画。
    • Highlighted Trigger:高亮动画。鼠标悬浮在Button上时的动画(不点击)。
    • Pressed Trigger:表示按压动画值。鼠标点击Button时的动画,松开后恢复。
    • Selected Trigger:表示被选中的动画值。鼠标点击Button时的动画,松开后保持不变,除非点击Button外的界面才会恢复。
    • Disabled Trigger:禁用时的动画。禁用Button后的动画,脚本中禁用。
      需要点击【Auto Generate Animation】创建动画控制器,然后给上面的这几个动画文件录制动画(如缩放等)
      在这里插入图片描述

    Visualize:是否可视化。打开后会在Scene中显示出每个UI控件之间的辅助顺序,和Gizmos辅助很相似,但不受Gizmos控制。
    Navigation:控件间导航,一般我们设置为None,该属性控制焦点自动为下一个,比如多个按钮,并且你没在看是范围内,虽然无法鼠标点击但是可以键盘空格键触发。导航一般是给手柄用的,手柄上上下左右移动的时候选中哪个按钮,默认是自动导航,你可以选择Explicit模式,分别设置4个方向的其他控件,当手柄按下对应键的时候会将焦点移动到对应位置。
    On Click():给按钮添加响应事件(将脚本挂载在该Button上,拖拽Button到这,即可从下拉中找到脚本中public类型的方法,指定就表示点击触发该方法),除了这还有代码动态添加的方式(下方详细)。 还有图中的Runtime Only表示运行后才会响应事件,还有两个选项,一个是off从不响应,一个是Editor And Runtime表示即使没运行也能响应,默认即可。
    在这里插入图片描述

    😜代码事件

    public class TestClick : MonoBehaviour
        {
            private void Start()
            {
                Button btn = gameObject.GetComponent<Button>();
                //添加事件写法一-只能添加方法名 无法传递参数
                // btn.onClick.AddListener(methodA);
                //添加事件写法二 -可以传递参数
                // btn.onClick.AddListener(delegate { methodB(); });
                // btn.onClick.AddListener(() => { methodA();});
                //方式一添加多个方法
                // btn.onClick.AddListener(methodA);
                // btn.onClick.AddListener(methodB);
                //方式二添加多个方法
                // btn.onClick.AddListener(method);
    
                //下方是简易封装的一种写法,和Android中的类似
                List<string> btnsName = new List<string>();
                btnsName.Add("想要添加事件的");
                btnsName.Add("场景中");
                btnsName.Add("按钮的名字");
    
                foreach (string btnName in btnsName)
                {
                    GameObject btnObj = GameObject.Find(btnName);
                    Button btnTemp = btnObj.GetComponent<Button>();
                    btnTemp.onClick.AddListener(delegate() { this.OnClick(btnObj); });
                    //或者:
                    //btnTemp.onClick.AddListener(() => { OnClick(btnObj); });
                }
            }
    
            public void OnClick(GameObject sender)
            {
                switch (sender.name)
                {
                    case "想要添加事件的":
                        Debug.Log("想要添加事件的");
                        break;
                    case "场景中":
                        Debug.Log("场景中");
                        break;
                    case "按钮的名字":
                        Debug.Log("按钮的名字");
                        break;
                    default:
                        Debug.Log("none");
                        break;
                }
            }
    
            private void method()
            {
                methodA();
                methodB();
            }
    
            private void methodA(String param)
            {
                Debug.Log("事件A-方法A-携带参数" + param);
            }
    
            private void methodA()
            {
                Debug.Log("事件A-方法A");
            }
    
            private void methodB()
            {
                Debug.Log("事件B-方法B");
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    👉其他

    📢作者:小空和小芝中的小空
    📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
    📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

    温馨提示点击下方卡片获取更多意想不到的资源。
    空名先生

  • 相关阅读:
    【计算机网络】习题(三)—— 数据链路层
    计算机毕业设计(附源码)python政府项目管理平台
    Spring源码深度解析:十、bean的属性注入④ - populateBean
    DAB-DETR
    3.yolov5训练前的图片处理详解(python)
    Flink SQL: UNLOAD Statements
    【情态动词练习题】Can / Could you
    js的toString方法
    vite +vue3-ts架构,我要打包的时候打包成压缩包zip文件
    【23考研】计算机408数据结构代码题强化阶段划重点(王道书)
  • 原文地址:https://blog.csdn.net/qq_27489007/article/details/127528002