unity中Event Trigger组件应用代码

Posted 不积跬步,无以至千里;不积小流,无以成江海。任何业绩的质变都

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity中Event Trigger组件应用代码相关的知识,希望对你有一定的参考价值。

using UnityEngine;
using System.Collections;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using UnityEngine .UI ;
public class DistrictBgEvent {



    //门户小界面按钮功能
    private EventTrigger m_eventTrigger;
    public  string pathDistrictBg;
    public GameObject PanelName;
    private  bool m_state = true   ;
    private bool m_state_2 = true;
    private bool m_toggleState = false ;
    // Use this for initialization

    //初始化
    public void StartInit(GameObject Obj,string path)
    {
        if (PanelName.name == "mainPanel(Clone)" || PanelName.name == "mainControllerPanel(Clone)")
        {
            Enter(Obj, path, "Gwh", "管委会");        
        }
        else
        {
            if (pathDistrictBg == "LeftBar/districtBg/mainconbg/")
            {

                Enter(Obj, path, "Gwh", "管委会");
            }
            else
            {

                Exit(Obj, path, "Gwh", "管委会");

            }
           
        }
        Exit(Obj, path, "Gjq", "高教区");
        Exit(Obj, path, "Jmq", "居民区");
        Exit(Obj, path, "Gyq", "工业区");
        Exit(Obj, path, "Yfq", "研发区");
        Exit(Obj, path, "Syq", "商业区");

        m_state = true;
        m_state_2 = true;
        m_toggleState = false ;

}

    //鼠标进入事件
    public void MouseInit(GameObject Obj,string path) {
       
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Gwh").gameObject, EventTriggerType.PointerEnter, GwhEnter);
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Gjq").gameObject, EventTriggerType.PointerEnter, GjqEnter);
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Jmq").gameObject, EventTriggerType.PointerEnter, JmqEnter);
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Gyq").gameObject, EventTriggerType.PointerEnter, GyqEnter);
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Yfq").gameObject, EventTriggerType.PointerEnter, YfqEnter);
        AddTriggersListener(Obj.transform.Find(path + "LeftBtn/Syq").gameObject, EventTriggerType.PointerEnter, SyqEnter);

        if (PanelName.name == "mainPanel(Clone)" || PanelName.name == "mainControllerPanel(Clone)")
        {

        }
        else
        {
            AddTriggersListener(Obj.transform.FindChild("TopBarBg/districtBg").gameObject, EventTriggerType.PointerEnter, OnPointerEnter_2);
            AddTriggersListener(Obj.transform.FindChild("TopBarBg/districtBg").gameObject, EventTriggerType.PointerExit, OnPointerExit_2);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gwh").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gwh").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gjq").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gjq").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Jmq").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Jmq").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gyq").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Gyq").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Yfq").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Yfq").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Syq").gameObject, EventTriggerType.PointerEnter, OnPointerEnter);
            AddTriggersListener(Obj.transform.FindChild(path + "RightBtn/Syq").gameObject, EventTriggerType.PointerExit, OnPointerExit);

            AddTriggersListener(Obj.transform.FindChild("TopBarBg/LeftPanel/LeftButtons/mainConBtn").gameObject, EventTriggerType.PointerEnter, OnPointerEnter_3);
            AddTriggersListener(Obj.transform.FindChild("TopBarBg/LeftPanel/LeftButtons/mainConBtn").gameObject, EventTriggerType.PointerExit, OnPointerExit_3);

        }


    }

    //监控系统下拉菜单点击关闭
    public void MouseClickUpdate(GameObject Obj,GameObject Obj_2)
    {
       
            if (m_toggleState && Input.GetMouseButton(0) && Obj.transform.GetComponent<Toggle>().isOn && m_state  && m_state_2 )
            {
                Obj.transform.FindChild("Text")
                    .GetComponent<Text>()
                    .color = new Color(50 / 255f, 50 / 255f, 50 / 255f, 1);
                Obj_2.SetActive(false);
                Obj.transform.GetComponent<Toggle>().isOn = false;
            }
      
       

    }
    

    //门户小界面按钮功能

    /// <summary>
    /// 为obj添加Eventrigger监听事件  
    /// </summary>
    /// <param name="obj">添加监听的对象</param>
    /// <param name="eventType">添加的监听类型</param>
    /// <param name="action">触发的函数</param>
    public  void AddTriggersListener(GameObject obj, EventTriggerType eventType, UnityAction<BaseEventData> action)
    {
        m_eventTrigger = obj.GetComponent<EventTrigger>();
        if (m_eventTrigger == null)
        {
            m_eventTrigger = obj.AddComponent<EventTrigger>();
        }
        if (m_eventTrigger.triggers.Count == 0)
        {
            m_eventTrigger.triggers = new List<EventTrigger.Entry>();
        }
        //定义所要绑定的事件类型   
        EventTrigger.Entry entry = new EventTrigger.Entry();
        //设置事件类型    
        entry.eventID = eventType;
        //定义回调函数    
        UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
        //设置回调函数    
        entry.callback.AddListener(callback);
        //添加事件触发记录到GameObject的事件触发组件    
        m_eventTrigger.triggers.Add(entry);

    }
    private void Enter(GameObject obj,string path, string name_1, string name_2)
    {
      
        obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Image").gameObject.SetActive(true);
        obj.transform.FindChild(path + "RightBtn/" + name_1).gameObject.SetActive(true);
        if (obj.name == "mainPanel(Clone)" || obj.name == "mainControllerPanel(Clone)")
        {
            obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().color =
                new Color(0, 209/225f, 229/225f, 1);
            obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().text = "   " +name_2 +"    >".ToString();
        }
        else
        {
            if (pathDistrictBg == "LeftBar/districtBg/mainconbg/")
            {

                obj.transform.FindChild(pathDistrictBg + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().color =
                    new Color(0, 209/225f, 229/225f, 1);
                obj.transform.FindChild(pathDistrictBg + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().text =
                    "   " + name_2 + "    >".ToString();

            }
            else
            {

            }
        }

    }

    private void Exit(GameObject obj,string path, string name_1, string name_2)
    {
        obj.transform.FindChild(path + "RightBtn/" + name_1).gameObject.SetActive(false);
        obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Image").gameObject.SetActive(false);
        if (obj.name == "mainPanel(Clone)" || obj.name == "mainControllerPanel(Clone)")
        {
            obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().text =
                name_2.ToString();
            obj.transform.FindChild(path + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().color =
                Color.white;
        }
        else
        {

            if (pathDistrictBg == "LeftBar/districtBg/mainconbg/")
            {


                obj.transform.FindChild(pathDistrictBg + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().text =
                    name_2.ToString();
                obj.transform.FindChild(pathDistrictBg + "LeftBtn/" + name_1 + "/Text").gameObject.GetComponent<Text>().color =
                    Color.white;

            }
            else
            {


            }
        }
    }

    private void GwhEnter(BaseEventData arg0)
    {
       // Debug.Log("GwhEnter");
        Enter(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Gjq", "高教区");
        Exit(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Syq", "商业区");

    }

    private void GwhExit(BaseEventData arg0)
    {
       // Debug.Log("GwhExit");

    }

    private void GjqEnter(BaseEventData arg0)
    {
        // Debug.Log("GjqEnter");
        Enter(PanelName,pathDistrictBg, "Gjq", "高教区");
        Exit(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Syq", "商业区");

    }
    private void JmqEnter(BaseEventData arg0)
    {
        // Debug.Log("JmqEnter");
        Enter(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Gjq", "高教区");
        Exit(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Syq", "商业区");

    }
    private void GyqEnter(BaseEventData arg0)
    {
        // Debug.Log("GyqEnter");
        Enter(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gjq", "高教区");
        Exit(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Syq", "商业区");

    }
    private void YfqEnter(BaseEventData arg0)
    {
        // Debug.Log("YfqEnter");
        Enter(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Gjq", "高教区");
        Exit(PanelName,pathDistrictBg, "Syq", "商业区");

    }

    private  void SyqEnter(BaseEventData arg0)
    {
        // Debug.Log("SyqEnter"); 
        Enter(PanelName,pathDistrictBg, "Syq", "商业区");
        Exit(PanelName,pathDistrictBg, "Gwh", "管委会");
        Exit(PanelName,pathDistrictBg, "Jmq", "居民区");
        Exit(PanelName,pathDistrictBg, "Gyq", "工业区");
        Exit(PanelName,pathDistrictBg, "Yfq", "研发区");
        Exit(PanelName,pathDistrictBg, "Gjq", "高教区");

    }
    //监控系统下拉菜单
    private  void OnPointerEnter(BaseEventData arg0)
    {
        m_state = false  ;
        Debug.Log("m_state" + m_state);
    }

    private  void OnPointerExit(BaseEventData arg0)
    {
        m_state = true  ;
        Debug.Log("m_state" + m_state);
    }
    private void OnPointerEnter_2(BaseEventData arg0)
    {
        m_state_2 = false  ;
        Debug.Log("m_state_2" + m_state_2);
    }

    private void OnPointerExit_2(BaseEventData arg0)
    {
        m_state_2 = true  ;
        Debug.Log("m_state_2" + m_state_2);
    }
    private void OnPointerEnter_3(BaseEventData arg0)
    {
        m_toggleState  = false  ;
        Debug.Log("m_toggleState" + m_toggleState);
    }

    private void OnPointerExit_3(BaseEventData arg0)
    {
        m_toggleState = true  ;
        Debug.Log("m_toggleState" + m_toggleState);
    }
}

 

以上是关于unity中Event Trigger组件应用代码的主要内容,如果未能解决你的问题,请参考以下文章

unity5eventtrigger怎么用

UNITY UGUI Event Trigger

unity eventtrigger怎么获取触发对象

Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)

转载 unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger)

trigger()的event事件对象之坑