Unity3D学习日志第13天:深入探索关节系统与布料模拟技术
作者:肖顾问 | 来源:互联网 | 2024-10-29 21:19
在Unity3D的第13天学习中,我们深入探讨了关节系统和布料模拟技术。关节系统作为Unity中的关键物理组件,能够实现游戏对象间的动态连接,如刚体间的关系、门的开合动作以及角色的布娃娃效果。铰链关节涉及两个刚体的交互,能够精确模拟复杂的机械运动,为游戏增添了真实感。此外,布料模拟技术则进一步提升了角色衣物和环境装饰物的自然表现,增强了视觉效果的真实性和沉浸感。
关节(Joint)是Unity中的一种物理组件,用来模拟游戏对象之间相互连接的效果。
通过关节,我们在游戏中可以用于模拟刚体之间的连接、门的开关、角色布娃娃系统等效果。
铰链关节
由两个刚体组成,刚体之间的运动约束类似于铰链连接,可用于模拟门的开关,钟摆的摆动等物理效果
固定关节
将两个刚体粘连在一起,当一个刚体运动时会带动另外一个刚体运动,效果类似于父子关系
弹簧关节
将两个刚体用弹簧连接,拉伸或挤压它们会产生拉力或弹力
角色关节
可用于模拟角色的骨骼关节,可用于布娃娃系统
可配置关节
可通过配置参数来模拟以上四种关节,功能强大而灵活,使用也相对复杂
HingeJoint 铰链关节
铰链关节 (Hinge Joint) 将两个刚体 (Rigidbody) 组合在一起,从而将其约束为如同通过铰链连接一样进行移动。它十分适合门,也可用
于对链条、钟摆等进行建模。
HingeJoint 铰链关节属性
连接体 (Connected Body):对关节 (Joint) 所依赖的刚体 (Rigidbody) 的可选引用。如果未设置,则关节 (Joint) 连接到世界坐标。
锚点 (Anchor):主体围绕其摇摆的轴的位置。该位置在局部坐标空间中定义。
轴 (Axis):主体围绕其摇摆的轴的方向。该方向在局部坐标空间中定义。
使用弹簧 (Use Spring):弹簧 (Spring) 使刚体 (Rigidbody) 相对于其连接体达到特定角度。
弹簧 (Spring):启用使用弹簧 (Use Spring) 时使用的弹簧 (Spring) 的属性。
弹簧 (Spring):对象为移动到位所施加的力。
阻尼 (Damper):此值越高,对象减慢的幅度越大。
目标位置 (Target Position):弹簧 (Spring) 的目标角度。弹簧 (Spring) 会拉向此角度(以度数为单位测量)。
使用电机 (Use Motor):电机使对象旋转。
电机 (Motor):启用使用电机 (Use Motor) 时使用的电机 (Motor) 的属性。
目标速率 (Target Velocity):对象尝试达到的速度。
力 (Force):为达到该速度而应用的力。
自由旋转 (Free Spin):如果启用,则电机从不用于对旋转制动,仅进行加速。
使用限制 (Use Limits):如果启用,则铰链角度会限制在最小 (Min) 和最大 (Max) 值内。
限制 (Limits):启用使用限制 (Use Limits)s 时使用的限制 (Limits) 的属性。
最小 (Min):旋转可以达到的最小角度。
最大 (Max):旋转可以达到的最大角度。
最小反弹 (Min Bounce):对象在命中最小停止时反弹的量。
最大反弹 (Max Bounce):对象在命中最大停止时反弹的量。
折断力 (Break Force):为使此关节 (Joint) 折断而需要应用的力。
折断扭矩 (Break Torque):为使此关节 (Joint) 折断而需要应用的扭矩。
弹簧关节( Spring Joint )
弹簧关节( Spring Joint )用于模拟两个刚体之间用弹簧连接的效果。当2个刚体之间的距离发生变化时,弹簧关节会产生弹力或者拉力来
恢复刚体的初始距离。
连接体 (Connected Body):对关节 (Joint) 所依赖的刚体 (Rigidbody) 的可选引用。
锚点 (Anchor):对象局部坐标空间中定义关节 (Joint) 中心的位置(静止时)。这不是将对象拉向的位置。
X、Y、Z:关节 (Joint) 局部坐标中心沿 X / Y / Z 轴的位置。
弹簧 (Spring):弹簧的强度。
阻尼 (Damper):弹簧在处于活动状态时缩减的量
最小距离 (Min Distance):大于此值的距离不会使弹簧激活。
最大距离 (Max Distance):小于此值的距离不会使弹簧激活。
折断力 (Break Force):使此关节 (Joint) 折断所需的力。
折断扭矩 (Break Torque):使此关节 (Joint) 折断所需的扭矩。
角色关节CharacterJoint
连接体 (Connected Body):对关节 (Joint) 所依赖的刚体 (Rigidbody) 的可选引用。如果未设置,则关节 (Joint) 连接到世界坐标。
锚点 (Anchor):游戏对象 (GameObject) 局部坐标空间中关节 (Joint) 围绕旋转的点。
轴 (Axis):扭曲轴。通过橙色小图示锥形进行展示。
摇摆轴 (Swing Axis):摇摆轴。通过绿色小图示锥形进行展示。
扭曲下限 (Low Twist Limit):关节 (Joint) 的下限。
扭曲上限 (High Twist Limit):关节 (Joint) 的上限。
摇摆 1 限制 (Swing 1 Limit):有关定义的摇摆轴 (Swing Axis) 的下限
摇摆 2 限制 (Swing 2 Limit):有关定义的摇摆轴 (Swing Axis) 的上限
折断力 (Break Force):Th为使此关节 (Joint) 折断而需要应用的力。
折断扭矩 (Break Torque):为使此关节 (Joint) 折断而需要应用的扭矩。
折断关节 (Joint)
可以使用折断力 (Break Force) 和折断扭矩 (Break Torque) 属性为关节 (Joint) 强度设置限制。如果这些限制小于无穷大,并且将大于
这些限制的力/扭矩应用于对象,则其固定关节 (Fixed Joint) 会毁坏,不再受其限制约束。
无需将连接体 (Connected Body) 分配给关节 (Joint) 即可使其工作。
角色关节 (Character Joint) 需要向对象附加刚体 (Rigidbody)
可配置关节Configurable Joint
可配置关节
(Configurable Joint)是一种可以完全自定义各种参数的关节类型,它将PhysX物理引擎中所有关节相关属性都开放出来,因此开发者可以
创造出与其他关节类型行为相似的关节。
可配置关节主要有2类功能:移动/旋转限制 以及移动/旋转加速
布料
布料(Cloth)是Unity中的一类物理组件,用来类似于布料的物理仿真效果。主要有交互布 (Interactive Cloth)和蒙皮布 (Skinned
Cloth)两种。
交互布 (Interactive Cloth)
交互布 (Interactive Cloth)是在网格上模拟“类似于布”的行为的组件。如果要在场景中使用布,可以使用此组件。
创建交互布:在场景中添加交互布 (Interactive Cloth),
只需依次选择游戏对象 (Game Object) -> 创建其他 (3D Object) -> 布 (Cloth)。
弯曲刚度 (Bending Stiffness):布的弯曲刚度。
伸展刚度 (Stretching Stiffness):布的伸展刚度。
阻尼 (Damping):对布运动进行阻尼处理。
厚度 (Thickness):布表面的厚度。
使用重力 (Use Gravity):重力是否应影响布模拟。
自碰撞 (Self Collision):布是否会与自己碰撞。
外部加速度 (External Acceleration):应用于布的恒定外部加速度
随机加速度 (Random Acceleration):应用于布的随机外部加速度
网格 (Mesh):由交互布 (Interactive Cloth) 用于模拟的网格
摩擦力 (Friction):布的摩擦力。
密度 (Density):布的密度。
压力 (Pressure):布内部的压力。
碰撞响应 (Collision Response):将应用于碰撞刚体 (Rigidbody) 的力的大小。
附件撕裂系数 (Attachment Tear Factor):附加刚体 (Rigidbody) 在撕下之前需要伸展的距离。
附件响应 (Attachment Response):将应用于附加刚体 (Rigidbody) 的力的大小。
撕裂系数 (Tear Factor):布顶点在布撕裂之前需要伸展的距离。
附加碰撞体 (Attached Colliders):包含附加到此布的碰撞体 (Collider) 的数组
布渲染器 (Cloth Renderer)
投射阴影 (Cast Shadows):如果选中,则布会投射阴影
接收阴影 (Receive Shadows:如果启用,则布可以接收阴影
材质 (Materials):布将使用的材质。
使用光探头 (Use Light Probes):如果选中,则将启用光探头。
光探头锚点 (Light Probe Anchor):光探头光照在渲染器边界中心或锚点(如果分配)位置处进行内插。
不可见时暂停 (Pause When Not Visible):如果选中,则在相机未渲染布时不计算模拟。
蒙皮布(SkinnedCloth)
蒙皮布 (SkinnedCloth) 组件与蒙皮网格渲染器 (SkinnedMeshRenderer) 结合作用以对角色模拟衣物。
如果具有使用蒙皮网格渲染器 (SkinnedMeshRenderer) 的动画角色,则可以将蒙皮布 (SkinnedCloth) 组件 添加到具有蒙皮网格渲染器
(SkinnedMeshRenderer) 的游戏对象,使其表现得更加栩栩如生。
当导入的网格是蒙皮时,蒙皮网格渲染器将会自动添加到导入的网格。
投射阴影 (Cast Shadows)(仅限专业版):如果勾选该选项,当阴影创建光照射在网格上时,该 网格 (Mesh) 将会创建阴影。
接收阴影 (Receive Shadows)(仅限专业版):如果启用该功能,该网格 (Mesh) 将显示投射到其上的所有阴影
材质 (Materials):渲染模型的材质 (Materials) 列表。
质量 (Quality):影响每个顶点的最大骨骼数量。
离屏更新 (Update When Offscreen):如果启用该功能,蒙皮网格 (Skinned Mesh) 将在离屏后更新。如果禁用该功能,这也将禁止动画更新
。
范围 (Bounds):这些范围确定蒙皮网格何时处于离屏状态。边界框也显示在场景视图 (SceneView) 中。范围是根据模型文件中的网格
(Mesh) 和动画在导入时预先计算出的。
网格 (Mesh):该渲染器使用的网格。
推荐阅读
-
本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ...
[详细]
蜡笔小新 2024-12-22 12:03:31
-
本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ...
[详细]
蜡笔小新 2024-12-21 14:45:11
-
-
本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ...
[详细]
蜡笔小新 2024-12-22 15:15:48
-
本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ...
[详细]
蜡笔小新 2024-12-22 14:46:52
-
本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ...
[详细]
蜡笔小新 2024-12-22 14:22:36
-
本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ...
[详细]
蜡笔小新 2024-12-22 10:59:43
-
本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ...
[详细]
蜡笔小新 2024-12-22 00:08:06
-
本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ...
[详细]
蜡笔小新 2024-12-21 18:50:52
-
在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ...
[详细]
蜡笔小新 2024-12-21 18:13:59
-
本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ...
[详细]
蜡笔小新 2024-12-21 14:48:49
-
ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ...
[详细]
蜡笔小新 2024-12-21 12:56:58
-
JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ...
[详细]
蜡笔小新 2024-12-21 12:06:37
-
在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ...
[详细]
蜡笔小新 2024-12-21 11:21:05
-
本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ...
[详细]
蜡笔小新 2024-12-21 10:38:09
-
本文介绍了一种根据目标检测结果,从原始XML文件中提取并分析特定类别的方法。通过解析XML文件,筛选出特定类别的图像和标注信息,并保存到新的文件夹中,以便进一步分析和处理。 ...
[详细]
蜡笔小新 2024-12-19 17:32:58
-