Unity3d中UGUI组件精简复盘(二十)EventSystem组件与Standalone Input Moudle组件

Posted ProMer_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d中UGUI组件精简复盘(二十)EventSystem组件与Standalone Input Moudle组件相关的知识,希望对你有一定的参考价值。

上一节,我们简单概括了Unity3D编辑器中三大 Layout Group组件的简要介绍。具体详情链接为:Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件
话不多说,我们直接进入正题~ 今天我们简要概括复盘的组件便是EventSystem组件与Standalone Input Moudle组件啦~

EventSystem组件与Standalone Input Moudle组件

简述事件系统及图形射线和其他射线的区别

UI部分的事件系统,用于管理事件响应

通常我们第一次创建UI的时候,会自动创建Canvas与EventSystem,EventSystem是全局唯一的,用于管理事件响应,不仅限于对UI事件响应 ,对于3D物体事件也响应

属性:

EventSystem属于系统管理类,依赖于Standalone Input Moudle,Standalone Input Moudle用于处理客户端的输入的操作信息,同时还依赖于Canvas的Graphic Raycaster,Graphic Raycaster用于处理图形射线进行响应。这四个部分作为UI事件系统的主要组成部分。

2D和3D射线分别是响应2D和3D的碰撞体,而Graphic图形射线是不会对2D和3D作出响应的,除非Blocking objects里进行设置,默认情况下是只针对图形射线作出相应的。

First Selected:

Send Navigation Events:

Drag Threshold:

UGUI实现事件的三种方式:

第一种方式: 使用Unity中的接口,接口中就有对应的方法

using UnityEngine.EventSystems;
using UnityEngine.UI;
public class TestIhander : MonoBehaviour,IDragHandler

{
    public void OnDrag(PointerEventData eventData)
    {
        throw new System.NotImplementedException();
    }
}

第二种方式: 通过手动添加组件的方式去实现

添加Event Trigger组件,对什么UI物体进行操作,就将对应的物体拖动至选框即可,然后在选择对应的响应事件。同时我们可以自己写对应的响应方法,只需要在其中选择对应我们手写的响应方法。

第三种方式: 代码中动态添加组件和参数,实现对应的同样的事件响应的过程

EventTrigger组件实现事件调用的两种方式演示

方式一:界面上手动添加

通过界面中添加EventTrigger,

具体实现就类似于Onclick中的手动添加、绑定方法的过程类似。方式

方法2:代码添加

命名空间添加:

using UnityEngine.UI;
using UnityEngine.EventSystems;

比较特殊,需要初始化事件列表,

所有的UnityEvent都需要调用AddListener()才能够调用对应的事件,而C#中我们是通过’=‘号进行调用的,也就是我们C#中所讲的委托多播。

TestEventTrigger.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TestEventTrigger : MonoBehaviour {
    private int index; 
    
    void Start()
    {
        EventTrigger trigger = gameObject.AddComponent<EventTrigger>();
        trigger.triggers = new List<EventTrigger.Entry>();//需要初始化事件列表

        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.PointerClick;
        entry.callback = new EventTrigger.TriggerEvent();

        //entry.callback.AddListener(ChangeColor);//监听方式一,但是需要ChangeColor(BaseEventData data)调用方法中需要带参

        //entry.callback.AddListener((data)=> ChangeColor());//监听方式二,监听方法不需要带参,可以同时相应多个方法

        entry.callback.AddListener((data) =>
              {
                  ChangeColor();
              });//监听方式三,监听方法不需要带参,可以同时相应多个方法
    }

    public void ChangeColor()
    {
        if (index == 0)
        {
            GetComponent<Image>().color = Color.red;
        }
        else
        {
            GetComponent<Image>().color = Color.white;
        }
        index = index == 0 ? 1 : 0;
    }
}


联系工作实际: 这个的重要性就远比上两个章节所讲述的重要性要强很多了,并不是上两章的内容不重要,只是上两个章节的内容的话,可能真正在日常工作中接触到的也许不会特别多,可能也跟博主自己本身的岗位职责有关,但是存在即合理。所以我们同样也不能否认上两个章节的内容,上两个章节的内容在处理适配上的作用可不容小觑。事件系统,这在日常工作中可不少见,以及跟输入相关的组件,这就更加了。尤其是pc端的游戏中。一直以来强调了企业中所使用到的框架是怎么样的,决定了你怎么样去使用。

不过我们不能否认,有一些公司选择开发游戏并没有采用xlua,slua,或者tolua这之类的框架,而是自己公司通过别的途径来实现热更的。这些公司一样不在少数,我们不能否认框架带来的开发效率,当然也不能否认别的途径实现热更的游戏就不好。开发游戏的目标都是一致的,就是开发出一款可玩性高,表现性好,吸引玩家的精品游戏,有时候也不能太过看重这方面的框架。只能说框架给我们带来的只是在某种程度上的优越性,但相同,也会在某些方面与不使用框架上优越性上会有偏差。

总结: Unity3d中UGUI组件精简复盘之总结篇到这里就先告一段落,后续在组件上有更多的了解的时候,再陆陆续续的补充吧。

大家也会发现博主目前的博文更多的是通过讲解组件的属性的意思来进展的,其实真正组件的使用上,通过这十几篇文章想要掌握那肯定也不现实,只是说,我们通常在使用组件的时候,对于组件的理解,也会在一定程度上影响到我们对组件的使用,因此我自己会比较偏重组件的意思,以及一些重要属性的理解和使用方法。

当然我也是进入游戏行业没多久,还望无意点进博主这个小菜鸟文章的大佬们见谅。博主也一直在往这个方面一点点
的精进,希望粉丝也好,路人也好,还是要给博主一点点的时间的奥!你给我一点时间,我还你一片海洋(知识的海洋!Hhhhh…)

针对不想努力的朋友,博主也有一本书可以推荐!博主免费赠送!

如果博客博友对这个章节有更多的内容想要了解的,可以评论哈,等这一个章节结束后,我会根据评论反馈以及自己的能力,将评论中反馈的内容在下一个计划中去制作出对应的内容的哈~

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/120168893

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

以上是关于Unity3d中UGUI组件精简复盘(二十)EventSystem组件与Standalone Input Moudle组件的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件

Unity3d中UGUI组件精简复盘(十九)ContentSizeFitter组件

Unity3d中UGUI组件精简复盘RawImage组件

Unity3d中UGUI组件精简复盘(十四)Dropdown组件

Unity3d中UGUI组件精简复盘(十七)LayoutElement组件

Unity3d中UGUI组件精简复盘(十七)LayoutElement组件