private void Render(Live2DViewerConfig c, Live2DViewerConfigChangeType t)
    {
        switch (t)
        {
        case Live2DViewerConfigChangeType.RootFolder:
        case Live2DViewerConfigChangeType.Model:
            rootFolderPathText.text = c.rootFolder;
            if (config.models.Length > 0)
            {
                var current = config.currentModel;
                currentModelText.text = String.Format("{0} ({1}/{2})", current.name, config.currentModelIndex + 1, config.models.Length);
            }
            else
            {
                currentModelText.text = "未加载";
            }
            break;

        case Live2DViewerConfigChangeType.LoopMotion:
            loopMotionToggle.isOn = c.loopMotion;
            break;

        case Live2DViewerConfigChangeType.Background:
            if (String.IsNullOrEmpty(config.backgroundTexturePath))
            {
                backgroundPathText.text = "未选择";
            }
            else
            {
                backgroundPathText.text      = config.backgroundTexturePath;
                builtinBackgroundToggle.isOn = false;
            }
            break;
        }
    }
    public void OnConfigChanged(Live2DViewerConfig c, Live2DViewerConfigChangeType t)
    {
        config = c;
        switch (t)
        {
        case Live2DViewerConfigChangeType.RootFolder:
        case Live2DViewerConfigChangeType.Model:
            if (config.models.Length > 0)
            {
                var current = config.currentModel;
                modelComponent.LoadFromFiles(current.mocFile, current.textureFiles);
                if (current.parts == null || current.parts.Length == 0)
                {
                    current.parts = modelComponent.LoadParts();
                }
                else
                {
                    modelComponent.SetParts(current.parts);
                }

                motionsComponent.LoadFromFile(current.motionFiles);
            }
            else
            {
                modelComponent.ReleaseModel();
                motionsComponent.ReleaseMotions();
            }
            expComponent.ReleaseExpression();
            cameraResetAction.Perform();
            UpdateIndicator();
            break;

        case Live2DViewerConfigChangeType.Motion:
            motionsComponent.PlayMotion(config.currentModel.currentMotionIndex);
            break;

        case Live2DViewerConfigChangeType.Expression:
            expComponent.LoadFromFile(config.currentModel.expressionFiles[config.currentModel.currentExpressionIndex]);
            break;

        case Live2DViewerConfigChangeType.LoopMotion:
            motionsComponent.loop = config.loopMotion;
            break;

        case Live2DViewerConfigChangeType.Parts:
            modelComponent.SetParts(config.currentModel.parts);
            break;

        case Live2DViewerConfigChangeType.Background:
            backgroundComponent.LoadFromFile(config.backgroundTexturePath);
            break;
        }
    }
 private void TriggerChanges(Live2DViewerConfigChangeType t)
 {
     onConfigChanged.Invoke(config, t);
 }