浅谈Unity 碰撞机Collider的一些使用心得

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1.查看物体的尺寸以及碰撞组件的检测范围

以BOX Collider为例,首先创建一个Cube,Scale = (1,1,1)

这里的Scale是localScale,可以通过打印查看

Vector3 size = transform.localScale;
Debug.Log("localScale" + size.ToString());

注意,当该Cube挂载在某个父物体中,由于父物体可能存在缩放,所以该子物体的Scale是相对于父物体,不是真实尺寸,此时子物体的尺寸要通过lossyScale来获取,即

Vector3 size2 = transform.lossyScale;
Debug.Log("lossyScale" + size.ToString());//该打印会省略小数,具体查看可用size.x,size.y单独查看

创建好Cube之后我们发现,Box Collider默认的Size就是(1,1,1),

可以通过以下代码查看

Vector3 sizeCollider = transform.GetComponent<Collider>().bounds.size;
Debug.Log("碰撞器尺寸" + sizeCollider.ToString());

这里的碰撞器尺寸是相对于Cube自身的,当Cube的Scale变化时,会自动调整至与Cube一样的大小,因此一般情况下我们无需进行修改,正如Sphere Collider的默认Size为0.5一样。

在实际使用中,由于我设置的物体尺寸较小,发现两个物体在肉眼观察下,还没接触就触发了OnCollisionEnter()函数,这是因为Unity软件默认设置碰撞检测系统用于产生碰撞接触的距离为 0.01m。注意这里单位是m,也就是两物体的轮廓相距不足0.01米时,碰撞体就会产生碰撞接触,而不是真正等动画接触上才算。

 所以只需要打开Edit下Project Setting的Physics设置一下,将默认的0.01调小,即可实现肉眼接触时才碰撞的逼真效果。

 2.碰撞检测失效的问题

对于一些检测不到的问题,首先检查两物体的设置,例如至少有一个刚体,碰撞组间,具体可参考以下博文

(57条消息) 【Unity】物理系统的静态碰撞体、刚体碰撞体、Kinematic刚体碰撞体_萧然CS的博客-CSDN博客_unity 静态刚体

如果还是检测不到,由于Unity中是按帧检测的,可以尝试用土办法扩大碰撞体的厚度,或者打开Edit下Project Setting的Timet调小一下Fixed Timestep,以提高系统刷新率。

 3.手册的重要性

遇到不懂的问题,首先看看手册相关部分,可以少走很多弯路,因为手册中很多功能解释的很清楚,有些百度甚至都不一定有答案。

附上手册

物理 (Physics) - Unity 手册 (unity3d.com)

Physics里这些设置定义了物理模拟精度的限制,如果有小伙伴对精度有要求,可以参考手册修改参数,但更精确的模拟需要更多的处理开销。

浅谈Unity中的碰撞检测 欢迎大家来到我的博客http://unity.gopedu.com/home.php?mod=space&uid=3352&do=blog&view=me&from=space 碰撞检测     首先,我们得明确一点:即产生碰撞信息所需要的条件。事实上,在U3D中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我 阅读详情

相关推荐

Cocos Creator入门实战:从零构建2D游戏与TypeScript开发指南

游戏开发的核心在于将创意转化为可交互的体验,其基础是理解场景、对象与逻辑的构建方式。在众多游戏引擎中,基于组件化的架构因其高复用性和解耦特性,成为现代开发的主流范式。这种模式通过将功能模块化为可插拔的组件,赋予游戏对象不同的能力,极大地提升了开发效率和代码可维护性。对于希望快速上手游戏开发,尤其是熟悉Web技术的开发者而言,Cocos Creator提供了一个集强大编辑器、跨平台发布与友好生态于一体的完整解决方案。其核心工作流围绕节点(Node)与组件(Component)展开,结合TypeScript的强

weixin_33724059的博客 377

关于Unity3D中lossyScale的一点思考

Unity3D中,transform的lossyScale这个属性使用情况并不多,因此很多人对其没什么了解,笔者最近在做和Unity3D有关的服务器工作,需要了解其来源,因此对其做了一点研究。 在Unity3D的官方文档里,是这样介绍lossyScale的: 然而,这样的介绍,对实现该属性并无多大意义,当然,为什么要实现该属性,因为Unity3D中的基本碰撞体是使用lossyScale伸...

qq_26900671的博客 4295

unity3d 旋转cube时变形

将cube移到父路径同级,重置再,更改角度,或者将父路径先重置,再将cube移动到父节点下面

JavaBigData的博客 1105

Unity 为游戏对象设置标签

我们从【是什么】【为什么】【怎么用】三个问题,来讨论游戏对象的标签。 1. 什么是标签 标签 (Tag) 是可分配给游戏对象的参考词。例如,可为玩家控制的角色定义“Player”标签,为场景中的各种树木定义为“Tree”标签。 具体到Unity中,比如,我们新建一个游戏对象,那么,Inspector面板,开头就是个Tag的坑位。 值是Untagged,也就是没有具体标签值。 2. 为什么要有标签 标签不是必须的,它主要用于脚本,一个典型的例子是,你拿到了一个gameObject,但不知道这个是啥东西,就可

newchenxf的专栏 5068

unity3D】Collider碰撞器组件

🈶本篇是unityCollider碰撞器组件

zhurouwanzi的博客 3492

Unity3D-Collider(碰撞器)与Tirgger(触发器)

碰撞的物体要加上collider组件 一下加上了box collider组件 先创建几个物体并且给tag中设置名称 下面是碰撞物体消失 后退以及旋转的代码 脚本托到操控去碰的物体上 using System.Collections; using System.Collections.Generic; using UnityEngine; public class colider : MonoBehaviour { public float speed; private bool bTrigger=f

Be yourself,everyone else is already taken 1142

Unity3d bounds包围盒 和collider碰撞器区别

边界框.Bounds是 struct 结构体.而我们获得Bounds的主要途径有三种:Render.bounds 世界坐标Collider.bounds 世界坐标Mesh.bounds 本地坐标。

绀目澄清 5595

Unity Line Collider

最近在写unity的一个2D游戏,因为unity中只有Line Render却没有Line Collider,所以自己写了个。 请配合Line Render使用! {CSDN:CODE:2602366}

qq_568246876的博客 546

GetComponent(),parent,GetComponentInChildren

获取自身组件属性,从当前游戏对象获取组件BoxCollider,只在当前游戏对象中获取,没得到的就返回null,不会去子物体中去寻找。GetComponentsInChildren()=GetComponentsInChildren(true)取本游戏对象及子物体的所有组件。GetComponentsInChildren(false)取本游戏对象及子物体的所有组件 除开非活跃的游戏对象,不是该组件是否活跃。GetComponents()获取本游戏对象的所有T组件,不会去子物体中找。

菜鸟芭乐的博客 359

Unity技术分享不依赖Collider实现点击事件回调

【代码】Unity技术分享不依赖Collider实现点击事件回调。

月儿圆 429

Unity刚体、碰撞器、实验和总结

Unity刚体、碰撞器、实验和总结 碰撞盒与刚体分类

GA博客 1万+

unity限制相可移动区域(box collider

通过box collider组件限制相的移动区域

manson的博客 3236

Unity3D组件手册-Box Collider

碰撞器 盒碰撞器是一个基本的方形碰撞原型 一堆盒碰撞器 Properties属性   材质 引用何种物理材质决定了他和其他对象如何作用。 是否触发器 如激活,此碰撞器用于触发事件,并且被物理引擎忽略。 大小 在X、Y、Z三维上的碰撞器尺寸。 中心 碰撞器在对象本地坐标中的位置 Details细节 盒碰撞器可以被调整成不同大小的长方体。能够很好地用于门、墙、平台等

Cocoa_China的专栏 1万+

Unity组件大全之 Physics物理 |(60)Mesh Collider 网格碰撞

在游戏开发过程中,物理碰撞检测是一个至关重要的部分。在Unity中,Collider组件帮助我们实现了物理系统中的碰撞检测。本文将详细介绍**Mesh Collider**组件,它是Unity中一个特殊且强大的碰撞体,能够通过复杂的网格模型进行精确的物理碰撞处理。

Unity打怪升级 3412

Unity组件大全之 Physics物理 |(57)Box Collider:游戏碰撞解决方案

在游戏开发中,碰撞检测(Collision Detection)是至关重要的一部分。Unity 提供了多种碰撞器(Collider)组件来处理对象之间的物理交互,而 Box Collider 是其中最常见和最基础的一种。

Unity打怪升级 3762

Unity一键适配碰撞Collider

Unity一键适配碰撞Collider

qq_63521922的博客 1138

Unity根据BoxCollider的边画MeshRenderer

创建前Mesh 效果图 public Material doubleM; //渲染的材质球 private static Vector3[] pointAry = new Vector3[32]; private static float width = 0.04f; //宽度 public GameObject cube; //需要画的物体身上必须有boxCollider private void Update()

weixin_43926289的博客 1498

Unity的Bounds(包围盒)简记

包围盒算法是一种求解离散点集最优包围空间的方法。基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。最常见的包围盒算法有AABB包围盒(Axis-aligned bounding box),包围球(Sphere),方向包围盒OBB(Oriented bounding box),固定方向凸包FDH(Fixed directions hulls或k-DOP)。

天富儿的博客 1万+

Unity3D——学习分享(九)碰撞检测

在我们游戏开发过程中,碰撞检测函数的使用十分频繁,比如射击游戏检测子弹是否碰撞到敌人触发敌人掉血、受伤等状态,生存类游戏中常见的走到门前,通过碰撞检测来控制自动开关门等。 碰撞检测函数 在unity的中有两个用于碰撞检测的函数 1. OnTriggerEnter(Collider other){ } 2. OnCollisionEnter(Collision collision){...

纸飞机 2871
上一篇: 算法备忘录~二分法搜索旋转排序数组的元素
Arthur‘s King
博客等级 码龄7年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值