U3L16-1-e——2D Animation 换装

同一文件和 不同文件 制作换装资源两种方案

换装有两种情况,一个是在同一个文件内,一个是不在同一文件内

换装较少的游戏 比如只有面部表情更换 可以使用同一psb文件方案
换装较多的游戏 比如各部位有n种装备 可以使用不同psb文件方案
不同psb文件 拓展性更强

一切根据需求而定


换装资源在同一个文件中

本章代码关键字

1
2
3
4
UnityEngine.U2D.Animation                //SpriteResolver所需要的命名空间
SpriteResolver //精灵解算器类
spriteResolver.GetCategory() //获取当前部位默认的类别名
spriteResolver.SetCategoryAndLabel(,) //设置当前部位想要切换的图片信息

如何在同一个psb文件中制作换装资源

1.在ps中制作美术资源时,将一个游戏对象的所有换装资源都摆放好位置
2.当我们导入该资源时,要注意是否导入隐藏的图层

编辑换装资源的骨骼信息以及分组类别

注意事项:
每个部位 关联的骨骼要明确设置
为同一个部位的不同装备分组

注意!!!2021版Unity以后,Skinning Editor 右侧面板的 Sprite 不能再进行分组因此编辑换装资源的骨骼信息以及分组类别和如何换装的部分较课上发生了较大的变化,下面会重写如何换装的部分

如何换装

两个关键组件
Sprite Library —— 精灵资料库,确定类别分组信息
Sprite Resolver —— 精灵解算器,用于确定部位类别和使用的图片
一个数据文件
Sprite Library Asset —— 精灵资料库资源,具体记录类别分组信息的文件

2021版Unity的 编辑分组类别 以及 换装方法

如上文所述,2021版Unity以后,Skinning Editor 右侧面板的 Sprite 不能再进行分组
因此 编辑换装资源的骨骼信息以及分组类别 和 如何换装 较课上所讲内容 发生了较大的变化

这里重写一次 编辑分组类别 和 换装 的具体流程

  1. 编辑分组类别

    首先,需要完成PSB文件下所有小图的骨骼绑定,每个部位所关联的骨骼要明确设置
    完成以上步骤,保存并退出
    在Project面板下右键新建一个Sprite Library Asset(精灵资料库资源)文件,进行手动分组

    ​​image​​

    • 首先,为每个要换装的部位都创建一个组(按右下角的 + )并为其命名
    • 然后将每个部位的各个小图拖入对应的组内
    • 按Apply保存

    为同一个部位的不同装备分完组后,就可以换装

  2. 换装方法

    由于PSB文件内无法内置Sprite Library Asset文件,因此换装的流程相对于课上所讲的内容会更繁琐一些

    首先,在场景上创建一个空物体作为根对象,将PSB文件拖到空物体下作为子对象
    然后,在空物体或者PSB父对象上添加Sprite Library(精灵资料库),并将上一步完成的Sprite Library Asset文件拖进去(如下图)
    image

    完成上一步后,将所有要换装的部位下的多余贴图全部失活,只留一个贴图 (如下图所示)
    image

    接下来,对所有要换装的部位下唯一激活的贴图添加Sprite Resolver(精灵解算器),并打开SpriteSkin的Auto Rebind(以防止出现渲染错误)
    ​​image

    对所有要换装的部位完成以上步骤后,换装部分就完成了,之后可以在代码里调用他们

代码换装

获取各部位的SpriteResolver(需要引用命名空间)

1
2
3
4
5
6
7
using UnityEngine;
using UnityEngine.U2D.Animation;

public class Lesson40 : MonoBehaviour
{
public SpriteResolver spriteResolver;
}

使用SpriteResolver的API进行装备切换

获取当前部位默认的类别名

1
spriteResolver.GetCategory()

设置当前部位想要切换的图片信息

1
spriteResolver.SetCategoryAndLabel(spriteResolver.GetCategory(), "CASK 3");

利用API获取所有的部位,并通过封装方便切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D.Animation;

public class Lesson40 : MonoBehaviour
{
private Dictionary<string, SpriteResolver> equipDic = new Dictionary<string, SpriteResolver>();

void Start()
{
SpriteResolver[] srs = this.GetComponentsInChildren<SpriteResolver>();
for (int i = 0; i < srs.Length; i++)
{
equipDic.Add(srs[i].GetCategory(), srs[i]);
}

ChangeEquip("cask", "CASK 4");
}

public void ChangeEquip(string category, string equipName)
{
if (equipDic.ContainsKey(category))
{
equipDic[category].SetCategoryAndLabel(category, equipName);
}
}
}

换装资源在不同文件中

如何在不同psb文件中制作换装资源

  1. 保证各部位在PS文件中的统一
  2. 基础部位可选择性隐藏

编辑换装资源的骨骼信息

注意事项:
不同文件的骨骼信息必须统一,所以我们直接使用复制的方式

手动添加关键组件和数据文件

  1. 首先创建SpriteLibraryAsset数据文件
  2. 为跟对象添加SpriteLibrary并关联数据文件
  3. 为换装部位关联SpriteResolver

步骤直接参照同一文件换装下的2021版换装方法即可,
区别在于不同文件的不同部位都关联到一个SpriteLibraryAsset数据文件内,如果PSB文件要换装的部位只有一个Sprite还可以省去隐藏其他Sprite的步骤****但是仍然要打开Sprite Skin的Auto Behind!否则可能出现渲染问题(错位或者撕裂)

代码控制

和上节课的相应内容完全一致