Unity3d 换装Avatar系统
原理就是用新造的部件和角色的骨骼进行重新对接。
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系统的更多相关文章
- Unity3d 换装 之 模型动画分离
在手游中换装成了越来越不可缺的一个功能,毫无疑问各式各样的时装为游戏增添了不同的色彩. 对于2D手游,或许是更换对应的序列帧,也或许是如同3D手游一般,更换模型动画. 对于游戏中的人物,一般分为头.上 ...
- 【AS3 Coder】任务六:人物换装(纸娃娃)系统的制作
使用框架:AS3(Flash Professional CS5.0及更高版本 + Flash Buider)任务描述:了解人物换装系统的制作原理难度系数:2 本章源码下载:http://www.iam ...
- 【Unity3D】3D角色换装++ Advance
http://www.cnblogs.com/dosomething/archive/2012/12/15/2818897.html 本文在之前的文章Unity3D角色换装的原理 基础上做一个补充 给 ...
- Unity3d 3d角色换装实现原理及步骤
http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画 但是不支持Ph ...
- 【Unity3d】3d角色换装实现原理及步骤
http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画 但是不支持Ph ...
- Unity3D教程:换装方法
http://www.manew.com/4136.html 游戏内的角色,能够像纸娃娃换装那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能:一般而言,我们建好的 3D 模型,如果要将其中 ...
- 驰骋BPM系统-表单引擎-流程引擎 2020年大换装
关键字:驰骋表单引擎,流程引擎,界面升级. 前言概述: 感谢美工与同事们的辛苦工作,ccbpm新年大换装,迎接爱好着,为这阴霾多日的疫情气愤增添一笔光彩. 本次的色系以浅灰色为主,因为ccbpm大 ...
- Win8换成Win7系统问题小结(修改主板BIOS方法)
问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...
- 笔记本装双系统!win10+Linux!所有的坑自己一个个爬过来,纪念一下。
笔记本装双系统!win10+Linux!所有的坑自己一个个爬过来,纪念一下. 2018年09月16日 21:27:19 Corax_2ven 阅读数:14038 写在前面,装了大概5遍,装了删删了 ...
随机推荐
- 并发下常见的加锁及锁的PHP具体实现代码(转)
在最近的项目中有这样的场景 1.生成文件的时候,由于多用户都有权限进行生成,防止并发下,导致生成的结果出现错误,需要对生成的过程进行加锁,只容许一个用户在一个时间内进行操作,这个时候就需要用到锁了,将 ...
- [Angularjs]系列——学习与实践
写在前面 这个系列是来这家公司到现在,边用边学,以及在工作中遇到的问题进行的总结.深入的东西不多,大多是实际开发中用到的东西. 这里做一个目录,方便查看. 系列文章 [Angularjs]ng-sel ...
- 关于Mysql错误:./bin/mysqld_safe --user=mysql& [1] 32710 121003 16:40:22 mysqld_safe Logging to '/var/log/mysqld.log'. 121003 16:40:22 mysqld_s
[root@www]# ./bin/mysqld_safe --user=mysql&[1] 32710[root@www]# 121003 16:40:22 mysqld_safe Logg ...
- php怎么获取mac地址?
如何用php获取mac地址呢?大家知道mac地址是电脑在全球范围的唯一标识,所以这个就非常实用,比如说要做一个投票功能,那mac地址是必不可少 的,如果单纯的靠ip地址来判断这个肯定是不准确的,水分太 ...
- jQuery源码-dom操作之jQuery.fn.text
写在前面 jQuery.fn.text在jQuery是个使用频率比较高的接口,它的作用无非是设置/获取dom节点的内容文本,下文会通过几个简单的例子来说明.text()接口的使用,以及最后会对源码进行 ...
- assign与weak区别(面试)
weak 比 assign 多了一个功能就是当属性所指向的对象消失的时候(也就是内存引用计数为0)会自动赋值为 nil ,这样再向 weak 修饰的属性发送消息就不会导致野指针操作crash. 可能不 ...
- GridView控件隐藏列
GridView隐藏列visible="false" 后你就无法取得这列的值了 下面是迄今为止最简洁的解决方法了. protected void GVList_RowDataBou ...
- 调用WebService 实现在线双向翻译
>先了解一下Web Service的基本概念: Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传 ...
- Cotex-M3内核STM32F10XX系列时钟及其配置方法
一.背景 最近做个项目,需要使用STM32,还是以前一样的观点,时钟就是MCU心脏,供血即时钟频率输出,想要弄明白一个MCU,时钟是一个非常好的切入点.言归正传,网上已经有太多大神详述过STM32的详 ...
- HTML5 video 视频标签 常用属性
最近在做手机端的 h5 页面的视频直播功能,用到了 Video 标签.其常用的属性有以下几个: src.poster.preload.autoplay.loop.controls.width.heig ...