基础GamePlay知识-矩形碰撞检测

news2024/10/3 0:33:32

主要介绍AABB碰撞检测下,矩形该如何和矩形进行碰撞检测/和圆形进行碰撞检测。
直接看图,主要是比较两个矩形的边界线的前后关系。

效果

在这里插入图片描述

分析什么时候重合

在这里插入图片描述

分析什么时候不重合

在这里插入图片描述

完整代码

矩形身上挂载

public class Rectangle : MonoBehaviour
{
    public float width;
    public float heigth;
    private Color showColor;
    public Vector3 leftDownpoint { get; private set; }
    public Vector3 rightUppoint { get; private set; }
    private Vector3 leftUppoint;
    private Vector3 rightDownpoint;
    // Start is called before the first frame update
    void Start()
    {
        showColor = Color.green;
        RectangleCollisonManager.GetInstance().RegistCollider(this);       
    }
    public void Detect(Vector3 leftDownPoint, Vector3 rightUpPoint)
    {
        if(this.rightUppoint.x < leftDownPoint.x || rightUpPoint.x < this.leftDownpoint.x || this.rightUppoint.y < leftDownPoint.y || rightUpPoint.y < this.leftDownpoint.y)
        {
            showColor = Color.green;
            return;
        }
        showColor = Color.red;
    }
    // Update is called once per frame
    void Update()
    {
        leftDownpoint = transform.position;
        leftUppoint = transform.position + transform.up * heigth;
        rightDownpoint = transform.position + transform.right * width;
        rightUppoint = transform.position + transform.right * width + transform.up * heigth;
        DrawRectangle();
    }

    void DrawRectangle()
    {
        Debug.DrawLine(leftDownpoint, leftUppoint, showColor);
        Debug.DrawLine(leftDownpoint, rightDownpoint, showColor);
        Debug.DrawLine(leftUppoint, rightUppoint, showColor);
        Debug.DrawLine(rightUppoint, rightDownpoint, showColor);
    }
}

负责让所有矩形互相进行检测

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RectangleCollisonManager : BaseManager<RectangleCollisonManager>
{
    private List<Rectangle> RectangleCollider;
    public void Init()
    {
    }

    public void RegistCollider(Rectangle r)
    {
        if(RectangleCollider == null)
        {
            RectangleCollider = new List<Rectangle>();
        }
        RectangleCollider.Add(r);
    }

    public void Update()
    {
        DetectCollision();
    }
    void DetectCollision()
    {
        for (int i = 0; i < RectangleCollider.Count; i++)
        {
            for(int j = 0 ; j < RectangleCollider.Count; j++)
            {
                if (j != i)
                {
                    RectangleCollider[i].Detect(RectangleCollider[j].leftDownpoint, RectangleCollider[j].rightUppoint);
                }
            }
        }
    }
}

tickManger调用管理器的tick,挂载在场景任意物体上面

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TickManager : MonoBehaviour
{
    private RectangleCollisonManager m_rectangleCollisonManager;
    // Start is called before the first frame update
    void Start()
    {
        m_rectangleCollisonManager = RectangleCollisonManager.GetInstance();
        m_rectangleCollisonManager.Init();
    }

    // Update is called once per frame
    void Update()
    {
        m_rectangleCollisonManager.Update();
    }
}

单例基类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BaseManager<T> where T : new()
{
    private static T instance;
    public static T GetInstance()
    {
        if (instance == null)
        {
            instance = new T();
            return instance;
        }
        else
        {
            return instance;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MES数据采集设备

在智能制造日益盛行的今天&#xff0c;MES&#xff08;制造执行系统&#xff09;作为连接计划与生产现场的关键环节&#xff0c;其重要性不言而喻。而MES数据采集设备则是MES系统的核心组件&#xff0c;负责实时、准确地获取生产现场的各种数据&#xff0c;为企业的生产决策提供…

内存卡损坏打不开:数据恢复全攻略

在我们的日常生活中&#xff0c;内存卡作为一种常见的存储设备&#xff0c;广泛应用于手机、相机、平板电脑等电子设备中。然而&#xff0c;有时我们会遇到内存卡损坏打不开的问题&#xff0c;导致重要的照片、视频或文件无法读取。面对这种情况&#xff0c;我们该如何应对呢&a…

mac电脑总卡蓝屏是怎么回事,苹果电脑老卡蓝屏怎么办

电脑老卡蓝屏是比较常见的电脑故障之一&#xff0c;导致这一问题的出现很可能是电脑本身的硬件&#xff0c;或电脑上的驱动安装错误&#xff0c;没法运行&#xff0c;当然也不排除其他的一些因素。虽说电脑蓝屏是电脑几乎都会出现的小毛病&#xff0c;不足以致命&#xff0c;但…

短视频文案素材哪里找?推荐几个既好看又好用的素材网站

我们在做短视频的同时&#xff0c;一般需要一些视频&#xff0c;文案&#xff0c;图片&#xff0c;音频&#xff0c;来添加短视频的突出点&#xff0c;那么这些短视频文案去哪里找呢? 蛙学网 想要做出容易上热门的短视频文案&#xff0c;你一定要找到合适的短视频素材&#…

【个人开发】llama2部署实践(三)——python部署llama服务(基于GPU加速)

1.python环境准备 注&#xff1a;llama-cpp-python安装一定要带上前面的参数安装&#xff0c;如果仅用pip install装&#xff0c;启动服务时并没将模型加载到GPU里面。 # CMAKE_ARGS"-DLLAMA_METALon" FORCE_CMAKE1 pip install llama-cpp-python CMAKE_ARGS"…

【C语言】深入理解指针(进阶篇)

一、数组名的理解 数组名就是地址&#xff0c;而且是数组首元素的地址。 任务&#xff1a;运行以下代码&#xff0c;看数组名是否是地址。 #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,0 };printf("&arr[0] %p\n", &arr[0]);pri…

PMP-项目管理十大知识领域学习和理解

项目管理十大知识领域&#xff1a; 整合、范围、进度、成本、 质量、资源、沟通、风险、采购、干系人 十大知识领域的理解 十大知识领域裁剪情况&#xff1a; 十大知识领域: 硬技能和软技能

flink 总结

flink 流式api checkpoint state 状态分类 Managed State 和 Raw State Managed State Flink 自己管理&#xff0c;支持多种数据结构 Raw State 用户自己管理&#xff0c; 只支持byte Managed Staste 分为 Keyed State 和 operator State Managed State 只能在Keyed Str…

沁恒CH32V307VCT6开发板记录---kalrry

沁恒CH32V307VCT6开发板记录---kalrry 一、官网申请开发板二、环境准备图一 一、官网申请开发板 1.沁恒官网 二、环境准备 1.数据手册&#xff1a;CH32V307DS0.PDF&#xff0c;CH32FV2x_V3xRM.PDF 2.CH32V307评估板说明及参考应用例程&#xff1a;CH32V307EVT_ZIP 3.集成开…

Ubuntu18.04 下使用 Pybind11实现 C++ 调用 Python 函数和类的示例

Pybind11 是一个轻量级的库&#xff0c;它提供了在 C 中无缝集成 Python 代码的能力。使用 Pybind11&#xff0c;你可以很容易地从 C 调用 Python 代码&#xff0c;反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C 调用 Python 接口。 安装…

上位机图像处理和嵌入式模块部署(qmacvisual二维码识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果说条形码在商品上使用比较多的话&#xff0c;那么二维码识别是一个更加使用频繁的场合。为什么使用这样频繁&#xff0c;我想很多一部分原因来…

Java开发:对象间复制属性,方法归纳

在Java开发中&#xff0c;对象间复制属性是一项常见的任务&#xff0c;特别是在处理层&#xff08;如控制器层&#xff09;与服务层或数据传输对象&#xff08;DTOs&#xff09;之间的数据转换时。有多种方法可以实现User对象到UserDTO对象的属性复制&#xff0c;下面列举了几种…

Ubuntu 安装谷歌拼音输入法

一、Fcitx 安装 在Ubuntu 下&#xff0c;谷歌拼音输入法是基于Fcitx输入法的。所以&#xff0c;首先需要安装Fcitx。一般来说&#xff0c;Ubuntu最新版中都默认安装了Fcitx&#xff0c;但是为了确保一下&#xff0c;我们可以在系统终端中运行如下命令&#xff1a; sudo apt ins…

Matlab|【EI复现】电动汽车集群并网的分布式鲁棒优化调度模型

目录 1 内容简介 2 关键知识点 2.1 三类电动汽车模型 3 程序结果 4 下载链接 1 内容简介 电动汽车的数据模型种类繁多&#xff0c;但是用到比较高阶数学方法的并不多&#xff0c;本次分享的程序是下图所示的文章。 采用分布鲁棒优化模型&#xff0c;用到鲁棒对等转换&…

latex绘图中\begin{figure}[htbp]中的htbp什么意思

在LaTeX中&#xff0c;\begin{figure}[htbp] 用来开始一个图形环境&#xff0c;其中 [htbp] 是一个位置参数&#xff0c;用来指导LaTeX如何放置这个图形。 具体来说&#xff0c;[htbp] 中的每个字母代表一个放置选项&#xff1a; h&#xff1a;代表“here”&#xff0c;意味着…

vscode 配置 c 语言 问题解决

1.VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid。 解决方法: VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid_unable to start debugging. the value of midebugger-CSDN博客 2.VSCode运行C终端…

数据库系统原理实验报告1 | E-R图设计

整理自博主2021级专业课《数据库系统原理》自己完成的实验报告。 目录 一、实验目的 二、实验内容 1、某个学校有若干个系 2、某工厂生产若干产品 3、某学校的田径运动会中设置了各类比赛 4、自己调查一个需要提供开发数据库应用系统的单位 三、实验结果总结 四、实验结…

分布式之SpringCloud

一、SpringCloud 1、SpringCloud是什么 Spring Cloud是一系列框架的有序集合&#xff0c;这些框架为我们提供了分布式系统构建工具。 2、SpringCloud包含那些项目 项目项目名称服务注册于发现Alibaba Nacos、Netflix Eureka、Apache Zookper分布式配置中心Alibaba Nacos、S…

架构面试题汇总:网络协议34问(七)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 网络协议是实现各种设备和应用程序之间顺畅通信的基石。无论是构建分布式系统、开发Web应用&#xff0c;还是进行网络通信&#x…

前端vite+vue3——可视化页面性能耗时指标(fmp、fp)

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐可视化fmp、fp指标&#x1f496; MutationObserver 计算 dom的变化&#x1f496; 使用条形图展示 fmp、fp时间 ⭐项目代码⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端vitevue3——可视化页面性能耗时…