unity中经常用的一种委托代理

11 篇文章 0 订阅
using UnityEngine;
using System.Collections;


public class EventDispatcher : MonoBehaviour {


// Use this for initialization
public delegate void EventHandlerDelegate(GameObject obj);
//public delegate void EventPressDelegate(GameObject obj,bool state);
public delegate void CollidHandlerDelegate(GameObject obj,Collision collider);
public delegate void ColliderHandler(GameObject obj,Collider collider);

private float TimeLimit = 0.2f;
private float DisLimit = 0.2f;
private Vector3 OldPos;
private float OldTime = 0;

public static EventDispatcher GetDispatcher(GameObject go)
{
EventDispatcher dis = go.GetComponent<EventDispatcher>();
if(dis == null)
{
dis = go.AddComponent<EventDispatcher>();
}
return dis;
}
void Start () {
OldTime = Time.time;
OldPos = Input.mousePosition;
}

// Update is called once per frame
void Update () {

}
public EventHandlerDelegate MouseDown;

void OnMouseDown()
{
if(MouseDown != null)
{
MouseDown(this.gameObject);
}
}

public EventHandlerDelegate MouseUp;
public EventHandlerDelegate DoubleClick;
void OnMouseUp()
{
float currentTime = Time.time;
Vector3 currentpos= Input .mousePosition;


if(currentTime - OldTime <=TimeLimit &&Vector3.Distance( currentpos , OldPos) <= DisLimit)
{
if(DoubleClick != null)
{
DoubleClick(this.gameObject);
}
}else
{
if(MouseUp != null)
{
MouseUp(this.gameObject);
}
}
OldPos = currentpos;
OldTime = currentTime;

}
public EventHandlerDelegate MouseOver;
void OnMouseOver ()
{
if (MouseOver != null)
MouseOver (this.gameObject);
}
public event EventHandlerDelegate MouseEnter;
void OnMouseEnter ()
{
if (MouseEnter != null)
MouseEnter (this.gameObject);
}
public event EventHandlerDelegate MouseExit;
void OnMouseExit ()
{
if (MouseExit != null)
MouseExit (this.gameObject);
}
public event EventHandlerDelegate BecameVisible;
void OnBecameVisible ()
{
if (BecameVisible != null)
BecameVisible (this.gameObject);
}
public event EventHandlerDelegate BecameInvisible;
void OnBecameInvisible ()
{
if (BecameInvisible != null)
BecameInvisible (this.gameObject);
}
public event CollidHandlerDelegate CollisionEnter;
void OnCollisionEnter (Collision c)
{
if (CollisionEnter != null)
CollisionEnter (this.gameObject, c);
}
public event CollidHandlerDelegate CollisionExit;
void OnCollisionExit (Collision c)
{
if (CollisionExit != null)
CollisionExit (this.gameObject, c);
}
public event ColliderHandler TriggerEnter;
void OnTriggerEnter(Collider c)
{
if (TriggerEnter != null)
TriggerEnter (this.gameObject, c);
}
public event ColliderHandler TriggerExit;
void OnTriggerExit(Collider c)
{
if(TriggerExit!=null)
{
TriggerExit(this.gameObject,c);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值