jjzjj

Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)

爱编程的鱼 2023-04-12 原文

在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互。

因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件。碰撞体是物理组件的一类,它与刚体一起促使碰撞发生。

碰撞体是简单形状,如方块、球形或者胶囊形,在 Unity 3D 中每当一个 GameObjects 被创建时,它会自动分配一个合适的碰撞器。

一个立方体会得到一个 Box Collider(立方体碰撞体),一个球体会得到一个 Sphere Collider(球体碰撞体),一个胶囊体会得到一个 Capsule Collider(胶囊体碰撞体)等。

添加碰撞体

在 Unity 3D 的物理组件使用过程中,碰撞体需要与刚体一起添加到游戏对象上才能触发碰撞。

值得注意的是,刚体一定要绑定在被碰撞的对象上才能产生碰撞效果,而碰撞体则不一定要绑定刚体。

碰撞体的添加方法是:首先选中游戏对象,执行菜单栏中的 Component → Physics 命令,此时可以为游戏对象添加不同类型的碰撞体。

碰撞体选项设置

Unity 3D 为游戏开发者提供了多种类型的碰撞体资源,如下图所示。当游戏对象中的 Rigidbody 碰撞体组件被添加后,其属性面板中会显示相应的属性设置选项,每种碰撞体的资源类型稍有不同。

  • Box Collider

Box Collider 是最基本的碰撞体,Box Collider 是一个立方体外形的基本碰撞体。

一般游戏对象往往具有 Box Collider 属性,如墙壁、门、墙以及平台等,也可以用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或是箱子上。

下图所示是 Box Collider,游戏对象一旦添加了 Box Collider 属性,则在 Inspector 面板中就会出现对应的 Box Collider 属性参数设置。

参 数含义描述
Is Trigger触发器勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。
Material材质为碰撞体设置不同类型的材质。
Center中心碰撞体在对象局部坐标中的位置。
Size大小碰撞体在X、Y、Z方向上的大小。

如果 Is Trigger 选项被勾选,该对象一旦发生碰撞动作,则会产生 3 个碰撞信息并发送给脚本参数,分别是 OnTriggerEnterOnTriggerExitOnTriggerStay

Physics Material 定义了物理材质,包括冰、金属、塑料、木头等。

  • Sphere Collider

Sphere Collider 是球体形状的碰撞体。

Sphere Collider 是一个基于球体的基本碰撞体,Sphere Collider 的三维大小可以按同一比例调节,但不能单独调节某个坐标轴方向的大小,具体参数如下表所示。

参 数含义描述
Is Trigger触发器勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。
Material材质为碰撞体设置不同类型的材质。
Center中心碰撞体在对象局部坐标中的位置。
Radius半径设置球形碰撞体的大小。

当游戏对象的物理形状是球体时,则使用球体碰撞体,如落石、乒乓球等游戏对象。

  • Capsule Collider

Capsule Collider 由一个圆柱体盒两个半球组合而成,Capsule Collider 的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用。

通常添加至 Character 或 NPC 等对象的碰撞属性,如下图所示。

参 数含义描述
Is Trigger触发器勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。
Material材质为碰撞体设置不同类型的材质。
Center中心碰撞体在对象局部坐标中的位置。
Radius半径设置球形碰撞体的大小。
Height局度控制碰撞体中圆柱的高度。
Direction方向设置在对象的局部坐标中胶囊体的纵向所对应的坐标轴,默认是Y轴。

  • Mesh Collider

Mesh Collider(网格碰撞体)根据 Mesh 形状产生碰撞体,比起 Box ColliderSphere Collider 和 Capsule ColliderMesh Collider 更加精确,但会占用更多的系统资源。

专门用于复杂网格所生成的模型。

参 数含义描述
Convex凸起勾选该项,则Mesh Collider将会与其他的Mesh Collider发生碰撞。
Material材质为碰撞体设置不同类型的材质。
Mesh网格获取游戏对象的网格并将其作为碰撞体。

  • Wheel Collider

Wheel Collider(车轮碰撞体)是一种针对地面车辆的特殊碰撞体,自带碰撞侦测、轮胎物理现象和轮胎模型,专门用于处理轮胎。

参 数含义描述
Mass质量用于设置 Wheel Collider 的质量。
Radius半径用于设置碰撞体的半径大小。
Wheel Damping Rate车轮减震率用于设置碰撞体的减震率。
Suspension Distance悬挂距离该项用于设置碰撞体悬挂的最大伸长距离,按照局部坐标来计算, 悬挂总是通过其局部坐标的 Y 轴延伸向下。
Center中心用于设置碰撞体在对象局部坐标的中心。
Suspension Spring悬挂弹簧用于设置碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置。
Forward Friction向前摩擦力当轮胎向前滚动时的摩擦力属性。
Sideways Friction当轮胎侧向滚动时的摩擦力属性。
Wheel Damping Rate车轮减震率用于设置碰撞体的减震率。
Wheel Damping Rate车轮减震率用于设置碰撞体的减震率。

 Unity 3D 触发器(Trigger)

在 Unity 3D 中,检测碰撞发生的方式有两种:

  • 利用碰撞体(Collider)。

  • 利用触发器(Trigger)。

在很多游戏引擎或工具中都有触发器,它被用来触发事件。

例如,在游戏中的剧情里,玩家通过某个任务道具召唤了任务相关的 NPC 或者可击杀的怪物,就可以用触发器来实现。

当绑定了碰撞体的游戏对象进入触发器区域时,会运行触发器对象上的 OnTriggerEnter 函数,同时需要在检视面板中的碰撞体组件中勾选 IsTrigger 复选框

触发信息检测使用以下 3 个函数:

  • MonoBehaviour.OnTriggerEnter(Collider collider),当进入触发器时触发。

  • MonoBehaviour.OnTriggerExit(Collider collider),当退出触发器时触发。

  • MonoBehaviour.OnTriggerStay(Collider collider),当逗留在触发器中时触发。

Unity 3D 中的碰撞体和触发器的区别在于:

  • 碰撞体是触发器的载体。

  • 触发器只是碰撞体的一个属性。

如果既想要检测到物体的接触,又不想让碰撞检测影响物体移动,或者要检测一个物体是否经过空间中的某个区域,这时就可以用到触发器。

例如,碰撞体适合模拟汽车被撞飞、皮球掉在地上又弹起的效果,而触发器适合模拟人站在靠近门的位置时门自动打开的效果。

 

有关Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  3. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

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

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

  6. 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

  7. unity---接入Admob - 2

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

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

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

  9. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  10. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

随机推荐