原理就是用新造的部件和角色的骨骼进行重新对接。

demo的使用方法:

PartIdx设置要换那个部件[0,4],一共5个部件

EquipIdx设置要更换部件的装备索引[0,1],具体看我的ChangeEquip的PartList。

点击Test执行换装

//换装源码

using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class MyAvatar : MonoBehaviour
{ [System.Serializable]
public class PartInfo
{
public GameObject DefaultPart;
public GameObject NewPart;
} //目前部件列表
public List<PartInfo> AvatorParts; /// <summary>
/// 换装
/// </summary>
/// <param name="idx">部件索引id</param>
/// <param name="res">装备资源</param>
public void ChangePart(int idx, GameObject res)
{
if (idx < 0 || idx >= AvatorParts.Count)
{
Debug.Log("out of range");
return;
} //获得这个部件信息
var info = AvatorParts[idx]; //先删除新装备的
if (null != info.NewPart)
{
GameObject.Destroy(info.NewPart);
info.NewPart = null;
} if (null == res)
{//脱装备,还原成默认装备
info.DefaultPart.SetActive(true);
}
else
{//穿新装备
info.DefaultPart.SetActive(false); //实例化那个部件
var go = GameObject.Instantiate(res) as GameObject; //获得蒙皮Renderer
var newSkin = go.GetComponentInChildren<SkinnedMeshRenderer>();
//要挂接的是带蒙皮Renderer
var newPart = newSkin.gameObject; //挂上
newPart.transform.parent = info.DefaultPart.transform.parent; //在主角骨骼身体里找到该部件所需要的骨骼(这里有一点需求就是美术在做部件时是要带着骨骼的)
var bones = new Transform[newSkin.bones.Length];
for (int i = 0; i < newSkin.bones.Length; i++)
{
bones[i] = FindChild(gameObject.transform, newSkin.bones[i].name);
} //重新赋值骨骼
newSkin.bones = bones; //给当前部件信息赋值
info.NewPart = newPart; //删除剩下没用的东西
GameObject.Destroy(go);
}
} public static Transform FindChild(Transform t, string searchName)
{
foreach (Transform c in t)
{
string partName = c.name;
if (partName == searchName)
{
return c;
}
else
{
Transform r = FindChild(c, searchName);
if (r != null)
{
return r;
}
}
}
return null;
} }

  

最后附上Demo

链接: http://pan.baidu.com/s/1jHpw3Im 密码: w4r6

Unity3d 换装Avatar系统的更多相关文章

  1. Unity3d 换装 之 模型动画分离

    在手游中换装成了越来越不可缺的一个功能,毫无疑问各式各样的时装为游戏增添了不同的色彩. 对于2D手游,或许是更换对应的序列帧,也或许是如同3D手游一般,更换模型动画. 对于游戏中的人物,一般分为头.上 ...

  2. 【AS3 Coder】任务六:人物换装(纸娃娃)系统的制作

    使用框架:AS3(Flash Professional CS5.0及更高版本 + Flash Buider)任务描述:了解人物换装系统的制作原理难度系数:2 本章源码下载:http://www.iam ...

  3. 【Unity3D】3D角色换装++ Advance

    http://www.cnblogs.com/dosomething/archive/2012/12/15/2818897.html 本文在之前的文章Unity3D角色换装的原理 基础上做一个补充 给 ...

  4. Unity3d 3d角色换装实现原理及步骤

    http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画  但是不支持Ph ...

  5. 【Unity3d】3d角色换装实现原理及步骤

    http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画  但是不支持Ph ...

  6. Unity3D教程:换装方法

    http://www.manew.com/4136.html 游戏内的角色,能够像纸娃娃换装那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能:一般而言,我们建好的 3D 模型,如果要将其中 ...

  7. 驰骋BPM系统-表单引擎-流程引擎 2020年大换装

      关键字:驰骋表单引擎,流程引擎,界面升级. 前言概述: 感谢美工与同事们的辛苦工作,ccbpm新年大换装,迎接爱好着,为这阴霾多日的疫情气愤增添一笔光彩. 本次的色系以浅灰色为主,因为ccbpm大 ...

  8. Win8换成Win7系统问题小结(修改主板BIOS方法)

    问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...

  9. 笔记本装双系统!win10+Linux!所有的坑自己一个个爬过来,纪念一下。

    笔记本装双系统!win10+Linux!所有的坑自己一个个爬过来,纪念一下. 2018年09月16日 21:27:19 Corax_2ven 阅读数:14038   写在前面,装了大概5遍,装了删删了 ...

随机推荐

  1. Elasticsearch-PHP 索引操作(转)

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

  2. SQL之按两个字段分类汇总

    目的: 同时按"游戏代号"和"礼包名"分类汇总,然后获取下拉框的数据.  如下图所示: SQL查询 select game,giftname from qyg_ ...

  3. [css]通过transform缩放邮件客户端h5页面

    摘要 最近一直在折腾邮件通知的东东,大概逻辑就是如果有新邮件,向收件人的app推送一条服务号消息,并且在单击该消息的时候,需要展示邮件的详情. 技术 这里是使用Exchange EWS API来实现的 ...

  4. mapreduce 本地调试需要注意的问题

    1.写好的程序直接在hadoop集群里面执行 2.如果需要在本地调试,需要注释掉mapred-site.xml <configuration> <!-- <property&g ...

  5. 关于轻松安装LNMP和LAMP的编译环境

    http://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要2GB以上硬盘剩余空间 1 ...

  6. 存储过程获取最后插入到数据表里面的ID

    存储过程获取最后插入到数据表里面的ID SET NOCOUNT on;---不返回影响行数提高性能GOcreate proc [sp_bbs_thread_Insert] @id int output ...

  7. 日常使用的shell脚本

    1.shell实现无密码登陆 host=$ expect << EOF         spawn ssh-copy-id $host         expect "passw ...

  8. android 读取SQLite android could not open the database in read/write mode错误

    由于AndroidManifest.xml文件中uses-permission没有设置权限问题 <uses-permission android:name="android.permi ...

  9. java mail

    java mail 1.配置 mvn <dependency> <groupId>javax.mail</groupId> <artifactId>ma ...

  10. lianjie

    数值策划入门:如何确定游戏中的资源价值和定价http://bbs.gameres.com/thread_494366.html 一张常规的RPG游戏地图的制作流程 http://bbs.gameres ...