如何创建自己的 Raycast 组件,它不需要碰撞器,但在 C# Unity3D 中支持 Skinned Mesh Renderer?
Posted
技术标签:
【中文标题】如何创建自己的 Raycast 组件,它不需要碰撞器,但在 C# Unity3D 中支持 Skinned Mesh Renderer?【英文标题】:How to create your own Raycast component, which doesn't need colliders, but supports Skinned Mesh Renderer in C# Unity3D? 【发布时间】:2019-03-08 22:52:09 【问题描述】:我正在制作一个第一人称射击游戏,并且我有一个玩家模型(3D),经过装配,上面有动画和蒙皮网格渲染组件。我尝试了 Mesh Collider 组件,但它对游戏性能(动画、每秒帧数)有很大的负面影响。所以我想,一定有办法制作自己的 Raycast System(Script, Variable),但我不知道从哪里开始。有没有办法查看 Unity 的 RaycastHit 组件脚本,或者你们有什么想法如何开始制作自己的 Raycasting 脚本,它不需要碰撞器,但支持 Skinned Mesh Renderer 组件?
附: 我需要它来射击球员。
【问题讨论】:
如果没有对撞机,您的玩家将如何与物理世界的其他部分互动?我非常怀疑创建自己的系统也会产生更好的结果。如果有的话,您可以考虑使用多个更简单的碰撞形状(胶囊、球体、盒子)来创建“碰撞网格”以优化性能 @UnholySheep 我有一个胶囊碰撞器用于与世界交互,我考虑过更简单的碰撞形状,但这会导致错误(你实际上击中了玩家,但没有击中碰撞器)。我不知道是否有一个选项可以减少 Mesh Collider 组件中的三角形数量,这可能是一个解决方案。 Mesh colliders 有多种烹饪选项 (docs.unity3d.com/Manual/class-MeshCollider.html#cooking) 可能会有所帮助。并且附加多个更简单的碰撞形状不应导致像您描述的问题,除非您没有正确设置它们(并且在玩家网格仍然可见的情况下它们之间存在间隙) 我会看看 Mesh Colliders 的烹饪方法,但是你所说的更简单的碰撞形状几乎是不可能的,因为我必须播放大量和不同数量的动画。 @Draco18s 这不是免费的;)。 【参考方案1】:不要在由骨骼动态控制的网格(绑定网格)上使用网格碰撞器。这对大多数计算机来说太重了。 我建议四肢和头部使用多个胶囊对撞机,胸部/胃部使用 1 或 2 个盒式对撞机。将这些碰撞器附加到骨骼上,以便碰撞器与动画一起移动。 这样就可以使用默认的统一光线投射系统:Physics.Raycast。
【讨论】:
以上是关于如何创建自己的 Raycast 组件,它不需要碰撞器,但在 C# Unity3D 中支持 Skinned Mesh Renderer?的主要内容,如果未能解决你的问题,请参考以下文章