前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【100个 Unity踩坑小知识点】| Unity中的 碰撞盒检测 Physics.OverlapBox、OverlapCapsule、OverlapSphere

【100个 Unity踩坑小知识点】| Unity中的 碰撞盒检测 Physics.OverlapBox、OverlapCapsule、OverlapSphere

作者头像
呆呆敲代码的小Y
发布2022-05-12 14:18:13
1.8K0
发布2022-05-12 14:18:13
举报
文章被收录于专栏:呆呆敲代码的小Y 公众号

Unity 小科普

老规矩,先介绍一下 Unity 的科普小知识:

  • Unity是 实时3D互动内容创作和运营平台 。
  • 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
  • Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
  • 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!

Unity 踩坑小知识点学习

Unity中的 碰撞盒检测 Physics.OverlapBox、OverlapCapsule、OverlapSphere

在Unity中常见的有两种检测方法

  • 一种是组件的检测方法OnTrigger、OnCollider
  • 另一种就是Physics.Overlap

第二种方法其实是Physics中的API,官方API介绍地址

能直接通过Physics.到的碰撞检测方法有下面几种:

  • Physics.OverlapBox
  • Physics.OverlapCapsule
  • Physics.OverlapSphere
在这里插入图片描述
在这里插入图片描述

其中这三种又有多种重载函数,看自己的需求选择即可。

在这里插入图片描述
在这里插入图片描述

下面简单介绍下这三种形状的碰撞检测方法的使用。

Physics.OverlapBox
代码语言:javascript
复制
public static Collider[] OverlapBox (Vector3 center, Vector3 halfExtents, [DefaultValue ("Quaternion.identity")] Quaternion orientation, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);

参数介绍:第一个Vector3是碰撞的中心,第二个为Box的长宽高,第三个Quaternion类型为Box的方向,第四个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。

返回值为与BOX碰撞的Collider数组

下面是使用实例:

代码语言:javascript
复制
    void Update()
    {
        Collider[] collider = Physics.OverlapBox(gameObject.transform.position, new Vector3(3, 3, 3),Quaternion.identity,LayerMask.GetMask("Enemy"));

        foreach (var col in collider)
        {
            Debug.Log("检测到的层级为“Enemy”的游戏对象:"+col);
        }
    }

一般来说没有特殊的需求,只需要设置碰撞的中心点和长宽高即可。

我们给主角的脚本中添加上一个这样的方法,就可以实现与Collider组件一样的效果了,拿到与主角碰撞的所有物体。

特别说明:由于使用该方法进行检测的时候,缺少一个视觉效果,我们不知道检测的范围到底有多大,所以这个时候可以使用 Gizmos 辅助线框 来完美解决这个问题

效果如下:

在这里插入图片描述
在这里插入图片描述

完整代码如下:

代码语言:javascript
复制
    [Header("检测盒子的Vector3")]
    public Vector3 ColliderV3;
    
    void Update()
    {
        Collider[] collider = Physics.OverlapBox(gameObject.transform.position, ColliderV3, Quaternion.identity);

        foreach (var col in collider)
        {
            Debug.Log("检测到的游戏对象:"+col);
        }
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;//改变线框的颜色
        Gizmos.DrawWireCube(transform.position, ColliderV3);//正方体虚线框
    }
Physics.OverlapCapsule
代码语言:javascript
复制
public static Collider[] OverlapCapsule (Vector3 point0, Vector3 point1, float radius, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);

参数介绍:第一个Vector3是Capsule的的底部中心,第一个Vector3是Capsule的的顶部中心,第三个是Capsule的半径,第四个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。

返回值为与Capsule碰撞的Collider数组。

使用方法与OverlapBox一致,只不过是参数不同。

Physics.OverlapSphere
代码语言:javascript
复制
public static Collider[] OverlapSphere (Vector3 position, float radius, [DefaultValue ("AllLayers")] int layerMask, [DefaultValue ("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);

参数介绍:第一个Vector3是Sphere的中心,第二个是Capsule的半径,第三个为碰撞检测的层级的Layer(默认为所有的Layer),最后的queryTrigger一般用不到。

返回值为与Capsule碰撞的Collider数组。

使用方法与OverlapBox一致,只不过是参数不同。

绘制可视化线框的时候使用Gizmos.DrawWireSphere即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/05/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Unity 小科普
  • Unity 踩坑小知识点学习
    • Unity中的 碰撞盒检测 Physics.OverlapBox、OverlapCapsule、OverlapSphere
      • Physics.OverlapBox
      • Physics.OverlapCapsule
      • Physics.OverlapSphere
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档