Unity 구현 물체 동적 추가 이벤트

물체 의 동적 추가 이벤트 에 대한 방법 을 소개 합 니 다.

using System.Events;
using System.EventSystems;
//_go is the gameobject which need add event
//_go    ,  EventTrigger unity      ,                       
//_type is the EventTriggerType(point , drag , clickdown......
//_type            ,        
//_action is the funtion
//_action                    funtion ,            UnityAction     
void AddTriggerEvent (GameObject _go , EventTriggrtType _type , UnityAction<BaseEventData> _action)
{
        //            
        EventTrigger trigger = _go.GetComponent<EventTrigger>();
        //          
        if (trigger == null)
        {
            trigger = _go.AddComponent<EventTrigger>();
        }
        //2021 2 20   
        //        ,            ,     
        //if (trigger.triggers.Count==0)
        //{
        //    trigger.triggers = new List<EventTrigger.Entry>();
        //}
        //      
        EventTrigger.Entry entry = new EventTrigger.Entry();
        //                    ,        ,          
        //UnityAction<BaseEventData> callBack = new UnityAction<BaseEventData>(_action);
        
        //         
        //entry.callback.AddListener(callBack);
        entry.callback.AddListener(_action);
        //      
        entry.eventID = _type;
        //            
        trigger.triggers.Add(entry);
}
2021 년 2 월 20 일 업데이트
전에 쓴 블 로그 가 너무 간략 하고 주의사항 도 없 는 것 을 보고 다시 편집 하 겠 습 니 다.저 는 지금 다시 주석 을 달 아 스 크 립 트 를 일부 수정 한 다음 에 주의사항 을 말씀 드 리 겠 습 니 다.
1.이 이벤트 트리거 는 유 니 티 에 내 장 된 이벤트 트리거 시스템 을 사용 하기 때문에 사용 할 때 반드시 있어 야 합 니 다.

이 두 구성 요 소 는 장면 에서 UI 구성 요 소 를 새로 만 들 때 새로 만 든 것 입 니 다.
2.UI 라면 직접 추가 할 수 있 지만,UI 가 아니라면 두 가 지 를 확보
1)카메라 에 방사선 부품 확보

이 두 구성 요 소 는 각각 3D 물체 와 2D 물체 에 대응한다.
2)검 측 될 구성 요 소 는 collder 구성 요소 가 있어 야 합 니 다.
오직 이렇게 해야만 이벤트 trigger 의 정확 한 실현 을 보장 할 수 있다
추가:Unity 동적 으로 물체 에 EventTrigger 이벤트 추가
이 스 크 립 트 를 마 운 트 한 물체 에 EventTrigger 구성 요 소 를 자동 으로 추가 합 니 다.

[RequireComponent(typeof(EventTrigger))]
public class ModelComponent : MonoBehaviour
{
}
이벤트 트리거 를 동적 으로 추가 합 니 다:

private  void AddEventTriggerFun(EventTriggerType eventTriggerType, UnityEngine.Events.UnityAction<BaseEventData> unityAction)
{
      //            
      EventTrigger.Entry entry = new EventTrigger.Entry();
      //       
      entry.eventID = eventTriggerType;
      //        
      entry.callback = new EventTrigger.TriggerEvent();
      //       
       UnityEngine.Events.UnityAction<BaseEventData> callBack = new UnityEngine.Events.UnityAction<BaseEventData>(unityAction);
      //       
      entry.callback.AddListener(callBack);
      eventTrigger.triggers.Add(entry);
}
호출 테스트:

private EventTrigger eventTrigger; 
private void Start()
{
    eventTrigger = GetComponent<EventTrigger>();
    EventTest();
}
private void EventTest()
{
    AddEventTriggerFun(EventTriggerType.PointerClick, (BaseEventData baseEventData) => { ClickEvent(); });
}
private void ClickEvent()
{
   Debug.Log("        ...");
}
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기