unity 3D物体添加 点击事件

 void Awake()
        {
            Instance = this;

            AddEventTrigger(YangFangTu, OnYangFangTu);
            AddEventTrigger(HongGanXiang, OnHongGanXiang);
        }

        /// <summary>
        /// 添加 物体点击 事件
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="action_"></param>
        public void AddEventTrigger(GameObject obj, UnityAction<BaseEventData> action_)
        {
            if (obj.transform.GetComponent<EventTrigger>()==null)
            {
                obj.AddComponent<EventTrigger>();
            }
            EventTrigger trigger = obj.transform.GetComponent<EventTrigger>();
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.PointerClick;
            entry.callback.AddListener(action_);
            trigger.triggers.Clear();
            trigger.triggers.Add(entry);
        }

方法一:物体 挂在 EventTrigger  选择 PointerClick  注册响应方法

相机 必须挂在 PhysicsRaycaster

场景中必须有:EventSystem(一般创建UI自动添加的)

物体 必须有 Collider

void Awake()
        {
            Instance = this;

            EventTrigger trigger = YangFangTu.transform.GetComponent<EventTrigger>();
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.PointerClick;
            entry.callback.AddListener(OnYangFangTu);
            trigger.triggers.Clear();
            trigger.triggers.Add(entry);

        }

        public void OnYangFangTu(BaseEventData data = null)
        {
            
        }

简单粗暴版(相机 必须挂在 PhysicsRaycaster)

using HighlightPlus;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;


public class ObjClickEvent : MonoBehaviour
{
    public GameObject[] cube1; //3D物体集合

    private void Start()
    {
        //为3D物体添加点击事件
        for (int i = 0; i < cube1.Length; i++)
        {
            AddObjectClickEvent(cube1[i]);
        }
    }
    public void OnClick()
    {
        Debug.Log("OnClick");
        transform.GetComponent<HighlightEffect>().highlighted = false;
    }

    public void AddObjectClickEvent(GameObject itemObject)
    {
        var box = itemObject.GetComponent<BoxCollider>();
        if (box == null)
        {
            box = itemObject.AddComponent<BoxCollider>();
        }
        var item = itemObject.GetComponent<ObjItme>();
        if (item == null)
        {
            item = itemObject.AddComponent<ObjItme>();
        }

        EventTrigger trigger = itemObject.GetComponent<EventTrigger>();
        if (trigger == null)
        {
            trigger = itemObject.AddComponent<EventTrigger>();
        }
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.PointerClick;
        entry.callback.AddListener(item.OnClickItem);
        trigger.triggers.Clear();
        trigger.triggers.Add(entry);
    }
}
 public void OnClickItem(UnityEngine.EventSystems.BaseEventData data = null)
    {
        //点击对应事件
       // Debug.Log("点击物体:"+ Name_);
        if (bo)
        {
            this.transform.GetComponent<HighlightEffect>().highlighted = false;
            UIChaJuZhiLing.Instance.OnZhiLing(Name_);
        }
    }
 public class TooIkitObjItme : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
 {
     public void OnClickItem(BaseEventData data = null)
     {
        // Debug.Log("name="+this.name);
         //var box = this.GetComponent<BoxCollider>();
         //if (box != null)
         //{
         //    this.GetComponent<BoxCollider>().enabled = false;
         //}
         //transform.GetComponent<HighlightEffect>().highlighted = false;
         UIToolkit.Instance.Toolkit3DItmeEvent_.Invoke(this.name);
         UIExplain.Instance.SetState(false);
         this.gameObject.SetActive(false);
     }
     public void OnPointerEnter(PointerEventData eventData)
     {
        // Debug.Log("进入");
         UIExplain.Instance.SetState(true, this.name);
     }
     //鼠标离开
     public void OnPointerExit(PointerEventData eventData)
     {
        // Debug.Log("出去");
         UIExplain.Instance.SetState(false, this.name);
     }

    

 }

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野区捕龙为宠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值