碰撞检测公有化
程序员文章站
2022-03-13 15:27:05
...
在游戏中经常会用到碰撞检测,我以前的作法是 每次都给检测的对象新建一个脚本,然后在里面执行相应逻辑,久而久之发现实在是太繁琐了,为什么不让碰撞检测的脚本通用化呢?
在外部控制碰撞逻辑,免去新建脚本的过程!
---------------------------------------我是分割线-------------------------------------
碰撞脚本(我用的触发器检测)------>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using System;
public class CheckTrigger : MonoBehaviour
{
public event Action<Collider2D> OnTriggerEnterAction = null;
public event Action<Collider2D> OnTriggerExitAction = null;
public event Action<Collider2D> OnTriggerStayAction = null;
private bool _isOnTriggerEnter = false;
public bool IsOnTriggerEnter
{
get
{
return _isOnTriggerEnter;
}
set
{
_isOnTriggerEnter = value;
}
}
// 开始接触
void OnTriggerEnter2D(Collider2D collider)
{
//Debug.Log("开始接触");
if (OnTriggerEnterAction != null)
{
OnTriggerEnterAction(collider);
}
}
// 接触结束
void OnTriggerExit2D(Collider2D collider)
{
//Debug.Log("接触结束");
if (OnTriggerExitAction != null)
{
OnTriggerExitAction(collider);
}
}
// 接触持续中
void OnTriggerStay2D(Collider2D collider)
{
//Debug.Log("接触持续中");
if (OnTriggerStayAction != null)
{
OnTriggerStayAction(collider);
}
}
}
box绑定上面的脚本,外部调用放在box所在脚本里面即可
void AddEvent()
{
box.OnTriggerEnterAction += TriggerEnter;
}
{
box.OnTriggerEnterAction += TriggerEnter;
}
void TriggerEnter(Collider2D c)
{
if (!box.IsOnTriggerEnter)
{
Debug.Log("外部检测,进入");
box.IsOnTriggerEnter = true;
}
{
if (!box.IsOnTriggerEnter)
{
Debug.Log("外部检测,进入");
box.IsOnTriggerEnter = true;
}
}
这样只需要一个通用的基础碰撞脚本就行了--------------------------------
上一篇: 也发google plus邀请
下一篇: js碰撞检测函数的封装