示例#1
0
        public IEnumerator SceneTest()
        {
            const string basePath = "Assets/UniEnum.Tests/Editor/Scenes";

            var sceneFiles = Directory.EnumerateFiles(basePath, "*.unity", SearchOption.AllDirectories)
                             .Select(v => new EditorBuildSettingsScene(v, true))
                             .ToArray();

            var setting = new GenerateSetting()
            {
                Namespace = "UniEnumEditorTests",
                OutputDir = "Assets/UniEnum.Tests/Editor/TestOutput",
            };

            AssetDatabase.DeleteAsset($"{setting.OutputDir}/SceneValues.Generated.cs");

            UnityConstantValuesGenerator.UpdateSceneValues(setting, sceneFiles);

            yield return(new RecompileScripts());

            Assert.AreEqual("UniEnumTest_100", SceneName.UniEnumTest_100);
            Assert.AreEqual("UniEnumTest_101", SceneName.UniEnumTest_101);
            Assert.AreEqual("UniEnumTest_102", SceneName.UniEnumTest_102);

            Assert.AreEqual(0, SceneId.UniEnumTest_100);
            Assert.AreEqual(1, SceneId.UniEnumTest_101);
            Assert.AreEqual(2, SceneId.UniEnumTest_102);

            Assert.AreEqual($"{basePath}/UniEnumTest_100.unity", ScenePath.UniEnumTest_100);
            Assert.AreEqual($"{basePath}/UniEnumTest_101.unity", ScenePath.UniEnumTest_101);
            Assert.AreEqual($"{basePath}/UniEnumTest_102.unity", ScenePath.UniEnumTest_102);
        }
示例#2
0
        public IEnumerator UnityConstantsTest()
        {
            var setting = new GenerateSetting()
            {
                Namespace = "UniEnumEditorTests",
                OutputDir = "Assets/UniEnum.Tests/Editor/TestOutput",
            };

            AssetDatabase.DeleteAsset($"{setting.OutputDir}/TagValues.Generated.cs");
            AssetDatabase.DeleteAsset($"{setting.OutputDir}/LayerValues.Generated.cs");
            AssetDatabase.DeleteAsset($"{setting.OutputDir}/SortingLayerValues.Generated.cs");

            UnityConstantValuesGenerator.UpdateUnityConstants(setting);
            yield return(new RecompileScripts());

            Assert.AreEqual("12@hoge -##A", TagName._12hogeA);

            Assert.AreEqual(17, (int)LayerId.アイウエオ);
            Assert.AreEqual((1 << 17), (int)LayerMaskValue.アイウエオ);

            Assert.AreEqual(21, (int)LayerId._123abcWXZ11);
            Assert.AreEqual((1 << 21), (int)LayerMaskValue._123abcWXZ11);

            Assert.AreEqual(SortingLayer.NameToID("Default"), SortingLayerId.Default);
        }
示例#3
0
        public IEnumerator SceneTest()
        {
            var sceneFiles = Directory.EnumerateFiles(SceneDirPath, "*.unity", SearchOption.AllDirectories)
                             .Select(v => new EditorBuildSettingsScene(v, true))
                             .ToArray();

            var setting = new GenerateSetting()
            {
                @namespace = "UniEnumEditorTests",
                outputDir  = OutputDirPath,
            };

            AssetDatabase.DeleteAsset($"{setting.outputDir}/SceneValues.Generated.cs");

            UnityConstantValuesGenerator.UpdateSceneValues(setting, sceneFiles);

            yield return(new RecompileScripts());

#if CHECK_GENERATE_CLASS
            Assert.AreEqual("UniEnumTest_100", SceneName.UniEnumTest_100);
            Assert.AreEqual("UniEnumTest_101", SceneName.UniEnumTest_101);
            Assert.AreEqual("UniEnumTest_102", SceneName.UniEnumTest_102);

            Assert.AreEqual(0, SceneId.UniEnumTest_100);
            Assert.AreEqual(1, SceneId.UniEnumTest_101);
            Assert.AreEqual(2, SceneId.UniEnumTest_102);

            Assert.AreEqual($"{SceneDirPath}/UniEnumTest_100.unity", ScenePath.UniEnumTest_100);
            Assert.AreEqual($"{SceneDirPath}/UniEnumTest_101.unity", ScenePath.UniEnumTest_101);
            Assert.AreEqual($"{SceneDirPath}/UniEnumTest_102.unity", ScenePath.UniEnumTest_102);
#endif
        }
示例#4
0
        public override void OnActivate(string searchContext, VisualElement rootElement)
        {
            base.OnActivate(searchContext, rootElement);

            var settings = UnityConstantsGeneratorSettings.Instance;

            _generateSetting = settings.generateSetting;
        }
示例#5
0
    private static void GenerateWithGroupRule(AddressableAssetSettings settings, GenerateSetting generateSetting, GroupRule groupRule)
    {
        AddressableAssetGroup oldGroup = settings.FindGroup(groupRule.GroupName);
        AddressableAssetGroup group;

        if (generateSetting.RecreateGroup)
        {
            if (oldGroup)
            {
                settings.RemoveGroup(oldGroup);
                oldGroup = null;
            }
            group = settings.CreateGroup(groupRule.GroupName, false, false, true, groupRule.SchemasToCopy);
        }
        else
        {
            if (oldGroup)
            {
                group = oldGroup;
            }
            else
            {
                group = settings.CreateGroup(groupRule.GroupName, false, false, true, groupRule.SchemasToCopy);
            }
        }

        if (generateSetting.ApplyAssetRule)
        {
            for (int iAssetRule = 0; iAssetRule < groupRule.AssetRules.Length; iAssetRule++)
            {
                AssetRule iterAssetRule = groupRule.AssetRules[iAssetRule];
                GenerateWithAssetRule(settings, generateSetting, group, groupRule, iterAssetRule);
            }
        }

        if (generateSetting.RemoveInvalidAsset)
        {
            RemoveInvalidAsset(group);
        }
    }
示例#6
0
    private static void GenerateWithAssetRule(AddressableAssetSettings settings, GenerateSetting generateSetting, AddressableAssetGroup group, GroupRule groupRule, AssetRule assetRule)
    {
        int    assetsIndexOf = Application.dataPath.LastIndexOf("Assets");
        string realPath      = Application.dataPath.Substring(0, assetsIndexOf) + assetRule.Path;

        if (!Directory.Exists(realPath))
        {
            Debug.LogError(string.Format("Path ({0}) of group ({1}) not exists", realPath, groupRule.GroupName));
            return;
        }
        DirectoryInfo directoryInfo = new DirectoryInfo(realPath);

        FileInfo[] files = directoryInfo.GetFiles("*.*", assetRule.IncludeChilder ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
        for (int iFile = 0; iFile < files.Length; iFile++)
        {
            FileInfo iterFile     = files[iFile];
            string   iterFileName = iterFile.Name.Substring(0, iterFile.Name.Length - iterFile.Extension.Length);
            // meta文件肯定是要忽略的
            if (iterFile.Extension == ".meta")
            {
                continue;
            }

            if (!Filter(assetRule.ExtensionFilterType, iterFile.Extension, assetRule.ExtensionFilters) ||
                !Filter(assetRule.FileNameFilterType, iterFileName, assetRule.FileNameFilters))
            {
                continue;
            }

            string iterAssetPath = iterFile.FullName.Substring(assetsIndexOf);
            string assetKey;
            switch (assetRule.AssetKeyType)
            {
            case AssetKeyType.FileName:
                assetKey = iterFileName;
                break;

            case AssetKeyType.FileNameFormat:
                assetKey = string.Format(assetRule.AssetKeyFormat, iterFileName);
                break;

            case AssetKeyType.Path:
                // Unity默认的路径分隔符是'/'
                assetKey = iterAssetPath.Replace('\\', '/');
                break;

            default:
                assetKey = string.Empty;
                throw new System.Exception(string.Format("not support ExtensionFilterType ({0})", assetRule.ExtensionFilterType));
            }

            string iterAssetGuid = AssetDatabase.AssetPathToGUID(iterAssetPath);
            AddressableAssetEntry iterAssetEntry = AddressableAssetSettingsDefaultObject.Settings.CreateOrMoveEntry(iterAssetGuid, group);
            if (iterAssetEntry == null)
            {
                Debug.LogError(string.Format("Cant load asset at path ({0})", iterAssetPath));
            }
            iterAssetEntry.SetAddress(assetKey);
            for (int iLabel = 0; iLabel < assetRule.AssetLables.Length; iLabel++)
            {
                iterAssetEntry.SetLabel(assetRule.AssetLables[iLabel], true);
            }
        }
    }