模型碰撞类型

碰撞几何体是不可见的,游戏中对象形状的简化版本。通过使用碰撞形状而不是网格的图形多边形,当对象相互碰撞时执行的计算变得非常简单。

1.简单碰撞

简单碰撞用于交互对象,如玩家撞在椅子上这类交互表现

球体碰撞

球体碰撞只能应用于规则多边形球体(半径不变,不是卵形或卵形)。

胶囊体碰撞

胶囊体碰撞必须只由一个圆柱体组成,即使从物理反应的角度来看,它的行为仍然像它的末端是圆的一样。圆柱体必须至少有7个侧面才能被识别为碰撞胶囊。

Box碰撞

盒子碰撞有六条边,它们只以90度角相交。如果在顶点级别编辑,这些角度很容易变得倾斜,因此请确保正确设置了长方体碰撞形状。

凸面碰撞

凸起的形状没有凹痕或凹陷。请注意,前面的三个类别也可以这样描述。

网格碰撞

网格形状用于具有凹痕、孔或突起的任何其他类型的形状。

制作简单碰撞时应注意简化碰撞形态。比如说游戏中一般玩家碰不到的树干顶部。树干碰撞一般做到3-4m高即可。如果有高层建筑玩家上不去,对于高层建筑部分直接套一个box即可

2.复杂碰撞

复杂碰撞用于射击子弹这类精细化交互的类型。

ue4碰撞命名 (碰撞命名很重要)

UBX_[RenderMeshName]_##

盒体 必须使用常规的矩形3D对象来创建。你无法移动顶点或使其改变形状,使其变为矩形棱柱之外的其它形状,否则其将无法正常使用。

有一次不小心将使用的UCX碰撞修改成了UBX碰撞,在ue4引擎中对模型进行缩放时发现ubx碰撞跟模型缩放数值成反比。

UCP_[RenderMeshName]_##

胶囊体 是两端半圆的圆柱体对象。胶囊体完全不需要过多分段(8段为佳),因为它将被转换为一个真正的胶囊体进行碰撞。和盒体一样,不能对单个顶点进行移动。

USP_[RenderMeshName]_##

球体 没有必要设置过多分段(8段为佳),因为它将被转换为一个真正的球体进行碰撞。和盒体一样,不能对单个顶点进行移动。

UCX_[RenderMeshName]_##

 对象可以是任何完全封闭的凸型3D形状。例如,一个盒体也是一个凸对象。下图说明了哪些是凸对象,哪些不是。

其中uxc碰撞是目前ue4中使用比较频繁的一种碰撞类型

制作时注意事项

  • RenderMeshName 名称必须与3D软件中碰撞网格体关联的渲染网格体的命名一致。如果3D软件中渲染网格体的命名为 Tree_01,那么碰撞网格体将与渲染网格体处于同一场景中,命名为 UCX_Tree_01,之后其将随渲染网格体导出到同一个FBX文件中。如果需要为一个网格体设置多个碰撞对象,可以使用额外的辨识符对其命名进行扩展,如:UCX_Tree_01_00UCX_Tree_01_01UCX_Tree_01_02,以此类推。这些碰撞对象均会和此网格体相关联。

  • 当前球体仅应用于钢体碰撞和虚幻引擎的零范围追踪(如武器),而不应用于非零范围追踪(如玩家运动)。如 静态网格体 并非等分缩放,则球体和盒体将无法正常使用。通常需要创建 UCX 基元。

  • 碰撞对象设置完毕后,便可以把渲染和碰撞网格体导出到同一个FBX文件中。将FBX文件导入虚幻编辑器时,它将找到碰撞网格体,将其从渲染网格体上移除,并将其转换为碰撞模型。

  • 将非凸面网格体分解为凸面基元是非常复杂的操作,还可能产生不可预知的效果。另一个方法是在3D MAX或Maya中将碰撞模型分解为凸面块。

  • 如一个对象的碰撞由多个凸包所定义,那么这些凸包相互未交叉时产生的结果为最佳。举例而言,如果一个棒棒糖的碰撞由两个凸包所定义(一个用于糖果、另一个用于棒),那么两者之间应留有空隙。详情如下所示:

模型 

模型碰撞

 

https://docs.unrealengine.com/4.27/zh-CN/WorkingWithContent/Importing/FBX/StaticMeshes/

### C# 中实现三维模型碰撞检测方法 #### 添加碰撞体组件 为了实现在3D环境中对物体间的碰撞进行有效判断,在目标对象上添加合适的碰撞体组件至关重要。对于静态或动态的3D模型而言,可以为其附加Box Collider、Sphere Collider或是Mesh Collider等不同类型碰撞器来定义其物理边界[^1]。 #### 利用 Raycast 技术实施点击检测 通过射线投射(Raycasting)的方式可以在场景内发射一条虚拟光线,并检查这条光线是否与其他物体上的碰撞器发生接触。具体来说就是当用户触发鼠标按键时,从摄像机位置向屏幕指针方向发出一道射线并查询它最先碰到哪个游戏物件。如果命中的是预期中的可互动实体,则进一步处理对应的交互逻辑。 ```csharp using UnityEngine; public class ClickDetector : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { Debug.Log("Hit object name:" + hit.collider.name); // 执行相应操作... } } } } ``` #### SAT算法简介及其应用场景 分离轴定理(Separating Axis Theorem,SAT)是一种用于多边形之间相对位姿关系判定的有效手段之一。尽管网络资源中有关二维空间下SAT原理阐述较多,但在实际工程实践中同样适用于描述复杂形状间是否存在重叠情况下的三维情形。此方法能够帮助更精确地完成两个不规则几何体之间的碰撞测试任务[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值