コード例 #1
0
        private void CreateConfigurator(Model.NodeData node, Type importerType)
        {
            var configFileGUID = ImporterConfiguratorUtility.FindSettingTemplateFileGUID(importerType);
            var configFilePath = AssetDatabase.GUIDToAssetPath(configFileGUID);

            if (string.IsNullOrEmpty(configFilePath))
            {
                throw new NodeException(node.Name + " :Setting template file not found. Incoming file type must be properly configured with CustomImporterConfigurator.", node);
            }

            var samplingDirectoryPath = FileUtility.PathCombine(Model.Settings.Path.SavedSettingsPath, "ImportSettings", node.Id);

            if (!Directory.Exists(samplingDirectoryPath))
            {
                Directory.CreateDirectory(samplingDirectoryPath);
            }

            IAssetImporterConfigurator configurator = ImporterConfiguratorUtility.CreateConfigurator(importerType);

            if (configurator == null)
            {
                throw new NodeException(node.Name + " :Failed to create importer configurator for " + importerType.FullName, node);
            }
            m_configuratorInstance.SetDefaultValue(configurator);

            var targetFilePath = FileUtility.PathCombine(samplingDirectoryPath, Path.GetFileName(configFilePath));

            FileUtility.CopyFile(configFilePath, targetFilePath);

            AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive);

            m_referenceAssetGuid   = AssetDatabase.AssetPathToGUID(targetFilePath);
            m_configureImporterFor = null;
        }
コード例 #2
0
        public static Type FindFilterTypeFromGUIName(string guiName)
        {
            if (guiName == Model.Settings.DEFAULT_FILTER_KEYTYPE)
            {
                return(null); // or UnityEngine.Object ?
            }

            // since PrefabImporter is internal class and can't access
            if (guiName == kPREFAB_KEY_NAME)
            {
                if (s_prefabImporterClass == null)
                {
                    s_prefabImporterClass = Assembly.Load("UnityEditor").GetType(kPREFAB_IMPORTER_CLASS);
                }

                return(s_prefabImporterClass);
            }

            var typemap = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();

            if (typemap.ContainsKey(guiName))
            {
                return(typemap [guiName]);
            }

            if (s_defaultAssetFilterGUITypeMap.ContainsKey(guiName))
            {
                return(s_defaultAssetFilterGUITypeMap [guiName]);
            }

            return(null);
        }
コード例 #3
0
        public static string FindGUINameFromType(Type t)
        {
            UnityEngine.Assertions.Assert.IsNotNull(t);

            // since PrefabImporter is internal class and can't access
            if (t.FullName == kPREFAB_IMPORTER_CLASS)
            {
                return(kPREFAB_KEY_NAME);
            }

            var typemap = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();

            var elements = typemap.Where(v => v.Value == t);

            if (elements.Any())
            {
                return(elements.First().Key);
            }

            var elements2 = s_defaultAssetFilterGUITypeMap.Where(v => v.Value == t);

            if (elements2.Any())
            {
                return(elements2.First().Key);
            }

            return(Model.Settings.DEFAULT_FILTER_KEYTYPE);
        }
コード例 #4
0
        public static List <string> GetFilterGUINames()
        {
            if (s_filterKeyTypeList == null)
            {
                var typemap = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();

                var keyList = new List <string> ();

                keyList.Add(Model.Settings.DEFAULT_FILTER_KEYTYPE);
                keyList.AddRange(typemap.Keys);
                keyList.AddRange(s_defaultAssetFilterGUITypeMap.Keys);

                s_filterKeyTypeList = keyList;
            }
            return(s_filterKeyTypeList);
        }
コード例 #5
0
        public static Type FindFilterTypeFromGUIName(string guiName)
        {
            if (guiName == Model.Settings.DEFAULT_FILTER_KEYTYPE)
            {
                return(null); // or UnityEngine.Object ?
            }

            var typemap = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();

            if (typemap.ContainsKey(guiName))
            {
                return(typemap [guiName]);
            }
            if (s_defaultAssetFilterGUITypeMap.ContainsKey(guiName))
            {
                return(s_defaultAssetFilterGUITypeMap [guiName]);
            }

            return(null);
        }
コード例 #6
0
        public static string FindGUINameFromType(Type t)
        {
            Assertions.Assert.IsNotNull(t);

            var typemap = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();

            var elements = typemap.Where(v => v.Value == t);

            if (elements.Any())
            {
                return(elements.First().Key);
            }

            var elements2 = s_defaultAssetFilterGUITypeMap.Where(v => v.Value == t);

            if (elements2.Any())
            {
                return(elements2.First().Key);
            }

            return(Model.Settings.DEFAULT_FILTER_KEYTYPE);
        }
コード例 #7
0
        private void ValidateInputSetting(
            Model.NodeData node,
            BuildTarget target,
            IEnumerable <PerformGraph.AssetGroups> incoming)
        {
            var  firstAsset             = AssetReferenceUtility.FindFirstIncomingAssetReference(incoming);
            Type firstAssetImporterType = null;

            // check if first Asset has importer
            if (firstAsset != null)
            {
                firstAssetImporterType = firstAsset.importerType;
                if (firstAssetImporterType == null)
                {
                    throw new NodeException(string.Format("Incoming asset '{0}' does not have importer. (type={1}) Perhaps you want to use Modifier instead?",
                                                          firstAsset.fileNameAndExtension, firstAsset.assetType.FullName),
                                            "Add ScriptedImporter for this type of asset or replace this node to use Modifier.",
                                            node);
                }
            }

            // check if all incoming assets are the same asset types
            if (firstAssetImporterType != null)
            {
                foreach (var ag in incoming)
                {
                    foreach (var assets in ag.assetGroups.Values)
                    {
                        foreach (var a in assets)
                        {
                            if (a.importerType != firstAssetImporterType)
                            {
                                throw new NodeException(
                                          string.Format("ImportSetting expect {0}, but different type of incoming asset is found({1}, {2})", firstAssetImporterType.FullName, a.fileNameAndExtension, a.importerType),
                                          string.Format("Remove {0} from node input, or change this importer type.", a.fileName),
                                          node);
                            }
                        }
                    }
                }
            }

            // check if there is a valid reference asset
            if (!string.IsNullOrEmpty(m_referenceAssetGuid))
            {
                var referenceImporter = GetReferenceAssetImporter(node, false);

                if (referenceImporter == null)
                {
                    throw new NodeException("Reference importer not found.",
                                            "Configure reference importer from inspector", node);
                }
            }

            // check if there is a valid custom setting asset
            if (m_useCustomSettingAsset && CustomSettingAsset == null)
            {
                throw new NodeException("You must select custom setting asset.",
                                        "Select custom setting asset.", node);
            }

            // check if reference asset type matches with incoming asset types
            if (firstAssetImporterType != null)
            {
                Type targetType = GetReferenceAssetImporter(node, false).GetType();
                if (targetType != firstAssetImporterType)
                {
                    throw new NodeException(
                              string.Format("Incoming asset type is does not match with this ImportSetting (Expected type:{0}, Incoming type:{1}).", targetType.FullName, firstAssetImporterType.FullName),
                              string.Format("Remove {0} from incoming assets.", firstAsset.fileName), node);
                }
            }

            // check if there is valid configurator for this asset importer
            var importer = GetReferenceAssetImporter(node, true);

            if (importer != null)
            {
                var configuratorType = ImporterConfiguratorUtility.GetConfiguratorTypeFor(importer.GetType());
                if (configuratorType == null)
                {
                    throw new NodeException(
                              string.Format("Configurator for {0} not found.", importer.GetType().FullName),
                              string.Format("Add CustomAssetImporterConfigurator."),
                              node);
                }

                var c = m_configuratorInstance.Get <IAssetImporterConfigurator> (target);
                if (c == null)
                {
                    throw new NodeException("Failed to get configurator for " + importer.GetType().FullName,
                                            "You may need to reset this node.", node);
                }
            }
        }
コード例 #8
0
        public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged)
        {
            EditorGUILayout.HelpBox("Overwrite Import Setting: Overwrite import settings of incoming assets.", MessageType.Info);
            editor.UpdateNodeName(node);

            // prevent inspector flicking by new Editor changing active selction
            node.SetActive(true);

            using (new EditorGUILayout.VerticalScope()) {
                Type importerType = null;
                Type assetType    = null;

                var referenceImporter = GetReferenceAssetImporter(node.Data, false);
                if (referenceImporter != null)
                {
                    importerType = referenceImporter.GetType();
                    assetType    = TypeUtility.GetMainAssetTypeAtPath(AssetDatabase.GUIDToAssetPath(m_referenceAssetGuid));
                }
                else
                {
                    GUILayout.Space(10f);
                    using (new EditorGUILayout.VerticalScope(GUI.skin.box)) {
                        EditorGUILayout.HelpBox("Import setting type can be set by incoming asset, or you can specify by selecting.", MessageType.Info);
                        using (new EditorGUILayout.HorizontalScope()) {
                            EditorGUILayout.LabelField("Importer Type");
                            if (GUILayout.Button("", "Popup", GUILayout.MinWidth(150f)))
                            {
                                var menu = new GenericMenu();

                                var guiMap   = ImporterConfiguratorUtility.GetImporterConfiguratorGuiNameTypeMap();
                                var guiNames = guiMap.Keys.ToArray();

                                for (var i = 0; i < guiNames.Length; i++)
                                {
                                    var index = i;
                                    menu.AddItem(
                                        new GUIContent(guiNames [i]),
                                        false,
                                        () => {
                                        ResetConfig(node.Data);
                                        m_configureImporterFor = guiMap [guiNames [index]];
                                        // call Validate
                                        NodeGUIUtility.NodeEventHandler(new NodeEvent(NodeEvent.EventType.EVENT_NODE_UPDATED, node));
                                    }
                                        );
                                }
                                menu.ShowAsContext();
                            }
                        }
                    }
                    return;
                }

                if (importerType != null && assetType != null)
                {
                    GUILayout.Space(10f);
                    DoCustomAssetGUI(assetType, importerType, node, editor, onValueChanged);
                }

                // get reference importer again (enabling custom asset this time)
                referenceImporter = GetReferenceAssetImporter(node.Data, true);

                if (referenceImporter != null)
                {
                    var configurator = m_configuratorInstance.Get <IAssetImporterConfigurator> (editor.CurrentEditingGroup);
                    if (configurator != null)
                    {
                        GUILayout.Space(10f);

                        Action onChangedAction = () => {
                            using (new RecordUndoScope(string.Format("Change {0} Setting", node.Name), node)) {
                                m_configuratorInstance.Set(editor.CurrentEditingGroup, configurator);
                                onValueChanged();
                            }
                        };

                        configurator.OnInspectorGUI(referenceImporter, editor.CurrentEditingGroup, onChangedAction);
                    }

                    if (m_importerEditor == null)
                    {
                        m_importerEditor = Editor.CreateEditor(referenceImporter);
                    }
                }

                if (m_importerEditor != null)
                {
                    GUILayout.Space(10f);
                    GUILayout.Label(string.Format("Import Setting ({0})", importerType.Name));
                    m_importerEditor.OnInspectorGUI();
                }

                GUILayout.Space(40f);
                using (new EditorGUILayout.HorizontalScope(GUI.skin.box)) {
                    GUILayout.Space(4f);
                    EditorGUILayout.LabelField("Clear Saved Import Setting");

                    if (GUILayout.Button("Clear"))
                    {
                        if (EditorUtility.DisplayDialog("Clear Saved Import Setting",
                                                        string.Format("Do you want to reset saved import setting for \"{0}\"? This operation is not undoable.", node.Name), "OK", "Cancel"))
                        {
                            ResetConfig(node.Data);
                        }
                    }
                }
            }
        }