在手游中换装成了越来越不可缺的一个功能,毫无疑问各式各样的时装为游戏增添了不同的色彩。

对于2D手游,或许是更换对应的序列帧,也或许是如同3D手游一般,更换模型动画。

对于游戏中的人物,一般分为头、上身、下身、武器四大部分就可以了。所以在游戏中,我们把这四部分单独做四个模型动画,然后动态拼接为一个整体,达到换装的效果。

然后根据动画制作人员的喜好 又有两种方式来拼接:

1、每个身体部位自带动画数据

2、每个身体部位不带动画数据,动画数据单独提取出来

我们这里介绍第二种。

对于我们这种每一个动作的单独一个动作数据的方式,要怎么拼合到一个动画数据。Unity官方文档有介绍 - 分割动画

  1. http://game.ceeger.com/Manual/Splittinganimations.html

来看我们实际项目中的Project视图:

把每一个动作的动画数据都单独提取出来,然后汇总到warrior这一个文件中。

让我们来看看如何加载这些动画数据和各个部位到游戏中。

把四个部位的模型拖到Scene中,可以看到拼成了一个完整的人物

但是没有动作效果,因为这些只是模型骨头,但是没有动作数据,从右边的红框就看出来。

所以我们需要把动作数据加入到模型中。

点击右边的小圆点,在弹出的动画列表中选择动画,比如我选择的 run ,为四个部位的模型都选择run。再运行,这是就有了动作。我们的主角在跑动。

下面让我们通过代码来把动作和模型数据加载进来。

首先加载进来模型

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class LoadTest : MonoBehaviour {
  5. // Use this for initialization
  6. void Start () {
  7. GameObject head = Instantiate(Resources.Load("anim/character/warrior/fashion/head_1")) as GameObject;
  8. GameObject jack = Instantiate(Resources.Load("anim/character/warrior/fashion/jacket_1")) as GameObject;
  9. GameObject pant = Instantiate(Resources.Load("anim/character/warrior/fashion/pants_1")) as GameObject;
  10. GameObject weapon = Instantiate(Resources.Load("anim/character/warrior/fashion/warrior_10l")) as GameObject;
  11. }
  12. // Update is called once per frame
  13. void Update () {
  14. }
  15. }

然后加载进来动画数据:

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class LoadTest : MonoBehaviour {
  5. // Use this for initialization
  6. void Start () {
  7. //加载模型;
  8. GameObject head = Instantiate(Resources.Load("anim/character/warrior/fashion/head_1")) as GameObject;
  9. GameObject jack = Instantiate(Resources.Load("anim/character/warrior/fashion/jacket_1")) as GameObject;
  10. GameObject pant = Instantiate(Resources.Load("anim/character/warrior/fashion/pants_1")) as GameObject;
  11. GameObject weapon = Instantiate(Resources.Load("anim/character/warrior/fashion/warrior_10l")) as GameObject;
  12. //加载动作数据;
  13. Animation mation = Resources.Load("anim/character/warrior/warrior", typeof(Animation)) as Animation;
  14. //获取所有的动作;
  15. List<string> animList = new List<string>();
  16. foreach (AnimationState state in mation)
  17. {
  18. Debug.Log(state.name);
  19. animList.Add(state.name);
  20. //添加到四个部位;
  21. head.animation.AddClip(mation.GetClip(state.name),state.name);
  22. jack.animation.AddClip(mation.GetClip(state.name), state.name);
  23. pant.animation.AddClip(mation.GetClip(state.name), state.name);
  24. weapon.animation.AddClip(mation.GetClip(state.name), state.name);
  25. }
  26. head.animation.Play("run");
  27. jack.animation.Play("run");
  28. pant.animation.Play("run");
  29. weapon.animation.Play("run");
  30. }
  31. // Update is called once per frame
  32. void Update () {
  33. }
  34. }

并且播放run 这个动作。

来看看效果

我们的主角就这样跑起来了。

Unity3d 换装 之 模型动画分离的更多相关文章

  1. Unity3d 换装Avatar系统

    原理就是用新造的部件和角色的骨骼进行重新对接. demo的使用方法: PartIdx设置要换那个部件[0,4],一共5个部件 EquipIdx设置要更换部件的装备索引[0,1],具体看我的Change ...

  2. WPF案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

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

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

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

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

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

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

  6. Unity3D教程:换装方法

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

  7. 浅谈角色换装功能--Unity简单例子实现

    在前置篇中,基本上梳理了一下换装功能背后涉及到的美术工作流.但程序员嘛,功能终归是要落到代码上的.本文中会结合Unity提供的API及之前提到的内容来实现一个简单的换装功能.效果如下: (图1:最终效 ...

  8. Unity动态换装之Spine换装

    注:转载请注明转载,并附原链接 http://www.cnblogs.com/liaoguipeng/p/5867510.html 燕双飞情侣 一.动态换装原理 换装,无非就是对模型的网格,或者贴图进 ...

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

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

随机推荐

  1. CSU 1416 Practical Number

    原题链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1416 结论题,具体判断方法请点击这个网址. 筛素数是肯定的,但一开始定的范围太大了,想当 ...

  2. Python 3.6安装教程

    0x01 安装Python 1.1 说明 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的. 本教程安装的是python-3.6.1-amd64版本. Python官 ...

  3. day1作业二:多级菜单

        作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...

  4. 借助Visual Studio Code提高基于ActionScript的LayaAir HTML5游戏的调试效率

    借助Visual Studio Code提高基于ActionScript的LayaAir HTML5游戏的调试效率 使用Visual Studio Code(VS Code)调试的优势 借助VS Co ...

  5. thinkphp5.0 多层MVC

    ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成, ...

  6. pycharm的安装教程及大坑

    在根据网上的教程创建新工程后,发现不能调用第三方库,网上大多给的是print('hello world'),己适python解释器用的pycharm默认的也不能发现错误.后来浏览了一篇文章才恍然大悟, ...

  7. GeneXus项目启动

    使用GeneXus产品开发项目时,在开始,有一些属性我会经常改一下.我现在使用的GeneXus版本是GeneXus U3,由于在做手机应用的开发,所以一般使用最新的版本,老外那边差不多两个月会有一个u ...

  8. 使用抽象bean

    定义抽象类Abstract=“true”抽象bean不能实例化,一个类可以创建多个bean. 抽象bean的配置和一般bean的配置基本一样只是在增加了Abstract=“true”抽象bean是一个 ...

  9. elasticsearch中ik词库配置远程热加载

    1. 修改 IKAnalyzer.cfg.xml 配置文件中的<entry key="remote_ext_dict">http://127.0.0.1/xxx.txt ...

  10. 【CF contest/792/problem/E】

    E. Colored Balls time limit per test 1 second memory limit per test 256 megabytes input standard inp ...