【Unity3D / Physical】快速处理碰撞事件的方法

    Unity的物理系统,处理碰撞事件,需要自行实现MonoBehaviour中的void OnTriggerEnter(Collider)等方法,MonoBehaviour的生命周期方法,有些不太常用,可能会经常不记得、或者打错名字,调试还不容易找到原因,很不方便。

    我们可以把常用接口封装起来,让需要实现碰撞事件的类,继承已经封装好的类即可。


using System;
using UnityEngine;

[RequireComponent(typeof(Collider))]
public class ColliderListener : MonoBehaviour {

	public Action<Collider> onTriggerEnter = delegate { };
	public Action<Collider> onTriggerStay = delegate { };
	public Action<Collider> onTriggerExit = delegate { };
	public Action<Collision> onCollisionEnter = delegate { };
	public Action<Collision> onCollisionStay = delegate { };
	public Action<Collision> onCollisionExit = delegate { };

	private void OnTriggerEnter(Collider other) {
		onTriggerEnter(other);
	}

	private void OnTriggerStay(Collider other) {
		onTriggerStay(other);
	}

	private void OnTriggerExit(Collider other) {
		onTriggerExit(other);
	}

	private void OnCollisionEnter(Collision other) {
		onCollisionEnter(other);
	}

	private void OnCollisionStay(Collision other) {
		onCollisionStay(other);
	}

	private void OnCollisionExit(Collision other) {
		onCollisionExit(other);
	}

	public virtual void Clear() {
		onTriggerEnter = delegate { };
		onTriggerStay = delegate { };
		onTriggerExit = delegate { };
		onCollisionEnter = delegate { };
		onCollisionStay = delegate { };
		onCollisionExit = delegate { };
	}
}

    如此一来,只需要让类继承  ColliderListener  类,然后注册 onTriggerEnter 等已经封装好的事件即可,比每次都重复实现接口的效率要高不少。 本例封装了6个方法,还可以参照本例直接做出 Collider2DListener ,如果有需要可以把其他MonoBehaviour生命周期方法封装起来,做成其他的常用快速实现类。

    不过需要注意一个问题,由于这些接口都是空实现,但是只要写了这个方法,哪怕没有实现,Unity的UI消息机制,也会每次将消息发送到这个方法上,会有一定性能开销。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ls9512

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

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

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

打赏作者

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

抵扣说明:

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

余额充值