UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Lighting
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
编程
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes

形状

身体模拟各种类型的身体行为时,形状表示身体所占据的空间量。物理模拟的对象通常具有一个主体和一个或多个形状,这些形状允许对象彼此碰撞(因此,形状通常称为碰撞形状)。具有形状的物体也会在重力作用下掉落,从静态表面反弹或沿其滑动。没有分配单一形状的物体的行为类似于虚拟物体,可以使用关节连接到其他物体,但是不会碰撞并且不受重力的影响。

基本形状类型如下:

简单的原语使碰撞计算更容易,同时保持高性能和准确性。凸包可提供更高的精度,但是,这种类型的形状无法进行连续碰撞检测。因此,不应该将凸包用于快速移动的对象。

注意
形状不必复制它近似的网格。建议使用简单的原语。即使它们不精确,在大多数情况下它们也可以提供可接受的结果。
形状的数量应尽可能保持。否则,繁琐的物理计算会降低性能。

没有身体就无法创建形状,并且在世界坐标中没有自己的位置。始终将其分配给主体并相对于它定位。

也可以看看#

编程实现:

形状参数#

所有形状,无论其类型如何,均具有以下通用参数

Shape parameters

Enabled 一个标志,指示是否启用了形状。
Continuous 一个标志,指示是否对形状启用了连续碰撞检测。
注意
连续碰撞检测仅适用于球形和胶囊形。
Mass 形状的质量。改变质量会影响密度,密度是通过将质量除以形状体积而得出的。如果有几种形状分配给主体(例如一组凸包)
Density 形状的密度。更改密度会影响质量,质量是通过将形状体积乘以密度来计算的。
Friction 形状的摩擦系数。定义形状表面的粗糙度。值越高,形状滑动的趋势越少。
注意
如果对象包含 surface 和形状(均具有指定的摩擦参数),则仅使用形状的参数。
Restitution 恢复形状的系数。定义碰撞时形状的弹性。
  • 最小值 0 表示无弹性碰撞(一块软粘土撞击地板)
  • 1 的最大值表示高度弹性的碰撞(橡胶球从墙上弹起)
注意
如果对象包含 surface 和形状(都具有指定的恢复参数),则仅使用形状的参数。
Position 形状在 body 坐标中的位置。
Rotation body 的坐标中旋转形状。
Physics Intersection mask Physics Intersection形状的位掩码。
Collision mask 形状的碰撞位掩码。此蒙版用于指定形状与其他形状的碰撞。
Exclusion mask 形状的排除位掩码。此蒙版用于防止形状与其他形状发生碰撞。

我們的物理視頻教程包含形狀參數的概述,並闡明瞭如何使用ExclusionCollision蒙版

添加形状#

要通过 UnigineEditor 添加形状,请执行以下步骤:

您可以通过选中Helpers面板→Physics项目→Shapes选项(应启用Visualizer)来启用形状的可视化。

领域#

球体是最简单,最快的形状,因为它只有一个参数:半径。连续碰撞检测可用于球形。因此,即使在高速移动时也避免穿过其他物体。

将球形用于任何任意网格可确保始终检测到其碰撞。

Sphere shapes

要使形状适合您的对象,可以调整球体的 Radius

胶囊#

胶囊也是一种非常快速的碰撞形状,具有连续碰撞检测功能。胶囊便于拉长物体(支柱等)和类人动物角色,因为它使它们可以平稳地上下楼梯,而不会在每个步骤中绊脚(如果步骤不太高)。它还可以确保角色的肢体不会意外卡在某处。

Capsule shapes

要使形状适合您的对象,您可以调整胶囊的半径高度

圆筒#

圆柱可用于近似具有平坦端部的细长形状(例如,杆,塔等)。类似于盒子形状。

要使形状适合您的对象,可以调整圆柱的半径高度

#

盒子是一个长方体形状,可用于近似各种对象的体积。它适用于墙壁,门,楼梯,机械零件,车身以及许多其他物体。每个尺寸的盒子形状的长度都可以任意选择。

为使形状适合您的对象,您可以沿每个轴调整框的大小:Size X, Size Y, Size Y

凸包#

Convex hull是所有形状中最慢的,用于具有复杂几何形状的对象。创建的形状将始终是凸形的,即,在生成凸包时,将忽略网格的孔和腔。而是将它们包含在形状体积中。凸形是可以包围近似网格顶点的最小形状。

要生成凸包,请指定一个近似误差值:

Convex shape

使用Approximation error参数可以减少所创建形状的顶点数量。顶点数量少的简单且粗糙的凸包处理速度更快,因此,建议将顶点数量保持尽可能低。

  • 通过值 0 ,形状精确地复制了网格;它的全部体积都封闭起来。
  • 越高,所创建的形状中的顶点越少,但是跳过的细节越多。
Zero Approximation Error
近似错误= 0
  Higher value of Approximation Error
近似误差= 0.1

自动生成#

要近似复杂的凹形对象并从其体积中排除腔,请使用组自动生成的凸形壳

由单个凸包(左)和一组自动生成的凸包(右)近似的复杂凹面对象

要添加一组自动生成的形状,请指定以下参数:

Convex shapes

Recursion depth确定网格分解的程度。如果提供 0 或负值,则只会创建一个形状。值更高,将生成更多凸形

Approximation error可以减少所生成形状的顶点数量。顶点数量少的简单且粗糙的凸包处理速度更快,因此,建议将顶点数量保持尽可能低。

  • 通过值 0 ,形状精确地复制了网格;它的全部体积都封闭起来。
  • 更高,创建的形状中存在个顶点,但是跳过了更多详细信息。

Merging threshold确定分解后合并凸形的体积阈值,可用于减少生成的形状的数量:较高的值,较小的凸形是

最新更新: 2020-09-30