Unity3d 换装 之 模型动画分离
在手游中换装成了越来越不可缺的一个功能,毫无疑问各式各样的时装为游戏增添了不同的色彩。
对于2D手游,或许是更换对应的序列帧,也或许是如同3D手游一般,更换模型动画。
对于游戏中的人物,一般分为头、上身、下身、武器四大部分就可以了。所以在游戏中,我们把这四部分单独做四个模型动画,然后动态拼接为一个整体,达到换装的效果。
然后根据动画制作人员的喜好 又有两种方式来拼接:
1、每个身体部位自带动画数据
2、每个身体部位不带动画数据,动画数据单独提取出来
我们这里介绍第二种。
对于我们这种每一个动作的单独一个动作数据的方式,要怎么拼合到一个动画数据。Unity官方文档有介绍 - 分割动画
- http://game.ceeger.com/Manual/Splittinganimations.html
来看我们实际项目中的Project视图:
把每一个动作的动画数据都单独提取出来,然后汇总到warrior这一个文件中。
让我们来看看如何加载这些动画数据和各个部位到游戏中。
把四个部位的模型拖到Scene中,可以看到拼成了一个完整的人物
但是没有动作效果,因为这些只是模型骨头,但是没有动作数据,从右边的红框就看出来。
所以我们需要把动作数据加入到模型中。
点击右边的小圆点,在弹出的动画列表中选择动画,比如我选择的 run ,为四个部位的模型都选择run。再运行,这是就有了动作。我们的主角在跑动。
下面让我们通过代码来把动作和模型数据加载进来。
首先加载进来模型
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class LoadTest : MonoBehaviour {
- // Use this for initialization
- void Start () {
- GameObject head = Instantiate(Resources.Load("anim/character/warrior/fashion/head_1")) as GameObject;
- GameObject jack = Instantiate(Resources.Load("anim/character/warrior/fashion/jacket_1")) as GameObject;
- GameObject pant = Instantiate(Resources.Load("anim/character/warrior/fashion/pants_1")) as GameObject;
- GameObject weapon = Instantiate(Resources.Load("anim/character/warrior/fashion/warrior_10l")) as GameObject;
- }
- // Update is called once per frame
- void Update () {
- }
- }
然后加载进来动画数据:
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class LoadTest : MonoBehaviour {
- // Use this for initialization
- void Start () {
- //加载模型;
- GameObject head = Instantiate(Resources.Load("anim/character/warrior/fashion/head_1")) as GameObject;
- GameObject jack = Instantiate(Resources.Load("anim/character/warrior/fashion/jacket_1")) as GameObject;
- GameObject pant = Instantiate(Resources.Load("anim/character/warrior/fashion/pants_1")) as GameObject;
- GameObject weapon = Instantiate(Resources.Load("anim/character/warrior/fashion/warrior_10l")) as GameObject;
- //加载动作数据;
- Animation mation = Resources.Load("anim/character/warrior/warrior", typeof(Animation)) as Animation;
- //获取所有的动作;
- List<string> animList = new List<string>();
- foreach (AnimationState state in mation)
- {
- Debug.Log(state.name);
- animList.Add(state.name);
- //添加到四个部位;
- head.animation.AddClip(mation.GetClip(state.name),state.name);
- jack.animation.AddClip(mation.GetClip(state.name), state.name);
- pant.animation.AddClip(mation.GetClip(state.name), state.name);
- weapon.animation.AddClip(mation.GetClip(state.name), state.name);
- }
- head.animation.Play("run");
- jack.animation.Play("run");
- pant.animation.Play("run");
- weapon.animation.Play("run");
- }
- // Update is called once per frame
- void Update () {
- }
- }
并且播放run 这个动作。
来看看效果
我们的主角就这样跑起来了。
Unity3d 换装 之 模型动画分离的更多相关文章
- Unity3d 换装Avatar系统
原理就是用新造的部件和角色的骨骼进行重新对接. demo的使用方法: PartIdx设置要换那个部件[0,4],一共5个部件 EquipIdx设置要更换部件的装备索引[0,1],具体看我的Change ...
- WPF案例 (三) 模拟QQ“快速换装"界面
原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...
- 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】3D角色换装++ Advance
http://www.cnblogs.com/dosomething/archive/2012/12/15/2818897.html 本文在之前的文章Unity3D角色换装的原理 基础上做一个补充 给 ...
- Unity3D教程:换装方法
http://www.manew.com/4136.html 游戏内的角色,能够像纸娃娃换装那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能:一般而言,我们建好的 3D 模型,如果要将其中 ...
- 浅谈角色换装功能--Unity简单例子实现
在前置篇中,基本上梳理了一下换装功能背后涉及到的美术工作流.但程序员嘛,功能终归是要落到代码上的.本文中会结合Unity提供的API及之前提到的内容来实现一个简单的换装功能.效果如下: (图1:最终效 ...
- Unity动态换装之Spine换装
注:转载请注明转载,并附原链接 http://www.cnblogs.com/liaoguipeng/p/5867510.html 燕双飞情侣 一.动态换装原理 换装,无非就是对模型的网格,或者贴图进 ...
- 【AS3 Coder】任务六:人物换装(纸娃娃)系统的制作
使用框架:AS3(Flash Professional CS5.0及更高版本 + Flash Buider)任务描述:了解人物换装系统的制作原理难度系数:2 本章源码下载:http://www.iam ...
随机推荐
- 洛谷P2692 覆盖 题解
题目传送门 这道题一开始想使用二维的bool型数组来存,最后统计.但看到数据范围... 所以就改用两个bool型数组(一维),分别储存横.列,最后将横.列面积求出来,再减去重复算的面积(横的个数*列的 ...
- IEEEXtreme 10.0 - Game of Stones
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Game of Stones 题目来源 第10届IEEE极限编程大赛 https://www.hackerr ...
- Java经典设计模式之七大结构型模式
转载: Java经典设计模式之七大结构型模式 博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以 ...
- 《java虚拟机》----线程安全和锁优化
No1: 线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这 ...
- LCA:Tarjan算法实现
本博文转自http://www.cnblogs.com/JVxie/p/4854719.html,转载请注明出处 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有 ...
- zookpeer应用和zkclient实践
分布式 zkclient 排它锁 在需要获取排它锁时,通过调用create()接口,创建临时子节点.zk会保证在所有客户端中,只有一个会创建成功,从而获取锁. 其他客户端注册该节点的变更watch监听 ...
- JSP中的9大内置对象四大域与servlet里的三大域
九大内置对象 隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequ ...
- Unity Shader 之 uv动画
Unity 动画 Unity Shader 内置时间变量 引入时间变量 名称 类型 描述 _Time float4 t是自该场景加载开始所经过的时间,4个分量分别是(t/20, t, 2t, 3t) ...
- Lisp em SCU - 4490 (强大的map用法)
Time Limit: 1000 MS Memory Limit: 131072 K Description There are two lists and they may be intersect ...
- FastReport.Net使用:[30]对话框使用
使用对话框需要知道的地方 1.按钮的DialogResult属性. 假如DialogResult属性值为OK的按钮被点击,报表将会展现后面的对话框或者报表页:如果属性值为None,则停留在当前窗体: ...