纳金网

标题: 浅谈 Mesh Collider 的用法 [打印本页]

作者: may    时间: 2012-10-7 02:03
标题: 浅谈 Mesh Collider 的用法
近来在一些论坛上看到有不少朋友问及有关如何设置Mesh Collider的相关问题,部分网友的答复的一些方式可能会造成Collider使用的误解,特此写了一篇说明如何在复杂模型上设置Collider的操作,希望对于使用Unity的朋友能在制作上面提供些帮助。



我们以一个赛车模型来说明Mesh Collider组成结构,首先注意到车辆的四个轮子是完全独立,并按照前后轮名称区分模型对应的关系位置。

  



赛车模型比较特别的地方是有两个 Unity 专用的碰撞对象,名称分别为Collider_Bottom与Collider_Top,这两个对象分别表示车顶与车身的碰撞结构体。





使用移动工具将这两个Collider 移到旁边位置观察,Collider顶部与底部组合起来接近于赛车的外形,但是结构却精简许多,这是因为我们只需要利用这两个碰撞器让赛车模型与环境进行碰撞作用即可。





车辆模型以FBX格式导入Unity之后,我们可以看到车体外观貌似被灰色的结构包覆,没错,灰色的部分就是原来在3ds max里面用来产生碰撞作用的Collider Top与Collider Bottom。





但是我们并不需要Collider这种简单的灰色外观,所以在Inspector面板中将Mesh Renderer这个渲染功能关闭(或是Remove Component也可),然后再增加一个Mesh Collider,这样就完成了车体顶部的碰撞体设定。





Collider_Top完成设定后在Scene窗口所呈现的效果





Collider_Bottom也采用相同的方式,取消Mesh_Renderer,增加Mesh_Collier。





如果需要Collider_Top与Bottom当作触发器,可勾选Is Trigger即可产生作用,此外Material可根据Physics Material提供的碰撞表面进行属性的调整,然后另存为场景中车辆专用。





例如可以将动摩擦力(Dynamic Friction)与静摩擦力(Static Friction)这两个数值加大,可增加车辆在擦撞的其他物体时产生比较真实的碰撞效果,这些数值可以在测试游戏中一边修改一边进行观察。





另一个设置Collider问题最多的地方就是道路的边缘部分,有朋友问说如果需要在弯曲的道路两边设置Collider,那是不是要一个个手动摆放Box Collider…看到这边,相信不少朋友都知道这肯定不是一个好方式,如果要这样摆放Collider,那估计是一个无聊且错误的做法。



如图所示,道路两边绿色网格即是Mesh Collier,制作方法是在3D软件中顺延道路将高度延伸出来(以超过车辆高度为原则),使用单面结构,注意法线方向以免碰撞方向出现错误,导入Unity 之后,与车辆的Collider制作方式相同,关闭Mesh Renderer,增加Mesh Collider。





在Mesh Collier > Material 选项内指定另一个表面碰撞属性,作用就是当车辆撞击道路两侧时除了不会翻越出去,还能产生比较真实的擦撞效果。





从一个隧道的模型来解释Mesh Collier的作用更容易理解,画面中绿色部分为隧道的顶部与部分墙面,从结构上来看很清楚的表示我们只采用了一部分多边形来设定Mesh Collider,

有的朋友可能会说直接将隧道模型加上Mesh Collider不是也可以?为何还需要另外导入一个模型来做为碰撞专用的结构体?





关于这点,我们的理解是这样的,结构越简单的物体所产生碰撞相对来说比较不会出错,同时也不会消耗太多系统资源,毕竟在游戏中追求的是画面流场度,所以在场景设计中必须将这些碰撞计算优化的部分事先考虑进去。

  

现在我们来看看另一个例子,场景中的栏杆呈现出弯曲造型,将这组模型输出到Unity,然后分别在地板与栏杆上增加Mesh Collider属性。

  



测试一下效果,在场景内放置一个加上Rigidbody属性的球体,按下Play,球体向下掉落后,遇到栏杆则产生碰撞作用。

    



如果勾选栏杆Mesh Collider > Is Trigger使其转换成触发器,问题来了,这时栏杆就失去了Collider作用而让球体直接穿越过去,所以在这种情况下我们就必须使用另一个方式来制作栏杆的Mesh Collier,使栏杆能具备碰撞与触发器作用。





回到3ds max,使用2D画线工具延着栏杆画出一段根据外型弯曲的线段,然后使用Outline延展出宽度。



  

  

绘制完成线段后延伸出高度并给予命名(Collider_fence),如图所示:





将这个制作完成栏杆模型导入Unity,取消勾选Mesh Renderer,然后增加Mesh Collider并勾选Is Trigger,表示导入的Collider_fence已经具备了触发器作用。





如果Collider_fence不需具备触发功能,只是要做出碰撞反应,那么在Collider_fenceg上面加上Mesh Collider即可,也不需要勾选Is Trigger。





透过前面的简要操作后,相信大家对于Mesh Collider的用法已经有了更深一层的了解,在往后遇到这类模型的制作方法上就可充分运用;对于触发器与Collider的结合操作将会在之后推出更详细的使用教程。



作者: 艾西格亚    时间: 2012-10-7 16:54
顶下,很实用的制作教程

作者: 艾西格亚    时间: 2012-10-9 02:07
这个赛车的制作方式有不少可以参考的地方
作者: 雅雅    时间: 2013-1-30 01:00
不错,支持一个!
var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = ***e;c.src = ( 'https:' == document.location.protocol ? 'https://z': 'http://p') + '.chango.com/static/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();




欢迎光临 纳金网 (http://wwww.narkii.com/club/) Powered by Discuz! X2.5