原文链接:http://blog.csdn.net/yueding521125/article/details/16873431

在unity中实现换装的方式主要有三种:

1.换材质或换贴图

2.显示或隐藏模型

3.合并网格

第二种主要用于换装备,但当涉及到“本质”上的换装时(例如猪脚是普通人,发动技能后左手变成机械手),就行不通了。因此,有必要学习一下合并网格。而官方的换装demo使用的是第三种。由于前两种比较简单,所以学习换装系统的重点就是第三种了。

1、角色模型制作

  unity3d支持Skin动画  但是不支持Physique动画  会发现Physique动画在unity里严重变形

  因此在模型的骨骼动画的制作上面  要用Skin

  当然也可以做成Physique  然后用插件转换一下  3dsmax的插件PhyToSkin

  3dsmax中转换之前  为了避免出错  先隐藏骨骼   然后对绑定了骨骼的模型进行单独转换  因为批量也会出错

  转换以后在修改面板中加入可编辑网格  同时为了避免出错  检查一下uv是否贴反了

2、角色模型导出

  确保导出的模型是已经绑定了骨骼的  在导出设置中根据需要选择是否导出Animation

  以及3dsmax和unity3d中的单位关系

3、官方CharacterCustomization中的模型

  从官方换装demo中会发现他的一个角色模型里包含了要换装的多个模型  比如有两个衣服模型、三个头发模型等

  那我们在美术制作的过程中是不是也要这样进行“模型叠加”呢   其实没必要

  demo这样的目的是为了使得模型公用一套骨骼  那么我们在角色模型的制作过程中  就确保模型使用的是同一套骨骼

  比如男性角色使用一套  女性角色使用另一套  当进入创建角色场景后  根据玩家选择角色的性别  显示不同的动画即可

4、角色模型打包技巧

  前面提到  官方demo里换装的实现  原因是因为公用了一套骨骼

  那么我们在打包的时候  就将骨骼和模型分离  将模型各个部件(比如头发、手臂等)分开打包

  比如一个男性的角色  将他的基础骨骼打进一个包   再将身体各个部分的模型分别打包

  如果一个模型由头、脸、身体、手臂、脚五个部分组成  那么打包后将会有六个资源包  分别是基础骨骼、头、脸、身体、手臂、脚

  这样游戏的创建角色过程中  就可以单独地对模型的身体部位进行切换

  打包的过程和官方demo的打包大同小异  只不过这里作者在打包时捎带生成了换装的配置表

5、角色模型的加载

  unity3d中使用www进行资源的加载  如果将资源放在了http服务器上的话(包括本机的IIS)  则需要一个crossdomain的xml配置  本地则不需要

  加载时应该首先去加载基础骨骼  加载完以后再去加载要显示的默认角色模型  比如新手模型

  在加载完以后  则要提取各个模型中所记录的骨骼信息  根据这些信息将模型挂到对应的骨骼上

  为了避免模型之间出现缝隙  应当进行模型网格的合并

  完成以上工作以后模型的加载就已经实现了

6、角色模型的换装

  回到角色模型打包的话题

  设想一个男性角色有10套服装用来更换  而公用的骨骼是一套

  因此在打包时仍然将这一套骨骼单独打包  然后再将其他所有的模型打包

  一句话总结就是   一套骨骼对应N个模型  这N个模型都公用这一套骨骼

  换装的实现实际上就是将相应的身体部分进行更换

  比如要换一个手臂  则将新的手臂与身体上除了手臂以外的模型再进行一次网格合并

  换句话说  要更换身体某一个部位  实际上就是更新了整个角色模型

  这里需要注意的一点是  基础的骨骼不用再去更新

  设想一下  换装时候  一般角色都会有个“站立”或者“呼吸”的动作在播放  那么如果同时去更新了一遍基础骨骼  那么结果势必会让本来连贯的动作有“一闪”的现象

  这是因为  之前的动画还没播放完  然后就更新了骨骼  那么动画又重头开始播  这之间没有过渡  肯定会有点问题

[Unity实战]换装系统的原理相关推荐

  1. Unity实战之打靶游戏

    Unity实战之打飞碟游戏 项目源码 整体描述 利用unity实现简单的打飞碟游戏,射中相应的靶即得分.一轮游戏共五发箭. 设计思路 UML图如下 定义组件 弓箭 由两部分组成:箭头和箭身. 箭头是一 ...

  2. ❤️UNITY实战进阶-OBB包围盒详解-6

    ❤️UNITY实战进阶-三维AABB包围盒详解-6_欲望如海水,越喝越渴.-CSDN博客前言 碰撞检测问题在虚拟现实.计算机辅助设计与制造.游戏.机器人等方面都有着广泛的应用,而包围盒算法是进行碰撞检 ...

  3. Tiled结合Unity实现瓦片地图——Unity实战篇

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/75425915 上文说道,Ti ...

  4. Unity实战——模拟太阳系

    unity实战--模拟太阳系 项目源码 最终效果 Unity模拟太阳系效果 搭建简易太阳系 定义九个球体,命名如下: 加上贴图,调整大小: 各种参数设置如下: Object Position Scal ...

  5. Unity实战之牧师与魔鬼(动作分离版)

    Unity实战之牧师与魔鬼(动作分离版) 项目链接 整体描述 本次项目在第一版牧师与魔鬼的基础上,将动作从场记中分离出来,并设计一个裁判类实时监测游戏进行的情况.这样改进的优点有很多: 降低了不同功能 ...

  6. RPC 实战与核心原理分析

    RPC 实战与核心原理分析 RPCX是一个分布式的Go语言的 RPC 框架,支持Zookepper.etcd.consul多种服务发现方式,多种服务路由方式, 例子 服务端 package maini ...

  7. unity物理射线之原理分析(擅码网学习笔记)

    @[TOC]unity物理射线之原理分析(擅码网学习笔记) using System.Collections; using System.Collections.Generic; using Unit ...

  8. Unity实战之模拟飞碟

    Unity实战之模拟飞碟 unity实现简易打飞碟游戏. 项目地址 Unity飞碟实现效果 游戏规则 一共10轮,每轮10s 轮次越高,难度越大. 每轮的一定时间都会生成一定数量的飞碟,一共有四种颜色 ...

  9. unity实战:狂暴机器人游戏教程(下篇)

    文章目录 前言 三.敌人 3.1创建机器人 步骤1 创建脚本 **步骤2 定义生命周期** **步骤3添加射击动画** 3.2发射机器人导弹 步骤1 创建导弹运动逻辑 步骤2 添加导弹发射方法 3.3 ...

最新文章

  1. 分类问题-样本权重(sample_weight)和类别权重(class_weight)
  2. linux下字符串处理工具一:grep
  3. python3 asyncio loop 使用线程池原理
  4. cmakelist 寻找opencv
  5. 2017-2018-1 20155222 《信息安全系统设计基础》第10周 Linux下的IPC机制
  6. 关于mysql行级锁中MVCC的一些理解
  7. 使用CSS3各个属性实现小人的动画
  8. 中国旅游日出游火爆 中国第一水乡游人突破5万
  9. 自然语言15_Part of Speech Tagging with NLTK
  10. Java面向对象编程(中级)
  11. Java中的SynchronousQueue示例–生产者使用者解决方案
  12. “神算子”来了!时序预测模型零门槛轻松上手
  13. 用ACL 对Dos***进行分类的示例
  14. python里常用的正则表达式
  15. CISSP 考证进度篇(持续监督中)
  16. 杭州(浙江)人才引进落户办理流程
  17. 张靓颖同学2006年日程表
  18. 安装pod遇到这种错误ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xco
  19. 赛格威机器人路萌中国首秀 开发者计划今年将在国内落地
  20. golang基础面试题总结

热门文章

  1. Android主线程阻塞处理及优化
  2. 校园正版office安装
  3. linux下crossover打开软件,CrossOver for Linux
  4. input标签是什么?input标签属性有哪些
  5. linux 自动化gpg,使用gpg工具实现公钥加密
  6. oracle空值影响索引么,使用索引的误区之四:空值对索引的影响-数据库专栏,SQL Server...
  7. 小学课后兴趣班选课平台的设计与实现(ASP.NET,SQLServer)
  8. 美国人的10个文化偶像(2005 评出)
  9. Python | 电影Top250 + 数据可视化
  10. intellij IDEA中 introduce local variable 快捷键自动补全