欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

碰撞检测公有化

程序员文章站 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;
    }



void TriggerEnter(Collider2D c)
    {
        if (!box.IsOnTriggerEnter)
        {
            Debug.Log("外部检测,进入");
            box.IsOnTriggerEnter = true;
          
        }
      
    }


这样只需要一个通用的基础碰撞脚本就行了--------------------------------