- 用户指南
- Components
- 寻路
- 动画组件
- 资源组件
- 音频组件(AudioComponent)
- 音频侦听器(AudioListener)
- 音频源(AudioSource)
- 音频过滤器(AudioFilter)(仅限专业版)
- 混响区域(ReverbZone)
- 麦克风(Microphone)
- 物理组件(PhysicsComponent)
- 箱体碰撞体(BoxCollider)
- 胶囊碰撞体(CapsuleCollider)
- 角色控制器(CharacterController)
- 角色关节(CharacterJoint)
- 可配置关节(ConfigurableJoint)
- 恒定力(ConstantForce)
- 固定关节(FixedJoint)
- 铰链关节(HingeJoint)
- 网格碰撞体(MeshCollider)
- 物理材质(PhysicsMaterial)
- 刚体(Rigidbody)
- (SphereCollider)
- 弹簧关节(SpringJoint)
- 交互布(InteractiveCloth)
- 蒙皮布(SkinnedCloth)
- 车轮碰撞体(WheelCollider)
- 游戏对象(GameObject)
- 图像效果(ImageEffectScripts)
- 高光溢出和镜头光晕(BloomandLensFlare)
- 模糊(Blur)
- 相机运动模糊(MotionBlur)
- 颜色修正曲线(ColorCorrectionCurve)
- 颜色修正(ColorCorrection)
- 颜色修正查找纹理(ColorCorrectionLookupTexture)
- 对比度增强(ContrastEnhance)
- 对比度拉伸(ContrastStretch)
- 起皱(Crease)
- 视野深度(DepthofField)3.4
- 视野深度(DepthofField)
- 边缘检测(EdgeDetection)
- 鱼眼(Fisheye)
- 全局雾(GlobalFog)
- 发光(Glow)
- 灰度(Grayscale)
- 运动模糊(MotionBlur)
- 噪波和颗粒(NoiseAndGrain)
- 噪波(Noise)
- 屏幕叠加(ScreenOverlay)
- 棕褐色调(SepiaTone)
- 边缘检测效应
- 阳光照射(SunShaft)
- 屏幕空间环境光遮蔽(SSAO)(ScreenSpaceAmbientOcclusion(SSAO))
- 倾斜位移(TiltShift)
- 色调映射(Tonemapping)
- 旋转(Twirl)
- 渐晕(Vignetting)(和色差(ChromaticAberration))
- 状态同步详细信息
- 旋涡
- 设置管理器(SettingsManager)
- 网格组件(MeshComponents)
- 网络组
- 效果
- 渲染组件
- 变换组件(TransformComponent)
- UnityGUI组
- 向导
- 地形引擎指南(TerrainEngineGuide)
- 树木创建器指南
- 动画视图指南
- GUI脚本指南
- 网络参考指南
- 移动设备上的网络连接
- 高级网络概念
- Unity中的网络元素
- RPC详细信息
- NetworkLevelLoading
- 主服务器
- 最小化网络带宽
- 社交API
- 内置着色器指南
- Unity的后台渲染
- 着色器参考
- ShaderLab语法:Shader
- ShaderLab语法:Properties
- ShaderLab语法:子着色器(SubShader)
- ShaderLab语法:Pass
- ShaderLabsyntax:Color,Material,Lighting
- ShaderLab语法:剔除和深度测试(Culling&DepthTesting)
- ShaderLab语法:纹理组合器(TextureCombiners)
- ShaderLab语法:雾(Fog)
- ShaderLab语法:Alpha测试(Alphatesting)
- ShaderLab语法:混合(Blending)
- ShaderLab语法:通道标记(PassTags)
- ShaderLab语法:名称(Name)
- ShaderLab语法:绑定通道(BindChannels)
- ShaderLab语法:使用通道(UsePass)
- ShaderLab语法:GrabPass
- ShaderLab语法:子着色器标记(SubShaderTags)
- ShaderLab语法:回退(Fallback)
- ShaderLab语法:自定义编辑器(CustomEditor)
- ShaderLab语法:其他命令
- ShaderLab语法:Pass
- 高级ShaderLab主题
- ShaderLab内置值
- 其他
- 网络视图
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Mecanim 动画系统
- 动画状态机
- 混合树 (Blend Tree)
- 在 Mecanim 中使用动画曲线 (Animation Curves)(仅限专业版 (Pro))
- 循环动画片段
- Animation State Machine Preview (solo and mute)
- 动画参数
- 旧动画系统
- 使用类人动画
- 动画层
- 资源导入与创建
- 音轨模块
- 减少文件大小
- 光照贴图 UV
- 资源准备和导入
- 如何安装或升级标准资源 (Standard Assets)?
- FBX 导出指南
- 从 Maya 中导入对象
- 从 Cinema 4D 中导入对象
- 从 3D Studio Max 中导入对象
- 从 Cheetah3D 中导入对象
- 从 Modo 中导入对象
- 从 Lightwave 中导入对象
- 从 Blender 中导入对象
- 为优化性能建模角色
- 如何使用法线贴图 (NormalMaps)?
- 如何修正已导入模型的旋转?
- 程序材质
- 如何使用水?
- 分析器(仅限专业版)
- 绘制调用批处理
- 遮挡剔除(仅限专业版)
- Unity 中的高动态范围 (High Dynamic Range) 渲染
- 在 Unity 4 中使用 DirectX 11
- 文本场景文件格式(仅限专业版)
- 使用网络播放器模版
- 平台依赖编译
- 日志文件
- 首选项
- 粒子系统曲线编辑器
- 渐变编辑器
- 怎样制作网格粒子发射器?(旧粒子系统)
- 深入了解光照贴图
- 光照贴图快速入门
- 着色器
- 动画脚本(旧版)
- 自定义
- 布局模式
- 扩展编辑器
- 网络实例化
- 材质和着色器
- 如何使用细节纹理?
- 着色器:顶点和片段程序
- Unity 中的阴影
胶囊碰撞体(CapsuleCollider)
胶囊碰撞体 (Capsule Collider) 由两个半球体与一个圆柱体相连接而构成。它与胶囊 (Capsule) 基元形状相同。
一堆胶囊碰撞体 (Capsule Collider)
属性
属性: | 功能: |
---|---|
为触发器 (Is Trigger) | 如果启用,此碰撞体 (Collider) 则用于触发事件,会由物理引擎忽略。 |
材质 (Material) | 引用可确定此碰撞体 (Collider) 与其他碰撞体 (Collider) 的交互方式的物理材质 (Physics Material)。 |
中心 (Center) | 碰撞体 (Collider) 在对象局部坐标空间中的位置。 |
半径 (Radius) | 碰撞体 (Collider) 局部坐标宽度的半径。 |
高度 (Height) | 碰撞体 (Collider) 的总高度。 |
方向 (Direction) | 对象局部坐标空间中胶囊纵向方向的轴。 |
详细信息
可以相互独立地调整胶囊碰撞器 (Capsule Collider) 的半径 (Radius) 和高度 (Height) 。它在角色控制器 (Character Controller) 中使用,适用于柱状物,也可以与其他碰撞器 (Collider) 结合用于异常形状。
标准胶囊碰撞器 (Capsule Collider)
碰撞体 (Collider) 与刚体 (Rigidbody) 结合使用可使 Unity 中的物理变得生动。刚体 (Rigidbody) 使对象可以受物理控制,而碰撞体 (Collider) 使对象可以相互碰撞。碰撞体 (Collider) 必须独立于刚体 (Rigidbody) 添加到对象。碰撞体 (Collider) 并不一定需要附加刚体 (Rigidbody),但是必须刚体 (Rigidbody) 才能使对象由于碰撞而移动。
当两个碰撞体 (Collider) 之间发生碰撞时并且如果其中至少一个附加了刚体 (Rigidbody),会将三条碰撞消息向外发送给附加到它们的对象。这些事件可以在脚本中进行处理,使您可以在使用或不使用内置 NVIDIA PhysX 引擎的情况下创建独特行为。
触发器 (Trigger)
使用碰撞体 (Collider) 的备选方法是将其作为触发器 (Trigger),只需在检视视图 (Inspector) 中选中“为触发器”(IsTrigger) 属性复选框即可。触发器 (Trigger) 实际上会被物理引擎忽略,并具有一组独有的三条触发器 (Trigger) 消息,这些消息会在与触发器 (Trigger) 发生碰撞时向外发送。触发器 (Trigger) 可用于触发游戏中的其他事件,如剧情画面、自动门打开、显示辅导消息等。请充分发挥您的想象力!
请注意,要使两个触发器 (Trigger) 在碰撞时向外发送触发器 (Trigger) 事件,其中之一必须还包括刚体 (Rigidbody)。要使触发器 (Trigger) 与普通碰撞体 (Collider) 碰撞,则其中之一必须附加刚体 (Rigidbody)。有关不同类型碰撞的详细图表,请参阅下面“高级”部分中的碰撞动作矩阵。
摩擦力和弹力
摩擦力、弹力和柔软度在物理材质 (Physisc Material) 中定义。标准资源 (Standard Asset) 包含最常见的物理材质 (Physisc Material)。要使用其中之一,请单击“物理材质”(Physisc Material) 下拉菜单并选择一个,例如“冰”(Ice)。还可以创建自己的物理材质 (Physisc Material) 并调整所有摩擦力值。
复合碰撞器 (Compound Collider)
复合碰撞体 (Compound Collider) 是基元碰撞体 (Collider)(共同充当单个碰撞体 (Collider))的组合。当您要在碰撞中使用复杂网格但是无法使用网格碰撞体 (Mesh Collider) 时,它们可派上用场。要创建复合碰撞体 (Compound Collider),请创建碰撞对象的子对象,然后向每个子对象添加基元碰撞体 (Collider)。这使您可以方便且相互独立地定位、旋转和缩放每个碰撞体 (Collider)。
实际的复合碰撞体 (Compound Collider) 设置
在上图中,枪模型 (Gun Model) 游戏对象 (GameObject) 附加了刚体 (Rigidbody),并且将多个基元碰撞体 (Collider) 作为子游戏对象 (GameObject)。当父刚体 (Rigidbody) 受力四处移动时,子碰撞体 (Collider) 会随其一起移动。基元碰撞体 (Collider) 会与环境的网格碰撞体 (Mesh Collider) 碰撞,而父刚体 (Rigidbody) 会基于向其应用的力以及其子碰撞体 (Collider) 与场景中其他碰撞体 (Collider) 交互的方式而改变其移动方式。
网格碰撞体 (Mesh Collider) 通常不能相互碰撞。如果某个网格碰撞体 (Mesh Collider) 标记为凸体 (Convex),则它可以与其他网格碰撞体 (Mesh Collider) 碰撞。典型解决方案是将基元碰撞体 (Collider) 用于任何移动对象,而将网格碰撞体 (Mesh Collider) 用于静态背景对象。
提示
- 要为对象添加多个碰撞体(Collider),请创建子游戏对象 (GameObject) 并向每个子游戏对象 (GameObject) 附加碰撞体(Collider)。这样便可以独立处理每个碰撞体(Collider)。
- 可以在场景视图 (Scene View) 中查看小图示以了解在对象上计算碰撞体(Collider) 的方式。
- 碰撞体(Collider) 会尽量匹配对象的缩放。如果您具有不均匀缩放(在各个方向上不同的缩放),则只有网格碰撞体(Mesh Collider) 才能完全匹配。
- 如果通过其变换组件 (Component) 移动某个对象,但是希望接收碰撞体(Collider)/触发器 (Trigger) 消息,则必须将刚体 (Rigidbody) 附加到移动的对象。
高级
碰撞体 (Collider) 组合
在 Unity 中可以进行许多不同的碰撞体 (Collider) 组合。每个游戏都是独一无二的,不同组合可能更适合于不同类型的游戏。如果在游戏中使用物理,则了解不同基本碰撞体 (Collider) 类型、其常见用途以及与其他类型对象的交互方式会十分有帮助。
静态碰撞体 (Static Collider)
这些是未附加刚体 (Rigidbody)、但的确附加了碰撞体 (Collider) 的游戏对象 (GameObject)。这些对象应保持静态,或很少移动。这些十分适用于环境几何结构。它们在刚体 (Rigidbody) 与之碰撞时不会移动。
刚体碰撞体 (Rigidbody Collider)
这些游戏对象 (GameObject) 同时包含刚体 (Rigidbody) 和碰撞体 (Collider)。它们通过脚本编写的力和碰撞,完全受物理引擎影响。它们可以与仅包含碰撞体 (Collider) 的游戏对象 (GameObject) 碰撞。这些很可能是使用物理的游戏中的主要碰撞体 (Collider) 类型。
运动学刚体碰撞体 (Kinematic Rigidbody Collider)
此游戏对象 (GameObject) 包含碰撞体 (Collider) 和标记有“为运动学”(IsKinematic) 的刚体 (Rigidbody)。要移动此游戏对象 (GameObject),请修改其 变换组件 (Component),而不是应用力。它们类似于静态碰撞体 (Static Collider),但是更适合于要经常四处移动碰撞体 (Collider) 的情况。有一些使用此游戏对象 (GameObject) 的其他专业方案。
此对象可以用于通常希望静态碰撞体 (Static Collider) 发送触发器 (Trigger) 事件的情况。因为触发器 (Trigger) 必须附加刚体 (Rigidbody),所以应添加刚体 (Rigidbody),然后启用“为运动学”(IsKinematic)。这可防止对象脱离物理影响,并使您可以在需要时接收触发器 (Trigger) 事件。
运动学刚体 (Kinematic Rigidbody) 可以方便地打开和关闭。这适合于在以下情况中创建布娃娃:通常希望角色跟随在动画之后,然后在发生碰撞时(通过爆炸或所选的任何其他事物进行提示)变为布娃娃。发生这种情况时,只需通过脚本将所有运动学刚体 (Kinematic Rigidbody) 转变为普通刚体 (Rigidbody)。
如果让刚体 (Rigidbody) 静止下来以便在一段时间内不移动,它们会“入睡”。即,它们在物理更新过程中不会进行计算,因为它们不会前往任何位置。如果将运动学刚体 (Kinematic Rigidbody) 从休眠的普通刚体 (Rigidbody) 下边移走,则休眠的刚体 (Rigidbody) 将被唤醒并在物理更新中重新准确计算。因此如果您具有许多要四处移动的静态碰撞体 (Static Collider) 并且让不同对象正确落到其上,请使用运动学刚体碰撞体 (Kinematic Rigidbody Collider)。
碰撞动作矩阵
根据两个碰撞对象的配置,可能发生一些不同动作。下图概述了可以基于附加到其的组件 (Component) 对两个碰撞对象进行的预计。一些组合仅导致两个对象之一受碰撞影响,因此请记住标准规则 - 物理不会应用于未附加刚体 (Rigidbody) 的对象。
进行碰撞检测并在碰撞时发送消息 | ||||||
静态碰撞体 (Static Collider) | 刚体碰撞体 (Rigidbody Collider) | 运动学刚体碰撞体 (Kinematic Rigidbody Collider) | 静态触发碰撞体 (Static Trigger Collider) | 刚体触发碰撞体 (Rigidbody Trigger Collider) | 运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider) | |
静态碰撞体 (Static Collider) | Y | |||||
刚体碰撞体 (Rigidbody Collider) | Y | Y | Y | |||
运动学刚体碰撞体 (Kinematic Rigidbody Collider) | Y | |||||
静态触发碰撞体 (Static Trigger Collider) | ||||||
刚体触发碰撞体 (Rigidbody Trigger Collider) | ||||||
运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider) |
碰撞时发送触发器 (Trigger) 消息 | ||||||
静态碰撞体 (Static Collider) | 刚体碰撞体 (Rigidbody Collider) | 运动学刚体碰撞体 (Kinematic Rigidbody Collider) | 静态触发碰撞体 (Static Trigger Collider) | 刚体触发碰撞体 (Rigidbody Trigger Collider) | 运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider) | |
静态碰撞体 (Static Collider) | Y | Y | ||||
刚体碰撞体 (Rigidbody Collider) | Y | Y | Y | |||
运动学刚体碰撞体 (Kinematic Rigidbody Collider) | Y | Y | Y | |||
静态触发碰撞体 (Static Trigger Collider) | Y | Y | Y | Y | ||
刚体触发碰撞体 (Rigidbody Trigger Collider) | Y | Y | Y | Y | Y | Y |
运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider) | Y | Y | Y | Y | Y | Y |
基于层的碰撞检测
在 Unity 3.x 中,我们引入了某个称为基于层的碰撞检测 (Layer-Based Collision Detection) 的功能,现在可以有选择性地告知 Unity 游戏对象 (GameObject) 与它们附加到的特定层碰撞。有关更多信息,请单击此处
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论