Unity学习 - 2D骨骼1

准备 包管理器安装2d骨骼相关的包 选择目标精灵图打开Sprite Editor窗口 切换到骨骼编辑器 绑定 刷权重 别忘了应用!!

准备

  1. 包管理器安装2d骨骼相关的包

    1. image.png
  2. 选择目标精灵图打开Sprite Editor窗口

    1. image.png
  3. 切换到骨骼编辑器

    1. image.png
  4. 绑定

  5. 刷权重

  6. 别忘了应用!!

  7. 给目标精灵图添加Sprite skin组件然后创建骨骼

  8. 按需k帧摆动作录动画

窗口说明

总览

image.png

骨骼相关

image.png

蒙皮相关

image.png

权重相关

image.png

图集跟单张图片类似给那个部分加骨骼就双击选择那部分就行了

2D反向动力学

([[反向动力学IK]])

在骨骼动画中,构建骨骼的方法被称为正向动力学
即子骨骼(关节)的位置根据父骨骼(关节)的旋转而改变

以人体为例当我们抬起手臂时,是肩部关节带动的整个手臂的运动,用父子骨骼理解的话就是父带动了子
而IK全称是Inverse kinematics即反向动力学与正向动力学恰恰相反
即子骨骼(关节)末端的位置改变会带动自己以及自己的父骨骼(关节)旋转

以人体为例当我们拿起一个杯子的时候是用手掌去拿,以杯子为参照物,我们移动杯子的位置,手臂会随着杯子一起移动
用父子骨骼理解的话就是子带动了父

IK的用途

//1.瞄准功能
//2.头部朝向功能
//3.拾取物品功能
//等等有指向性的功能时 我们都可以通过IK来达到目的
//最大的作用,可以方便我们进行动画制作

使用

记得给目标骨骼末端添加个空物体,也是下面effector组件的IK点位置

  1. 给目标精灵图添加IK Manager组件
    1. image.png
  2. 选择IK解算器后点生成会自己创建给空物体并添加相应组件
    1. image.png

换装

相关组件和数据文件

SpriteLibrary: 精灵资料库,确定类别分组信息
SpriteResolver一精灵解算器,用于确定部位类别和使的图片//一个数据文件
SpriteLibraryAsset==(数据文件)==: 精灵资料库资源,具体记录类别分组信息的文件

同一个文件中的换装资源

  1. 在ps制作美术资源时,将所有换装资源都摆在相应位置
  2. 导入改资源(注意是否导入隐藏图层)
  3. 每个部位关联的骨骼要明确设置
  4. 为同一部位的不同准备分组.

示例

  1. 安装这个库image.png

  2. 导入psd资源(用刚刚安装的包提供的导入器来导入)image.png

  3. 绑定然后刷权重image.pngimage.png

  4. 新建一个空对象并给添加Sprite Library组件image.png

  5. 创建Sprite Library Assets数据文件添加分类跟标签image.png

  6. 在要换装的部位添加Sprite Resolver组件image.png

  7. 然后就行了

代码修改流程

1.获取各部位的spriteResolver
2.使用spriteResolver的API进行装备切换
Getcategory()获取当前部位默认的类别名
SetcategoryAndLabel 设置当前部位想要切换的图片信息

private SpriteResolver[] componentsInChildren;  
// Start is called before the first frame update  
void Start()  
{  
    componentsInChildren = GetComponentsInChildren<SpriteResolver>();  
}  
  
// Update is called once per frame  
void Update()  
{  
    if (Input.GetKeyDown(KeyCode.Alpha1))  
    {        
	    changeBodyEquipment(1);  
    }    
    if (Input.GetKeyDown(KeyCode.Alpha2))  
    {        
	    changeBodyEquipment(2);  
    }    
    if (Input.GetKeyDown(KeyCode.Alpha3))  
    {        
	    changeBodyEquipment(3);  
    }}  
  
public void changeBodyEquipment(int i)  
{  
    foreach (SpriteResolver componentsInChild in componentsInChildren)  
    {        if (componentsInChild.GetCategory().Equals("bodyEquipment"))  
        {            switch (i)  
            {                case 1: componentsInChild.SetCategoryAndLabel("bodyEquipment", "pants");  
                    break;  
                case 2: componentsInChild.SetCategoryAndLabel("bodyEquipment", "tshirt1");  
                    break;  
                case 3: componentsInChild.SetCategoryAndLabel("bodyEquipment", "tshirt2");  
                    break;  
            }        
		}    
	}
}

不同psd文件的换装

保证各部位在ps文件中的位置对称
基础部位选择性隐藏
不同文件的骨骼信息必须统一,所以采用复制粘贴的方法

其余流程跟单一文件的一样
1.首先创建spriteLibraryAsset数据文件
2.为跟对象添加spriteLibrary并关联数据文件
3.为换装部位关联spriteResolver

同一文件和不同文件的区别

换装较少的游戏 比如只有面部表情更换 可以使用同一psb文件方案
换装较多的游戏 比如各部位都有n种装备 可以使用不同psb文件方案
不同psb文件 拓展性更强
一句话根据需求而定!

LICENSED UNDER CC BY-NC-SA 4.0
评论