游戏动作师使用Unity3D遇到过的所有问题

简介:

http://blog.csdn.net/onafioo/article/details/50865169

 

http://www.gameres.com/thread_480489.html

文/拉撒路


到现在我大概用了四年多u3d,期间掉过无数坑,遇到过各种问题,2015年底的时候想着应该将其整理出来,方便大家查阅,于是有了这篇东西。但是实际整理完发现,有些问题我已经想不起了,遇到过的问题肯定不止这么多。希望各位同行能把遇到的问题发给我,解决了的、没解决的都可以,大家互相交流一起进步。我会把所有问题全部整理好在共享给大家,自己能提高的同时也算给行业做点小贡献。我的微信号:othniel-aslan。

导出相关

 

 

图为max导出fbx界面,各版本界面略有不同功能相近,版面所限请放大查看


在游戏美术工作流中,模型和动画的导出都是由动画师负责,一份可用的动画文件,必须同时包含模型和动画文件各一个。

模型导出时应注意勾选蒙皮和几何变形,不要勾选贴图文件,导出模型后单独将贴图文件手动放在模型文件夹下。避免重复导出替换时出错。动画的导出则比较常规,需要注意的是很多人喜欢使用烘焙动画,其实并不好用,容易出现万向轴的问题且不说,还给一些中间帧动画的修改带来难度。具体内容见模型篇。

挂点相关

 

图为常规挂点所需点位,实际根据项目需求增减。


所挂dummy点需作为子级链接到对应骨骼,三轴对齐,各个模型间同一个点位置要统一。

武器换手相关

换手的三种方式 1.缩放隐藏换手  2.link链接约束换手  3.prop骨骼换手

1.缩放隐藏换手 即 在需要有武器的位置都放置一把武器(如左手、右手、后背、空中),将当前不需要显示的武器缩放至极小不可见,需要显示时再放大显示。优点为无需特别支持,引擎通用,非常简单。缺点为略麻烦,做动画之前就要想好武器需复制几份分别在哪,动画缩放容易出现中间帧过度不顺畅。

 

 

 

 

 


2.link链接约束换手 即 使用link约束动画实现武器换手 其最大优点就是大部分动画师非常熟悉,运用起来得心应手。缺点也很明显,引擎不能识别link动画,需要塌陷或导出时烘焙动画才可被引擎识别,而一旦出现万向轴问题,改起来会比较麻烦。

 

 

 

 

 


3. prop骨骼换手 即max自带的武器道具骨骼 优点是设定即为武器道具骨骼,能解决武器所需一切需求,并且被unity3D 5.0以后的版本支持,直接导出即可。缺点是unity3D 5.0之前的版本不支持,需要烘焙动画。

 

 

 


表情动画相关

Unity支持的MAX表情动画已经确认可行的有两种 一种就是 面部骨骼绑定表情动画 另一种是morpher控制器表情动画。表情动画常见于舞蹈类、大型MMO类及单机类等游戏中,前两种重视社交和展示所以对表情有需求,后一种常见于精品游戏中,各方面品质相对都比较高所以对表情也有要求。

面部骨骼绑定动画 最常见的面部骨骼就是张嘴动画,只需一根下颚骨骼即可解决,在很多有坐骑或怪兽的项目中使用,是广义上的表情动画。较为复杂的表情动画用骨骼绑定来做并不划算,一来架设骨骼比较麻烦,具体K动画的时候也相对繁琐(有人用线性IK来制作表情,其实道理与骨骼绑定并无二致,只是调动画的时候有联动关系相对简单些);二是骨骼过多带来的运算量也比较大,会比较占用资源。

 

 

 


morpher控制器表情动画 优点是占用资源相对较小,动画可以做到比较精细,制作流程也相对简单。缺点是动画师不一定会调模型表情,前期过程相对麻烦(被拾取的表情头不能镜像、不能在统一个被拾取脸上左右同时调表情),并且有比较多的动作师从来没接触过morpher学习成本也相对较高。

这里解释下morpher的原理 将一个角色的面部模型复制出多份,每份分别承担表情的一个局部动作,如微笑至少需要左嘴角上翘、右嘴角上翘、左眼微闭、右眼微闭四份。然后通过morpher控制器拾取这些表情,即可通过控制morpher的数值来调节表情动画。

 

 

 

(以上表情为鄙人随手乱调作为配图使用,略丑勿怪)


文件压缩相关

由于Fbx导出采样原则(即我们通常所说的满帧导出)所致,通常一段动画导出后的容量都会比较大,常见的压缩方式只有一种,即使用unity自带的动画压缩。这里再额外介绍两种非常规的压缩方法以应不时之需。

Unity自带的动画压缩 选项有三种分别是关闭压缩 减少关键帧 减少关键帧并压缩文件。  1.关闭即为不进行压缩保持导出时的状态。2.减少关键帧 即unity会检查相邻两帧之间移动旋转缩放的阈值,当这个值小于规定数值时就删掉其中一帧。3.减少关键帧并压缩文件 除了2中所描述的内容还会降动画文件进行打包压缩,使其减少占用硬盘容量,但对内存容量并无影响。

Rotation error、Position error、Scale error三个值是上文“减少关键帧”内容中所提到的阈值,这个值越大被删除的帧就越多,动画文件相对就越小,同时动画质量相对也就越差。

当动画压缩过于严重时,一些动作幅度较小的动画将会严重失真,如待机动画在压缩严重时腿部将无法站立于地面,而是随着质心摇摆。产生此类问题,只需将该动画的压缩阈值略作调整即可,如果遇特殊情况调整阈值无效可尝试后面的方法。

 

 

 


Max中导出时进行压缩 在max的导出面板也有减少关键帧的选项,其工作原理也与unity相同,只是max作为专业的动画制作软件,他的阈值允许的精度更高可以到小数点后面很多位。而且作为美术软件相信他对动画关键帧的删减也更专业。但缺点也很明显,他不能实时预览。当我们设定一个阈值之后,没有办法实时查看压缩后的效果,难保压缩后的文件没有错误,不适用于处理大量的文件。当unity无法处理某个动画时可以用max尝试。

 


编辑fbx动画 这种是非常规的办法了,我也是听人说没试过。方法是 在max中导出fbx之后,使用可以编辑fbx的软件(如mortion builder),对动画进行删帧。这个办法的好处显而易见,由于是动画师手工删除,既能保证动画的质量又能保证压缩到最小。缺点也很明显,工作量大浪费时间,如果不是非常重要的角色出现解决不了的问题,不建议使用这种方式。

新旧骨骼系统相关

Unity在4.0系统增加了新的动画系统,目前unity动画类型下拉菜单中共有四个选项,分别是None、Legacy、Generic以及Humanoid。其中G和H为4.0版本新增的内容,L是老版本的动画系统,none则是不使用动画。

 


Legacy 是我目前使用最多的动画系统,在我看来他已经满足一个项目的绝大部分需求,而且因为最基础所以也最易扩展,需要一些额外功能时也方便修改追加。

Generic 与legacy相比,generic可以使用新系统自带的状态机,并且自带可编辑的动画融合系统,然而在我看来这都没什么用。如果generic不与humanoid配合使用,其功能与legacy并无二致,反而因为系统并不成熟更容易出现未知错误。当然,也可能是有其他功能我并未得知,如有遗漏还望指正。

 

 

 


Humanoid 字面上理解即为人型骨骼系统,其最显著的特点是可以将max的骨骼转化为unity的骨骼,并且会生成一份avatar,将avatar指定给不同的角色模型。即可无视高矮胖瘦的体型差异将同一个动画分配给每个角色,简单来说就是可以实现动画的通用。

 

 

 


这里并没有讲每个动画系统的优劣,因为动画系统优劣的评判并不是单一独立的,理论上每个动画系统都能解决问题。具体要选择哪个系统,要看游戏的类型、打包方式,举例来说,如果是像三国无双系列这种,同一个角色换了武器就会换一套动作,每件武器都有对应的动画,那显然是要用humanoid这种可以无视体型的通用骨骼;又比如角色间不需要共用动画,并且每个角色程序都是单独打包,那最好还是用legacy系统,简单省事。甚至在同一款游戏里也可以主角单独打包使用legacy骨骼,其他怪物使用humanoid骨骼共用动画,以实现资源的最优化。

常见问题与小技巧

1.单帧动画无效 在unity中至少要两个关键帧才能被认定为是一段动画,如果某根骨骼只有一个关键帧能不能读取这个关键帧则比较看缘分,有时候读得出有时候读不出。

注:另外要注意的是,同一个骨骼的两个动画,如果A动画中该骨骼存在两个以上的关键帧,而B动画只有一个关键帧,当播完A继续播B的时候,该骨骼则会保持A动画的最厚一帧状态。同理如果B动画该骨骼没有帧,也会保持A动画最后一帧。

2.超远位置出现关键帧 一般常见于导bip动作文件时bone骨骼或dummy点上,在负几百万帧的位置出现一个孤立的帧,具体是什么原因目前仍不清楚。该问题在max中比较不容易被发现,导入到unity时动画无法读取,曲线面板不显示任何关键帧。Max导出动画时虽有删除孤立帧的选项,但经测试无法解决该问题,一般只能打开曲线面板找到该帧删除之。这里要特别强调一下,因为其位置非常远,最好逐一选择骨骼删除,框选所有骨骼一起删的话,极容易导致max崩溃。

3.层动画问题 常见的有两种,导出时如果动画层没有塌陷,则unity只能识别当前层所记录的动画,基本是百分之百出错的,回到max塌陷即可。另外一个是max自身的问题,当某个骨骼使用了select IK object的时候,加层是无效的,必须点击空白处清空掉拾取的IK object。

 

拾取状态

 

 

清空状态


4.摄像机动画 理论上来说,max里的摄像机动画unity是不识别的,但实际上导出的摄像机在unity中会默认作为一个gameobject来使用。这样只要在这个gameobject下面挂载一个unity的摄像机,并把坐标归零即可。这里说个小技巧,由于单位的原因,max的摄像机动画进入到unity中可能会遇到比例的问题,我们可以在max中创建一个dummy点,坐标归零,把摄像机作为子级链接给dummy,然后再调摄像机动画。这样进入unity的时候,我们只要吧dummy归零,缩放它的尺寸就可以调整比例。

5.Unity动画曲线  unity曲线面板提供了一些基础功能,但是却连复制帧这种常用的功能都没有,我的解决办法是将需要复制的帧拖动至动画的末尾,然后再尾帧之外打个关键帧,这样即可复制出一样的帧,之后再把帧拖到适当的位置即可(下图我复制了第二帧)

 

 

本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6697849.html如需转载请自行联系原作者


jiahuafu

相关文章
|
3月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
163 6
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
93 4
|
3月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
117 5
|
2月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
128 3
|
2月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
173 3
|
3月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
132 3
|
2月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
175 0
|
2月前
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
143 0
|
2月前
|
图形学 开发者
【独家揭秘】Unity游戏开发秘籍:从基础到进阶,掌握材质与纹理的艺术,打造超现实游戏视效的全过程剖析——案例教你如何让每一面墙都会“说话”
【8月更文挑战第31天】Unity 是全球领先的跨平台游戏开发引擎,以其高效性能和丰富的工具集著称,尤其在提升游戏视觉效果方面表现突出。本文通过具体案例分析,介绍如何利用 Unity 中的材质与纹理技术打造逼真且具艺术感的游戏世界。材质定义物体表面属性,如颜色、光滑度等;纹理则用于模拟真实细节。结合使用两者可显著增强场景真实感。以 FPS 游戏为例,通过调整材质参数和编写脚本动态改变属性,可实现自然视觉效果。此外,Unity 还提供了多种高级技术和优化方法供开发者探索。
50 0
|
3月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
113 0