草庐IT

Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系(附动画演示)

iiiiiiimp 2023-05-18 原文

Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系

写在前面

看了网上一些关于碰撞和刚体的讲解,自己再做了一下实验,这里总结一下。

产生碰撞的条件

条件:两个物体都有碰撞体+至少有个物体有刚体。
注意
(1)Unity中碰撞体独立于物体大小,与物体的MeshFilter大小无关。
(2)只有碰撞体才能被射线检测到,否则无法被检测。
(3)只有刚体才会有受力效果。
(3)isKinematic就有点像把刚体关了,但没完全关,因为保留了物理特性如质量,速度等等。

产生触发的条件

条件:产生碰撞的条件(两个物体都有碰撞体+至少有个物体有刚体)+两个物体至少有个有触发器
注意
(1)碰撞检测和触发检测不能同时触发,如果是触发检测方法调用就不可能会有碰撞检测方法调用。

实验一:蓝块(碰撞体)、红块(碰撞体)

结果:无法产生碰撞
结论:两个物体都有碰撞体,无法产生碰撞。两个物体都不调用碰撞检测方法,如OnCollisionEnter、OnCollisionExit

实验二:蓝块(碰撞体)、红块(碰撞体+刚体)

结果:红块受力反弹、蓝块不动、两个物体都会调用碰撞检测方法
结论
(1)两个物体都有碰撞体+至少有个物体有刚体才能产生碰撞
(2)只有加了刚体的一方会受到力的影响

实验三:蓝块(碰撞体+刚体)、红块(碰撞体+刚体)

结果:蓝块和蓝块都受力影响、两个物体都会调用碰撞检测方法
结论:只有加了刚体才会受到力的影响

实验四:蓝块(碰撞体+刚体+isKinematic)、红块(碰撞体+刚体)

结果:红块受力反弹、蓝块不动、两个物体都会调用碰撞检测方法
结论
(1)isKinematic不会对碰撞和力做出反应,不受物理系统影响,但依然会对其他刚体产生物理影响(比如可以撞击其他刚体)。
(2)isKinematic只能在脚本中修改物体的Transform属性来移动。
(3)用在经常需要移动等变化物理状态的碰撞体上。一个刚体碰撞体,可以随时开启或关闭Is Kinematic选项,不会像静态碰撞体的enabled开启或关闭那样引起物理系统的问题。


实验五:蓝块(碰撞体+刚体+isKinematic)、红块(碰撞体)

结果:蓝块和红块不产生碰撞,两个物体都不调用碰撞检测方法
结论:isKinematic就有点像把刚体关了,但没完全关,因为保留了物理特性如质量,速度等等

实验六:蓝块(碰撞体+isTrigger)、红块(碰撞体)

结果:两个物体不产生碰撞,两个物体都不调用触发检测方法,如OnTriggerEnter、OnTriggerExit、不调用碰撞检测方法。
结论:两个只有触发器没办法实现触发检测

实验七:蓝块(碰撞体+isTrigger)、红块(碰撞体+刚体)

结果:两个物体不产生碰撞,两个物体都调用触发检测方法、不调用碰撞检测方法
结论:触发条件为:两个物体都有碰撞体(也是产生碰撞的条件)+至少有个物体有刚体(也是产生碰撞的条件)+两个物体至少有个有触发器

实验八:蓝块(碰撞体+isTrigger+刚体+取消重力)、红块(碰撞体+刚体)

结果:与实验七一样、两个物体不产生碰撞,两个物体都调用触发检测方法、不调用碰撞检测方法。

实验九:蓝块(碰撞体+isTrigger+刚体+取消重力)、红块(碰撞体+isTrigger+刚体+取消重力)

结果:与实验七一样、两个物体不产生碰撞,两个物体都调用触发检测方法、不调用碰撞检测方法。

写在后面

“纸上得来终觉浅,绝知此事要躬行”——出自《冬夜读书示子聿》,作者陆游。

有关Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系(附动画演示)的更多相关文章

  1. ruby - Rails 关联 - 同一个类的多个 has_one 关系 - 2

    我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  4. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  5. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  6. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  7. ruby - Rails 组合多个 activerecord 关系 - 2

    我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代

  8. ruby-on-rails - Ruby on Rails - has_one 关系,如何检查它是否具有现有关联? - 2

    我有一个简单的问题,与关联有关。我有一个书的模型,它有_onereservation。预订属于_书本。我想在预订Controller的创建方法中确保在预订时没有预订一本书。换句话说,我需要检查该书是否存在任何其他预订。我该怎么做?编辑:Aaa我做到了,感谢大家的提示,学到了一些新东西。当我尝试提供的解决方案时,出现no_method错误或nil_class等。这让我开始思考,我尝试处理的对象根本不存在。Krule给了我使用book.find的想法,所以我尝试使用它。最终我得到了它的工作:book=Book.find_by_id(reservation_params[:book_id])

  9. ruby - 是否有 SproutCore 或 Cappuccino 的现场演示/示例应用程序 - 2

    在他们的网站上找不到任何内容。我主要只是想看看哪个值得一试(当然是RIA)。谢谢 最佳答案 SproutCoredemos 关于ruby-是否有SproutCore或Cappuccino的现场演示/示例应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1419788/

  10. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

随机推荐