zoukankan      html  css  js  c++  java
  • Unity中EventTrigger使用

    • 在Unity中,点击场景中的模型我们往往需要检测是否点击在了UI上,这时我们需要进行一系列的判断,往往效果还不好,因此我在场景中模型的点击也使用了EventTrigger,EventTrigger我们在UI上的使用比较常见,但是它也可以用于场景点击,并且能屏蔽点击到UI又响应了模型的点击事件,以下是点击事件的组件脚本
      using UnityEngine;
      using UnityEngine.EventSystems;
      public class EventTriggerListener : EventTrigger
      {
          public delegate void VoidDelegate();
          public delegate void EventDelegate(BaseEventData baseEventData);
          public delegate void BoolDelegate(bool state);
          public delegate void FloatDelegate(float delta);
          public delegate void VectorDelegate(Vector2 delta);
          public delegate void ObjectDelegate(GameObject obj);
          public delegate void KeyCodeDelegate(KeyCode key);
      
          public VoidDelegate onClick;
          public EventDelegate onEventClick;
          public VoidDelegate onDown;
          public VoidDelegate onEnter;
          public VoidDelegate onExit;
          public VoidDelegate onUp;
          public VoidDelegate onSelect;
          public VoidDelegate onUpdateSelect;
      
      
          static public EventTriggerListener Add(Transform transform)
          {
              EventTriggerListener listener = transform.GetComponent<EventTriggerListener>();
              if (listener == null)
                  listener = transform.gameObject.AddComponent<EventTriggerListener>();
              return listener;
          }
      
          public override void OnPointerClick(PointerEventData eventData)
          {
              if (onClick != null)
              {
                  onClick();
              }
              if (onEventClick != null)
              {
                  onEventClick(eventData);
              }
          }
      
          public override void OnPointerDown(PointerEventData eventData)
          {
              if (onDown != null)
                  onDown();
          }
      
          public override void OnPointerEnter(PointerEventData eventData)
          {
              if (onEnter != null)
                  onEnter();
          }
      
          public override void OnPointerExit(PointerEventData eventData)
          {
              if (onExit != null)
                  onExit();
          }
      
          public override void OnPointerUp(PointerEventData eventData)
          {
              if (onUp != null)
                  onUp();
          }
      
          public override void OnSelect(BaseEventData eventData)
          {
              if (onSelect != null)
                  onSelect();
          }
      
          public override void OnUpdateSelected(BaseEventData eventData)
          {
              if (onUpdateSelect != null)
                  onUpdateSelect();
          }
      }
    • 使用方法,只需要在模型对象上挂在脚本,该脚本注册下上面的脚本事件。
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      using UnityEngine.EventSystems;
      
      public class EnvironmentClick : MonoBehaviour
      {
          private void Awake()
          {
              EventTriggerListener.Add(transform).onEventClick += OnGroundClick;
          }
         public void OnGroundClick(BaseEventData data)
          {
              if (Input.GetMouseButton(1)) return;
              if (Input.GetMouseButton(2)) return;
      
             //do something
      
          } 
          
      }
  • 相关阅读:
    KubeSphere 社区开源负载均衡器 Porter 进入 CNCF 云原生全景图
    The Overview of KubeSphere 3.0
    对象存储在无人驾驶高精度地图的场景实践
    谁来打通混合云“最后一公里”?唯有容器混合云
    QingStor 对象存储架构设计及最佳实践
    如何通过IAM打造零信任安全架构
    智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
    微信小程序集成jenkins自动打码
    windows运行python,提示import win32file ImportError: DLL load failed: 找不到指定的程序。
    centos7搭建easy-mock服务
  • 原文地址:https://www.cnblogs.com/shingkwan/p/8339923.html
Copyright © 2011-2022 走看看