Unity:Unity Trigger Action - used to wire up actions to trigger events

转载: https://gist.github.com/edwardrowe/f280a1a7f08b6a204745


TriggerAction.cs

// Script by Edward Rowe (@edwardlrowe)
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

[RequireComponent (typeof(Collider2D))]
public class TriggerAction : MonoBehaviour
{
	[Tooltip ("Tag strings of valid objects to activate Trigger.")]
	public string[] FilterTags;
	[Tooltip ("Disable the collider and Trigger when Touched.")]
	public bool DisableOnTouch;

	[SerializeField]
	public UnityEngine.Events.UnityEvent
		TouchEvent;
	
	Collider2D myCollider {
		get {
			if (_myCollider == null) {
				_myCollider = GetComponent<Collider2D> ();
			}
			return _myCollider;
		}
	}

	Collider2D _myCollider;
	
	void OnTriggerEnter2D (Collider2D other)
	{
		if (ShouldColliderFireAction (other)) {
			FireTouchEvent ();
		}
	}

	bool ShouldColliderFireAction (Collider2D activator)
	{
		if (FilterTags == null || FilterTags.Length == 0) {
			return true;
		}

		// Search for matching tags
		for (int i = 0; i < FilterTags.Length; i++) {
			if (activator.CompareTag (FilterTags[i])) {
				return true;
			}
		}

		// Matched no tags
		return false;
	}

	void FireTouchEvent ()
	{
		TouchEvent.Invoke ();
		
		if (DisableOnTouch) {
			myCollider.enabled = false;
			enabled = false;
		}
	}
}

#if UNITY_EDITOR
[CustomEditor (typeof (TriggerAction)), CanEditMultipleObjects]
public class TriggerActionInspector : UnityEditor.Editor
{
	public override void OnInspectorGUI ()
	{
		DrawDefaultInspector ();

		var triggerAction = target as TriggerAction;
		Collider2D collider = triggerAction.GetComponent<Collider2D> ();

		if (collider == null) {
			EditorGUILayout.HelpBox ("Missing Collider2D on TriggerAction", MessageType.Error);
		} else {
			if (!collider.isTrigger) {
				EditorGUILayout.HelpBox ("Trigger Events will not be called unless collider is a Trigger", MessageType.Warning);
			}
		}
	}
}
#endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值