unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

Unity --- 物理引擎 --- 触发器 与 碰撞器详解 1.碰撞阶段的三个方法都有一个参数 --- Collision other --- 这个参数的类型是碰撞器类 --- 当挂载该脚本的游戏物体a与其它具有碰撞器组件的游戏物体b发生碰撞时, 游戏物体b的碰撞器组件对象就会被传给三个方法中的引用参数 Collision other.注意碰撞三阶段与触发三阶段之间的 --- a.方法区别 b.方法的参数的类型区别(一个是Collision类名词碰撞,类中有一个Collider类型的引用;另一个是Collider类 名词碰撞器,它就是碰撞器类型) 阅读详情

unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

分类: Unity3D   2755人阅读  评论(2)  收藏  举报

刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:

Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。

个人理解就是刚体是用来模拟物体受到一个力作用时候的表现,这个从刚体中的参数就可以看出:


全是关于物体受到力之后,怎么运动的参数,比如Mass质量,Drag阻力。


碰撞体的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:

碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。


个人是这样理解的,为什么要判断碰撞,判断碰撞就是需要计算力,无论是阻力也好,动力也好,如果此时物体有刚体组件,那么物体就会在力的作用下运动。如果这个物体没有刚体,那么碰撞产生的力就没有任何意义了,那计算碰撞也就没有任何意义了。

所以,我们可以推断出,如果两个碰撞体都没有刚体组件,那么这两个物体即使相互发生了碰撞,那么也不会有碰撞事件的。


官网上的碰撞的图如下(注:据说是官网的图,我在网上很多地方看到了,但我目前为止还没找到在官网的哪个位置哈):


从上面的图中我们看出来碰撞的双方中一定要有一个Rigidbody存在,并且碰撞双方必须都要有碰撞体组件。


但做实验的时候发现了一个很诡异的事情,就是发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双方才会收到碰撞事件,以下是我做的实验:

一、控制A(刚体加碰撞体)撞击 静止的B(只有碰撞体),双方能收到碰撞事件。

二、控制B(只有碰撞体)撞击 静止的A(刚体加碰撞体),双方收不到碰撞事件。

三、让A(刚体加碰撞体)自由下落,然后控制B(只有碰撞体)去撞击A,双方能受到碰撞事件。


得出的结论似乎是如果碰撞双方只有一个有刚体,那么那个刚体一定要处于运动的状态下才会有碰撞事件发生。


接下来就是IsTrigger选项了,上面的情况都没有触发信息,先列举一下触发事件和碰撞事件,如下:

触发信息检测:
1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器

碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo )  当逗留碰撞器


下面是一张关于触发的关系图,如下(注:同样是来自网上,我目前还没在官网上找着哈)



下面就是我做的测试情况,都是A物体去撞B物体。

一、A(碰撞体),B(没有碰撞体,无论有没有刚体),没有触发事件。

二、A(碰撞体),B(碰撞体),没有触发事件。

二、A(碰撞体和刚体,开启IsTrigger),B(碰撞体,关闭IsTrigger),双方都能收到触发事件。

三、A(碰撞体和刚体,关闭IsTrigger),B(碰撞体,开启IsTrigger),双方都能收到触发事件。

四、A (碰撞体,关闭IsTrigger),B(碰撞体和刚体,开启IsTrigger),没有触发事件。

五、A (碰撞体,开启IsTrigger),B(碰撞体和刚体,关闭IsTrigger),没有触发事件。


额外实验:

六、A(碰撞体和刚体,开启IsTrigger)自由下落,B(碰撞体)撞击A,双方都能收到触发事件。


根据上面的实验得出,如果要收到触发事件,必须满足如下三个条件:

1、必须都要有碰撞器组件(Collider),其实上面的碰撞事件同样也需要这个前提条件。

2、必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击)。

3、两个碰撞器中至少有一个开启了IsTrigger。


此外还有两点:

一、产生触发事件的两个物体会相互穿越,准确的说是因为开启IsTrigger那个物体会被物理引擎锁忽略掉,所以会产生两个物体穿越的情况。

二、两个对象要么都收到碰撞事件,要么都收到触发事件,不会出现一个收到触发事件,一个收到碰撞事件的情况。


还有一个经验点就是,在控制一个物体A去撞另一个物体B时,不要直接去修改物体A的Transform的position属性,因为你会发现如果即使两者发生了碰撞也还是会穿越的,原因就在于我们是直接设置的坐标,如果物体A有刚体组件的话,应该用AddForce,给物体添加一个力,然后让物理引擎去让物体动,此时如果发生了碰撞的话,就不会穿越了。


好吧,下午折腾了半天之后,我就一直在想那个IsTrigger有啥用,后来在网上搜了一下,说是可以做门的自动打开,就让我想起了Unity3d 4自带的哪个AngryBots例子,貌似当控制主角走到一个门前时,那个门会自动打开。

于是就打开那个例子工程,去看,发现果然是这样的,大概原理就是在门前面放了一个设置了IsTrigger的透明碰撞体,用于专门监听碰撞,当主角进入这个区域时,就通过OnTriggerEnter事件把门预先打开。

如图:



Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider 1.mass -- 质量 --- 下面有质量的取值范围如果场景中只有一个游戏物体的话,质量为多少都无所谓,但是当场景中具有多个游戏物体时,我们就需要根据实际情况给每一个游戏物体设置质量了 --- 毕竟你不可能让石头和羽毛一样重吧2.第二个属性drag 表示的是阻力(damping --- 衰减)--- 这个阻力指的是空气阻力下面这张图中有设置空气阻力属性的参考值。 阅读详情

相关推荐

【Unity入门计划】基本概念(2)-触发器 Trigger

当我们想要检测到物体之间的接触,又不想让碰撞检测影响物体的移动,这时候就可以用到触发器。文章简单介绍了什么是触发器、触发器与碰撞体的关系、触发检测和碰撞检测等。

qq_41835314的博客 9261

Collider(碰撞器)与IsTrigger(触碰器)详解

1、什么是碰撞器? 描述了物体可被碰撞的边界,以及碰撞过程中相互影响效果。 碰撞效果: 两个游戏对象碰在一起,通过物理引擎产生类似现实的效果 种类: 盒碰撞器(Box Collider) 椭圆碰撞器(Sphere Collider) 胶囊碰撞器(Capsule Collider) 车轮碰撞器(Wheel Collider):专用于车辆 网格碰撞器(Mesh Collider)

Light的博客 7189

Unity3D入门实战:小球吃金币游戏开发全流程解析

在游戏开发领域,碰撞检测与物理引擎是实现交互的核心技术。其原理是通过计算物体间的几何关系,触发预设逻辑响应,从而构建真实的游戏世界。这项技术对于提升游戏沉浸感和可玩性至关重要,广泛应用于角色移动、物体交互、战斗系统等场景。本文以Unity3D引擎为例,结合Rigidbody刚体组件和OnTriggerEnter方法,深入讲解如何实现小球与金币的碰撞收集机制。通过预制体(Prefab)管理和对象池(Object Pooling)优化技巧,不仅能高效处理游戏物体生成与销毁,还能显著提升运行时性能,是新手入门Un

weixin_33744141的博客 297

Unity3D碰撞器事件测试(Rigidbody/Kinematic/Trigger/Collider)

1.Kinematic和刚体之间的碰撞事件 Unity官方有一个详细的碰撞关系表:http://docs.unity3d.com/Manual/CollidersOverview.html 但其实可以精简为以下几点: 1.两个勾选kinematic的刚体碰撞器不会发生碰撞。 2.勾选Kinematic的刚体碰撞器不可和无刚体碰撞器发生碰撞,但可以有触发事件。 ...

dongfushu7972的博客 616

Unity物理引擎刚体休眠机制解析与异常问题排查实战

在游戏开发与实时模拟中,物理引擎是实现真实交互的核心组件,其通过刚体动力学模拟物体的运动与碰撞。Unity底层集成的PhysX引擎,为了优化性能引入了休眠机制,当刚体运动低于阈值时会暂停计算,但这可能导致物体悬空、静止抖动等异常现象。理解这一原理对于开发需要精确物理模拟的AR应用、机关谜题或处理导入模型至关重要。通过调整休眠阈值、手动唤醒、优化碰撞体与物理材质等工程实践,开发者可以有效解决因休眠机制引发的交互问题,确保虚拟物体的行为符合预期,提升用户体验与系统稳定性。

weixin_33827731的博客 398

Unity3D游戏开发入门:从零实现机器人跳跃吃金币小游戏

游戏开发的核心在于将创意转化为可交互的体验,其基础是理解游戏引擎的工作原理。Unity3D作为主流的跨平台游戏引擎,通过组件化架构和物理系统,让开发者能够高效构建游戏世界。掌握角色控制、碰撞检测和状态管理等关键技术,不仅能实现核心玩法,更能为复杂项目打下坚实基础。在实践层面,一个完整的练手项目如“机器人跳跃吃金币”,能系统性地串联输入处理、物理交互、UI逻辑等模块。通过实现跳跃机制与金币收集系统,开发者可以深入理解刚体组件、触发器检测及游戏管理器等核心概念。这类项目特别适合初学者和高校学生,它能提供从场景搭

weixin_30598225的博客 597

Unity虚拟装配物理引擎优化:碰撞检测、刚体管理与性能调优实战

碰撞检测与多体动力学是实时物理模拟的核心基础,其性能直接决定了虚拟仿真系统的流畅度与真实性。在工业仿真与游戏开发中,物理引擎通过刚体、碰撞体与约束求解,为物体交互提供了真实的力学反馈。其技术价值在于能以可预测的方式模拟复杂物理现象,是构建沉浸式虚拟装配、培训系统的关键。针对虚拟装配场景中模型复杂度高、接触点密集的挑战,需从碰撞体优化入手,用凸包简化替代复杂网格碰撞体,并结合碰撞矩阵精细配置减少无效计算。同时,通过刚体睡眠机制、求解器迭代次数调优及层次化细节物理策略,在保证装配精度的前提下大幅提升运行效率,最

weixin_30820077的博客 391

Unity3D游戏开发实战:从零构建第三人称冒险游戏原型

游戏引擎是现代游戏开发的核心工具,它通过提供图形渲染、物理模拟、音频管理等底层系统,让开发者能专注于游戏逻辑与创意实现。Unity3D作为主流的跨平台引擎,以其可视化编辑器与组件化架构,大幅降低了3D游戏开发的门槛。在工程实践中,掌握角色控制器、场景构建、物理交互与数据持久化等关键技术,能高效实现从玩法原型到可发布产品的完整流程。本文以第三人称冒险游戏为例,深入解析了使用URP渲染管线进行项目设置、利用Rigidbody实现物理移动、通过JSON进行本地存档等核心模块的实现细节,并针对性能优化与常见问题提供

weixin_30443747的博客 448

Unity3D入门实战:从零开发《帽子接球》小游戏完整指南

在游戏开发领域,Unity3D作为一款主流的跨平台游戏引擎,其核心机制包括游戏对象(GameObject)、组件(Component)和物理系统(Physics)的协同工作。理解这些基础概念是掌握Unity开发的关键:游戏对象是场景中的实体,组件为其添加功能,而物理系统则负责模拟真实世界的运动与碰撞。这些原理共同构成了交互式应用的技术基础,其价值在于能够高效实现从简单原型到复杂产品的快速迭代。在实践层面,这种架构特别适合用于开发入门级的3D小游戏,例如《帽子接球》这类项目。通过聚焦于玩家控制、碰撞检测和对象

weixin_33971977的博客 425

HyperLedger Fabric实战(一):基础环境构建

简介 本文将介绍从一台裸机上面如何构建出一个可用的Fabric网络(单机版,非测试网络)。 基础环境构建 Fabric组件安装

yindarui 1万+

Decoder如何工作、Transformer如何训练、以及exposure bias问题

1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法

m0_59113542的博客 3345

Unity3D新手入门:核心开发技巧与实战项目全解析

游戏开发引擎作为现代交互式内容创作的核心工具,通过封装底层图形渲染、物理模拟与资源管理等复杂系统,为开发者提供了高效的创作平台。其核心原理在于组件化架构与可视化编辑,将技术实现抽象为可拖拽配置的模块,极大降低了3D内容制作的门槛。这一技术价值体现在快速原型开发能力上,使开发者能专注于玩法与创意验证,而非底层技术细节。在应用场景上,引擎广泛应用于独立游戏、移动应用、虚拟现实及交互式仿真等领域。本文以Unity3D为例,深入解析其编辑器高效操作、C#脚本生命周期、预制体资源管理等核心开发技巧,并通过“滚球游戏”

weixin_33957648的博客 497

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码

本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。

m0_72768523的博客 5356

Unity3D入门实战:从零制作滚球收集小游戏

游戏开发的核心在于理解场景、物体、组件与交互逻辑的构建。Unity引擎通过GameObject与Component系统,将复杂的游戏功能模块化,让开发者能够专注于核心玩法的实现。物理引擎与碰撞检测是游戏交互的基础,它决定了物体运动的真实感与反馈机制。在工程实践中,合理运用UI系统与状态管理,能够有效提升游戏的用户体验与可维护性。本文以经典的滚球收集游戏为例,结合DOTween动画插件与外部模型导入(如SolidWorks模型导入Unity3D)等实用技巧,手把手演示如何从场景搭建、脚本编写到功能优化,完成一

weixin_30932215的博客 344

LinuxCNC---在PC端显示开发板LinuxCNC界面

  今天在调试开发板时,执行开发板上的linuxcnc指令,总是出现如下报错 LINUXCNC - 2.9.0~pre0 application-specific initialization failed: couldn't connect to display "192.168.137.3:1" Error in startup script: invalid command name "image" while executing "image create photo -file $f/$i

中华田园巨龙 3469

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

Unity3D篮球游戏开发实战:从物理投篮到完整项目架构

在游戏开发领域,物理引擎是实现真实交互体验的核心技术,它通过模拟刚体动力学、碰撞检测与力反馈,为游戏世界注入生命力。Unity3D作为主流的跨平台游戏引擎,其内置的物理系统为开发者提供了强大的工具集,能够高效构建从2D到3D的各类游戏原型。掌握物理引擎的原理与应用,不仅能实现诸如抛物线投篮、物体碰撞等基础功能,更是提升游戏手感和沉浸感的关键,广泛应用于休闲游戏、模拟训练及互动娱乐等场景。本文以一款完整的篮球游戏项目为例,深入剖析如何利用Unity的刚体组件和碰撞检测机制,结合C#脚本实现核心的投篮力学与进球

weixin_33805992的博客 463

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 2万+

Unity3D入门实战:从零构建3D滚球收集游戏,掌握游戏开发核心流程

游戏开发的核心在于理解并实践从场景搭建到逻辑实现的完整闭环。其基本原理是通过游戏对象(GameObject)与组件(Component)系统构建虚拟世界,利用物理引擎和碰撞检测实现交互,再通过脚本(如C#)驱动游戏逻辑。掌握这一流程对于构建各类互动应用具有普遍的技术价值,无论是移动游戏、模拟训练还是交互式展示。本文以经典的“3D滚球收集”项目为例,聚焦于**C#脚本**与**物理系统**这两个核心模块,手把手演示如何通过控制刚体运动、处理触发器事件来创建一个可玩、可发布的完整小游戏,帮助初学者避开复杂概念,

fanjava 355

LIN协议栈 AUTOSAR架构下 状态管理

LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

汽车电子从业者,电子爱好者。 2051

学术规范与论文写作(雨课堂)研究生 全部答案

1:如何造就优秀的学术论文 论文语法判断题 :全部是错的 2:如何撰写学术论文 3: SCI论文写作经验分享 4:论文写作与投稿技巧 5:学术伦理道德 答案仅供参考,研究生生活不易,大家如果有时间的话,还是可以学习学习的,毕竟老师讲的不错。加油,希望读研的每一个人都能顺利毕业! ...

Always-Learning 13万+

Unity3D入门实战:从零构建可交互3D游戏场景

游戏开发与三维可视化是现代数字内容创作的核心领域,其底层依赖于实时渲染引擎与物理模拟系统。Unity3D作为行业领先的跨平台引擎,通过组件化架构与C#脚本驱动,实现了高效的内容创作与逻辑控制。其技术价值在于降低了3D交互应用开发门槛,广泛应用于游戏、XR、数字孪生与实时可视化等场景。本文聚焦Unity3D入门实战,以**目标驱动学习法**为核心,通过构建一个包含玩家控制、物理交互与UI系统的完整迷你项目,系统讲解编辑器操作、C#脚本编写、碰撞检测与预制体等**核心机制**。内容涵盖从安装配置、场景搭建到性能

334

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)
下一篇: unity——Rigidbody类 (刚体)
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值