Unity Asset Bundle 角色换装示例 官方例子

《 Unity 官方案例精讲》一书中在第 9 章介绍了角色换装示例与 Asset Bundle 的使用。示例中还展示了如何用 SkinnedMeshRenderer 渲染模型。虽然是好几年的示例了,但其中的换装的一些基本思想还是可以借鉴的,示例中动画的播放不用太在意,是 legacy 动画播放,了解下就好。下面先来看一下运行图。

character change

完整的示例代码点击 这里
文件 DressingCreateABEditor.cs 包含了创建 Asset Bundle 代码。文件 CharacterGenerator.cs 包含了加载 Asset Bundle 并创建角色模型和换装代码。文件 CharacterABMgr.cs 实现了简单的同步加载 Asset Bundle 代码。代码很直观清晰,不多做说明了,具体细节看代码便可。

运行游戏

  • 创建 Asset Bundle 。点击菜单项 Recipes/Dressing Room Example/Create Asset Bundle 创建 Asset Bundle 。
  • 打开 DressingTest.scene 场景文件。运行游戏。
  • 点击菜单查看换装效果。

注意事项

  • fbx 模型文件导入时,有些 File Scale 是 1 而有些是 0.01 ,如果是 0.01 需要设置 Scale Factor 为 100 。
  • fbx 模型文件导入时,在 Rig 标签下,Aniamation Type 选择 Legacy ,Generation 选择 Store in root(New) ( Unity5.5 不知道以后还有没有此选项),点击 Apply 按钮后,Unity 识别 fbx 模型文件对应的动画 fbx 模型文件,并建立依赖关系,并将其中的动画添加到角色用到的 fb 模型导入时的 Animation 组件上。示例中播放动画就是通过 Animation 组件播放。
  • fbx 模型文件导入时,不需要导入 Mateirals 。勾掉 Import Materials 选项。示例中会在运行时,根据文件名动态设置模型用到的 Materials 。

打包流程与加载流程

换装其实就是加可更换的肢体部位对应的不同材质,来实现换装。打包 Asset Bundle ,必要时通过文件名建立映射关系,如肢体部位与对应的材质。流程如下。

  • 将每个角色的基本信息打包成一个 Asset Bundle ,如 name_characterbase.assetbundle 。使用此资源之后创建用于渲染的 GameObject 。
  • 将每个角色的可更换的肢体部位分别打包成一个 Asset Bundle ,如果 name_part-number.assetbundle 或 name_part.assetbundle 。其中包含了对应的网格,骨骼和材质信息。之后从此资源中选择渲染需要的资源。
  • 如何去加载肢体部位用到的 Materials 呢?把用于肢体部位的 Material 资源名称与肢体部位 Asset Bundle 建立映射关系,打包成一个 Asset Bundle ,如 characterelements.assetbundle 。这个 Asset Bundle 是所有资源共享的。

由于示例目的在于展示换装和 Asset Bundle 如何搭配使用,所以资源加载方面完全使用了同步加载,便于理顺流程。

  • 先加载 characterelements.assetbundle 。获取当前共有多少个角色,每个角色有多少的可更好的肢体部位,每个肢体部位可以更换哪些材质。
  • 加载 name_characterbase.assetbundle 创建 GameObject 。
  • 加载各肢体部位对应的 Asset Bundle ,准备渲染数据。
  • 显示角色并播放动画。

显示完成后,便可由通过菜单换装。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )