使用Unity3D遇到过的所有问题及解决方法(续)

发表于2016-09-10
评论0 9.2k浏览
  文/拉撒路
  关于unity中权重与max有差异的问题
  将模型fbx文件放在场景中, 检查右侧inspector面板quality参数, 一般默认是auto也就是自动。这里可以设定一个顶点最多受几根骨骼影响,可以看到unity最多支持到一个点被4根骨骼影响权重,超过这个数的话 在max中有效,进了unity就会失效……


  关于虚拟体不能为最上级的问题
  这是我一位朋友遇到的问题,可能大部分人都没遇到过,我大概描述下问题。在我们制作有坐骑的角色时,可能根骨骼就不再是质心了,有时候是bone有时候是虚拟体。其实bone的话也可能出错,但是如果是虚拟体基本就是百分百出错,具体表现为,在unity中找不到根骨骼的dummy点,并且如果这个dummy点上有动画,会影响unity中角色的父层级。
  这里介绍俩个问题,第一个是max导出的文件,unity会自动在所有骨骼模型的父级,生成一个层级,就是图中bip01上的boss1层。第二是store in root这个选项,是指动画内容生成在哪一个节点,默认是在最父级,也就是unity自动生成的boss1层。这样boss1挂在动画文件和脚本内容,bip01及以下则是骨骼信息。


  那么重点来了,max中的dummy点与unity自动生成的boss1节点在unity看来是同一类型的节点,而unity默认的根骨骼叫做bip01(或bip001)。所以当我们在bip01上又加了一dummy作为父级,unity就直接把这个点当做它自己生成的boss1了。理解了这一点,就很好想到如何解决问题了,没错,只要把dummy点的名字改成bip01,然后把质心名字随便改成其他什么都好。这样再导入到unity中就可以被识别了……
  以上内容,亲测是可行的,但是因为看不到unity的源代码,所以原理是否如此也只能是猜测。
  关于动画压缩的补充:
  补充一点,关于uinty动画压帧的问题,对前文的文件压缩方法三,用mortion builder对fbx文件来压缩帧数控制,之前在项目中有用到过,效果还是比较明显的。1.用mortion builder 2012-204任意版本修改FBX文件并直接打开,帧率设置成12.5,2.然后在animation工具栏下选择勾选Plot on frame,选择12.5帧,Filters to apply 选项选 Unroll,然后点击右下角的Plot就可以了减帧了。不过有时候还要自己手动调整下,毕竟会有掉帧的现象。
  以下是针对unity中模型常见问题的整理,由于模型也是由动作导出,所以还是归类在动作文档当中。
  部分或全部面片透明 


  此类问题非常常见 具体出现原因也有很多 常见的如法线异常、顶点没有合并、透明贴图错误、辅助线方向错误、模型属性错误等。
  法线、顶点、透贴的问题比较常见处理办法也比较常规 不再解释。这里说下辅助线和模型属性问题。
  辅助线


  如图所示 unity中将四边面自动转换成三边面时会出现方向错误的情况 有时会导致UV变形贴图出错
  解决方案
  在Max显示面板下 取消Edges Only显示辅助线


  检查辅助线方向 找到出错处 用Cut工具划出实线纠正错误


  模型属性
  在模型的制作、绑定、调动画过程中可能会出现一些误操作改变模型属性,导致其在unity中显示异常。常见的如启用骨骼属性、可见性小于1以及在导入导出过程中模型属性出现未知错误。
  解决方案:
  启用骨骼属性 常见于绑定及调动画过程中误改了模型。只需在动画下拉菜单下打开骨骼工具面板,找到对象属性关掉启用骨骼的勾选即可。如图


  可见性小于1  在右键对象属性面板下,修改过可见性参数,会导致模型透明,将其参数调回到1即可。如图   


  模型属性的未知错误 常见于反复导入导出操作后,模型有可能出现各种意外,解决办法也比较简单。在max中导出obj格式的模型即可,因为obj只记录模型的网格信息不回带其他。
  其他
  在unity中偶尔出现mesh丢失的情况也会导致模型不显示,只要找到对应mesh放回skinned mesh renderer下的mesh选项即可。
  同一模型的两个面片间距离过近,可能会导致unity无法识别哪一个在前哪一个在后导致模型透明。
  多个模型所在渲染层不同、材质分配的不同,也会导致图像上的前后关系错乱,产生模型透明的错觉,要配合程序修改层级别或材质。

渲染层级

材质

  模型缩放异常
  常见的缩放错误包括模型整体缩放异常、四肢缩放动画异常、缩放隐藏异常等。
  模型整体缩放异常 有时在max中看起来尺寸正常的模型,导入到unity中会过大或过小,导致此类问题的原因通常有三种。
  unity参数异常 在fbx文件inspector面板model分类下的scale factor参数异常,



  通常出现这种问题是因为max中的单位与unity中的单位不统一,在单位转化的过程中出现异常,解决方案也很简单参照其他显示正常的模型,scale factor的参数是多少,修正异常模型的参数即可。
  max中模型有缩放 在max里查看模型缩放参数不为100,通常是由于模型在完成后没有进行重置变换(reset xform)。
  解决方案 只要将模型缩放到合适大小,添加重置变换命令并塌陷即可。



  模型的父级有缩放 通常出现在非角色的模型上,模型作为子级被链接到其他物体(如虚拟体、bone骨骼或其他模型等)时,其父级发生过缩放。解决方案 检查整个链接关系的缩放。
  四肢缩放动画异常 骨骼缩放动画,尤其是bip骨骼缩放动画,在max和unity中的计算方式不同,max中父级的缩放不会影响子级,但导入到unity中就会影响。所以一些在max里看起来正常的缩放动画,在unity中会拉扯的非常夸张。目前尚无有效的解决方案,只能是尽量缩放末端骨骼(小臂、小腿)而不去缩放首端(大臂、大腿、躯干)
  另 如果确实需要做橡胶人一类的全身都需要拉伸的角色动画,可以考虑用位移拉伸代替缩放拉伸,实现方案有几种,但都十分复杂,暂不在此介绍。
  缩放隐藏异常 是指用缩放手法来控制模型的出现和消失时,由于max和unity的帧率不同(max一般默认每秒30帧、unity默认每秒60帧),会出现一个介于出现和消失之间的错误中间帧,


  解决方案 修改max帧率为60,这样就可修改掉错误中间帧,之后再将帧率改为30,改好的中间帧仍将被保留下来,此时导出即可解决问题。步骤如图





  注:此操作导出时不可勾选烘焙 否则无效。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引