【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装

本篇文章主要分析,这个代码是Dragonbones示例场景ReplaceSlotDisplay.unity的内容。获得途径: Dragonbones官网



using UnityEngine;
using System.Collections;
using DragonBones;

[RequireComponent(typeof(UnityArmatureComponent))]
public class ReplaceSlotDisplay : MonoBehaviour
{
    //定义一个整型变量
    //初始化播放动画的索引数值 为-1
    private int _displayIndex = -1;

    //定义一个字符串数值,用于存放要使用的字符串
    private string[] _replaceDisplays = {
        // Replace normal display.
        "display0002", "display0003", "display0004", "display0005", "display0006", "display0007", "display0008", "display0009", "display0010",
        // Replace mesh display.
        "meshA", "meshB", "mesh"
    };

    //3种mesh图片的名字,9种display图片的名字

    //定义一个私有对象组件为UnityArmatureComponent的变量名字为_armatureComponent使其值为空

    //UnityArmatureComponent组件是DragonBones在Unity中调用的基础组建,使其正常运行必须的

    private UnityArmatureComponent _armatureComponent = null;

    // Use this for initialization用于初始化数据 
    void Start()
    {
        _armatureComponent = this.GetComponent();//获得在上面定义的变量为 这个.CS文件挂的UAC组件,方便下面代码的调用
        _armatureComponent.animation.timeScale = 0.1f;//DB的动画的播放时间为原来的十分之一
        _armatureComponent.animation.Play();//使其动画播放
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))//判断是否鼠标左键点击 
        {
            _replaceDisplay();//调用这个名字的函数_replaceDisplay();
        }
    }

    private void _replaceDisplay()
    {

        //获得播放动画的索引数值 = 自加1 取余 _replaceDisplays这个字符串数值的长度(12)
        //使得这个 索引值 永远不会取到这个字符串长度以外的值
        //并且 每次调用这个_replaceDisplay()函数都会自己自动+1,并且调用下一个字符串的值
        _displayIndex = (_displayIndex + 1) % _replaceDisplays.Length;

        var replaceDisplayName = _replaceDisplays[_displayIndex];
        //定义一个变量
        //使得这个变量的值为 字符串数组的 字符串名字
        //这个索引数值就体现于此
        if (replaceDisplayName.IndexOf("mesh") >= 0) // Replace mesh display.
        {
            switch (replaceDisplayName)
            {
                case "meshA":
                    // Normal to mesh.
                    //ReplaceSlotDisplay函数调用的
                    //工程名字,骨架名字,被替换的图片名字,替换图片的名字,被替换的骨架骨骼点的名字(slot)
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyMesh",
                        "meshA",
                        "weapon_1004_1",
                        _armatureComponent.armature.GetSlot("weapon")
                    );
                    // Replace mesh texture. 
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyDisplay",
                        "ball",
                        "display0002",
                        _armatureComponent.armature.GetSlot("mesh")
                    );
                    break;

                case "meshB":
                    // Normal to mesh.
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyMesh",
                        "meshB",
                        "weapon_1004_1",
                        _armatureComponent.armature.GetSlot("weapon")
                    );
                    // Replace mesh texture. 
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyDisplay",
                        "ball",
                        "display0003",
                        _armatureComponent.armature.GetSlot("mesh")
                    );
                    break;

                case "mesh":
                    // Back to normal.
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyMesh",
                        "mesh",
                        "weapon_1004_1",
                        _armatureComponent.armature.GetSlot("weapon")
                    );
                    // Replace mesh texture. 
                    UnityFactory.factory.ReplaceSlotDisplay(
                        "ReplaceSlotDisplay",
                        "MyDisplay",
                        "ball",
                        "display0005",
                        _armatureComponent.armature.GetSlot("mesh")
                    );
                    break;
            }
        }
        else // Replace normal display.
        {
            UnityFactory.factory.ReplaceSlotDisplay(
                "ReplaceSlotDisplay",
                "MyDisplay",
                "ball",
                replaceDisplayName,
                _armatureComponent.armature.GetSlot("ball")
            );
        }
    }
}






【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第1张图片 【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第2张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第3张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第4张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第5张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第6张图片

图片来源:官方文档

工程名字,骨架名字,被替换的图片名字,替换图片的名字,被替换的骨架骨骼点的名字(slot)

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第7张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第8张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第9张图片

【Unity&Dragonbones】(代码分析)ReplaceSlotDisplay场景替换骨骼换装_第10张图片

1.工程名字
2.骨架名字
3.要替换的插槽名字(或图层名)
4.要替换的图片名字
5.被替换的插槽实例

前四个参数可以理解为是一个文件夹路径

要替换的资源位置(1/2/3/4):工程名字/骨架名字/插槽名字/图片名字
被替换的插槽实例(5)

 
  

你可能感兴趣的:(Unity,DragonBones,像素角色,人物骨骼,DragonBones问题,DragonBones官方示例,代码分析)