Unity物体碰撞出现穿插问题/穿过问题/物体穿过场景模型

(由于问题不好描述,所以标题就比较长了)

之前在做游戏时,发生角色与其他模型始终不能正常碰撞,总是会穿插,即角色穿过其他模型。其中角色有刚体和碰撞器组件,其他模型“有”碰撞器。

事后发现错误在于,其他模型的碰撞器组件被加到“组”上,而非组内每个物体中。

例如,一个客厅场景,有桌子、电视、墙壁,将3者打组成为一个组,命名“Environment”,再给Environment加个碰撞体组件。这样了,就会出现问题。正确的做法是,给Environment组内的每个物体(桌子、电视、墙壁)都加上碰撞体组件。

PS:别忘了运动的角色模型需要加刚体和碰撞体。

 

 

参考:

1.碰撞条件:https://blog.csdn.net/qiaoquan3/article/details/51339373

两个对象都有Collider组件且至少一个有Rigidbody组件;

其中至少一个物体(必须运动的)必须带有碰撞器(collider)+刚体(Rigidbody),另一个物体(可以静止也可以运动)也必须至少带有collider;

2.没有实体的东西(不是实际的物理个体)是可以被穿越的https://blog.csdn.net/jeksonal/article/details/8434636

 

### Unity物体自由落体时穿过碰撞体的解决方案 #### 使用连续碰撞检测模式 对于高速运动的物体,在离散碰撞检测下容易出现穿透现象。为了防止这种情况的发生,可以将物体的 `Collision Detection` 设置为 `Continuous Dynamic` 或者 `Continuous Speculative` 模式[^1]。 ```csharp // 将刚体组件设置为连续碰撞检测模式 rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; ``` 这种做法能够有效提高碰撞检测精度,尤其适用于具有较高速度变化的游戏对象。 #### 调整物理材质属性 适当调整物理材质中的摩擦力和弹跳系数也可以减少物体穿模的可能性。降低反弹效果有助于让掉落物更加稳定地接触地面或其他障碍物[^2]。 ```csharp // 创建并配置物理材料 PhysicMaterial material = new PhysicMaterial(); material.bounciness = 0.3f; // 减少弹性 material.frictionCombine = PhysicMaterialCombine.Average; // 应用到碰撞器上 collider.sharedMaterial = material; ``` #### 避免使用复杂的网格碰撞器作为动态物体的主要防护手段 由于网格碰撞器之间默认情况下不支持互相作用,除非将其设为凸形(Convex),因此建议优先考虑采用简单的基础形状来构建可移动实体周围的保护壳,而仅把精细模型留给静止环境元素处理[^3]。 ```csharp // 替换复杂MeshCollider为简单PrimitiveCollider Destroy(meshCollider); BoxCollider boxCollider = gameObject.AddComponent<BoxCollider>(); boxCollider.isTrigger = false; ```
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值