protected override void Logic(ValidationTarget target)
        {
            foreach (var obj in target.GetAllObjects())
            {
                var components = obj.GetComponents <Component>();
                foreach (var cmp in components)
                {
                    if (cmp == null || cmp.GetType() == typeof(Transform))
                    {
                        continue;
                    }
                    var message = "";
                    foreach (var reference in references)
                    {
                        if (reference != null && reference.Exists(cmp))
                        {
                            switch (reference.level)
                            {
                            case ValidationLevel.ALLOW:
                                break;

                            case ValidationLevel.DISALLOW:
                                message = string.Format("{0}:{1}の使用は許可されていません。", reference.name, cmp.GetType().Name);
                                AddIssue(new Issue(obj, IssueLevel.Error, message, string.Empty, string.Empty));
                                break;
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        protected override void Logic(ValidationTarget target)
        {
            var scenes = target.GetScenes();

            // 全てリアルタイムであればlightmapの検証は不要
            var staticRenderersCount = target.GetAllObjects()
                                       .Where(IsWrittenToLightmap)
                                       .SelectMany(obj => obj.GetComponents <Renderer>())
                                       .Count();

            if (staticRenderersCount == 0)
            {
                return;
            }

            foreach (var scene in scenes)
            {
                LogicForScene(scene);
            }

            if (IsLightMapAutoGenerated())
            {
                AddIssue(new Issue(
                             null,
                             IssueLevel.Error,
                             LocalizedMessage.Get("LightmapSizeLimitRule.MustLightmapBakingManually"),
                             LocalizedMessage.Get("LightmapSizeLimitRule.MustLightmapBakingManually.Solution")));
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            if (unusableBakeTypes.Length <= 0)
            {
                return;
            }

            var objs = target.GetAllObjects();

            foreach (var obj in objs)
            {
                var light = obj.GetComponent <Light>();

                if (light != null && light.type == type)
                {
                    if (unusableBakeTypes.Contains(light.lightmapBakeType))
                    {
                        AddIssue(new Issue(
                                     obj,
                                     IssueLevel.Error,
                                     LocalizedMessage.Get("UseLightModeRule.MustNotUse", type, light.lightmapBakeType),
                                     LocalizedMessage.Get("UseLightModeRule.MustNotUse.Solution")
                                     ));
                    }
                }
            }
        }
Example #4
0
        protected override void Logic(ValidationTarget target)
        {
            var objs = target.GetAllObjects();

            var foundLights = new List <Light>();

            foreach (var obj in objs)
            {
                var light = obj.GetComponent <Light>();
                if (light != null && light.type == type)
                {
                    foundLights.Add(light);
                }
            }

            if (foundLights.Count > limit)
            {
                var message  = LocalizedMessage.Get("LightCountLimitRule.Overuse", type, limit, foundLights.Count);
                var solution = LocalizedMessage.Get("LightCountLimitRule.Overuse.Solution");

                foreach (var light in foundLights)
                {
                    AddIssue(new Issue(
                                 light,
                                 IssueLevel.Error,
                                 message,
                                 solution));
                }
            }
        }
Example #5
0
        protected override void Logic(ValidationTarget target)
        {
            if (targetType == null)
            {
                return;
            }

            foreach (var gameObject in target.GetAllObjects())
            {
                var components = gameObject.GetComponents(targetType);

                if (components.Length == 0)
                {
                    continue;
                }

                if (!HasVisibleComponents(components))
                {
                    continue;
                }

                HasComponentObjectLogic(gameObject);

                foreach (var component in components)
                {
                    ComponentLogic(component);
                }
            }
        }
Example #6
0
        protected override void Logic(ValidationTarget target)
        {
            var objects = target
                          .GetAllObjects()
                          .Where(obj => PrefabUtility.GetPrefabInstanceStatus(obj) == PrefabInstanceStatus.Connected)
                          .Select(PrefabUtility.GetOutermostPrefabInstanceRoot)
                          .Distinct()
                          .Where(IsTargetPrefabInstance)
                          .ToArray();

            if (objects.Length > limit)
            {
                var message     = LocalizedMessage.Get("PrefabLimitRule.Overuse", limit, objects.Length);
                var solution    = LocalizedMessage.Get("PrefabLimitRule.Overuse.Solution");
                var solutionURL = LocalizedMessage.Get("PrefabLimitRule.Overuse.SolutionURL");

                AddIssue(new Issue(
                             null,
                             IssueLevel.Error,
                             message,
                             solution,
                             solutionURL
                             ));
            }
        }
Example #7
0
        protected override void Logic(ValidationTarget target)
        {
            foreach (var obj in target.GetAllObjects())
            {
                if (obj.GetComponent <Renderer>() == null)
                {
                    continue;
                }

                var materials = obj.GetComponent <Renderer>().sharedMaterials;

                foreach (var material in materials)
                {
                    if (material == null)
                    {
                        AddIssue(new Issue(obj, IssueLevel.Info, "オブジェクトのRendererにマテリアルの参照がありません。", string.Empty, string.Empty));
                        continue;
                    }

                    if (material.shader.name == "Hidden/InternalErrorShader")
                    {
                        AddIssue(new Issue(obj, IssueLevel.Error, "オブジェクトのマテリアルで正しいシェーダーが参照されていません。", string.Empty, string.Empty));
                        continue;
                    }

                    if (material.shader.name == string.Empty || material.shader.name == null)
                    {
                        AddIssue(new Issue(obj, IssueLevel.Error, "オブジェクトでシェーダーエラーが検出されました。", string.Empty, string.Empty));
                    }
                }
            }
        }
Example #8
0
        protected override void Logic(ValidationTarget target)
        {
            var objs = target.GetAllObjects();

            foreach (var obj in objs)
            {
                LogicForObject(obj);
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            var objs = target.GetAllObjects()
                       .Where(IsTargetPrefabInstanceRoot);

            foreach (var obj in objs)
            {
                LogicForPrefabInstanceRoot(obj);
            }
        }
Example #10
0
        protected override void Logic(ValidationTarget target)
        {
            var gameObjects = target.GetAllObjects();

            foreach (var gameObject in gameObjects)
            {
                foreach (var component in gameObject.GetComponents <Component>())
                {
                    if (component == null)
                    {
                        continue;
                    }

                    var meshCollider = component as MeshCollider;
                    if (meshCollider != null && meshCollider.sharedMesh == null)
                    {
                        var issue = new Issue(meshCollider, IssueLevel.Error, meshCollider + "にメッシュが設定されていません。");
                        AddIssue(issue);
                        continue;
                    }

                    var meshFilter = component as MeshFilter;
                    if (meshFilter != null && meshFilter.sharedMesh == null)
                    {
                        var issue = new Issue(meshFilter, IssueLevel.Error, meshFilter + "にメッシュが設定されていません。");
                        AddIssue(issue);
                        continue;
                    }

                    var skinnedMeshRenderer = component as SkinnedMeshRenderer;
                    if (skinnedMeshRenderer != null && skinnedMeshRenderer.sharedMesh == null)
                    {
                        var issue = new Issue(skinnedMeshRenderer, IssueLevel.Error, skinnedMeshRenderer + "にメッシュが設定されていません。");
                        AddIssue(issue);
                        continue;
                    }

                    var particleSystem = component as ParticleSystem;
                    if (particleSystem != null)
                    {
                        var shapeModule = particleSystem.shape;
                        if (shapeModule.shapeType == ParticleSystemShapeType.Mesh &&
                            shapeModule.meshShapeType != ParticleSystemMeshShapeType.Vertex &&
                            shapeModule.mesh == null)
                        {
                            var issue = new Issue(particleSystem, IssueLevel.Error, particleSystem + "/Shapeがメッシュに依存する設定であるにも関わらず、メッシュが設定されていません。");
                            AddIssue(issue);
                        }
                        continue;
                    }
                }
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            AddIssue(new Issue(
                         null,
                         IssueLevel.Info,
                         "gameObjects = " + ArrayToString(target.GetAllObjects())
                         ));

            AddIssue(new Issue(
                         null,
                         IssueLevel.Info,
                         "assets = " + ArrayToString(target.GetAllAssets())
                         ));
        }
Example #12
0
        protected override void Logic(ValidationTarget target)
        {
            var oversizes = target
                            .GetAllObjects()
                            .SelectMany(GetObjectBounds)
                            .Where(data => !LimitContains(data.bounds));

            foreach (var oversize in oversizes)
            {
                var limitSize = limit.size.ToString();
                var message   = string.Format("オブジェクトがブースサイズ制限{0}の外に出ています。{4}制限={1}{4}対象={2}{4}オブジェクトの種類={3}", limitSize, limit.ToString(accuracy), oversize.bounds.ToString(accuracy), oversize.objectReference.GetType().Name, System.Environment.NewLine);
                AddIssue(new Issue(oversize.objectReference, IssueLevel.Error, message));
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            var allObjects      = target.GetAllObjects();
            var animatorObjects = target
                                  .GetAllObjects()
                                  .Where(x => x.GetComponent <Animator>() != null);

            var animatorCount = animatorObjects.Count();

            if (animatorCount > limit)
            {
                var message  = LocalizedMessage.Get("AnimatorComponentMaxCountRule.Exceeded", limit, animatorCount);
                var solution = LocalizedMessage.Get("AnimatorComponentMaxCountRule.Exceeded.Solution");

                foreach (var animatorObject in animatorObjects)
                {
                    AddIssue(new Issue(
                                 animatorObject,
                                 IssueLevel.Error,
                                 message,
                                 solution));
                }
            }
        }
Example #14
0
        protected override void Logic(ValidationTarget target)
        {
            var objs = target.GetAllObjects();

            bakeTypeListString = string.Join(", ", approvedLightmapBakeTypes.Select(x => x.ToString()).ToArray());

            foreach (var obj in objs)
            {
                var light = obj.GetComponent <Light>();
                if (light != null && light.type == type)
                {
                    LogicForLight(light);
                }
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            var movableColliders = target.GetAllObjects()
                                   .SelectMany(EnumerateAttachedAnimationClips)
                                   .Distinct()
                                   .SelectMany(FindColliderReferenceInAnimationClip)
                                   .Distinct();

            foreach (var movableCollider in movableColliders)
            {
                AddIssue(new Issue(
                             movableCollider.collider,
                             IssueLevel.Error,
                             LocalizedMessage.Get("AnimationMakesMoveCollidersRule.WillMakesMove", movableCollider.rootObject.name),
                             LocalizedMessage.Get("AnimationMakesMoveCollidersRule.WillMakesMove.Solution")));
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            var allObjects = target.GetAllObjects();

            foreach (var referenceObject in allObjects)
            {
                var isWorldSpaceRenderMode = referenceObject
                                             .GetComponents <Canvas>()
                                             .Any(x => x.renderMode != RenderMode.WorldSpace);

                if (isWorldSpaceRenderMode)
                {
                    var message = LocalizedMessage.Get("CanvasRenderModeRule.CanvasIsNotInWorldSpace", referenceObject);
                    AddIssue(new Issue(referenceObject, IssueLevel.Error, message, string.Empty));
                }
            }
        }
Example #17
0
        protected override void Logic(ValidationTarget target)
        {
            foreach (var obj in target.GetAllObjects())
            {
                var components = obj.GetComponents <Component>();
                foreach (var cmp in components)
                {
                    if (cmp == null || cmp.GetType() == typeof(Transform))
                    {
                        continue;
                    }
                    var findFlg = false;
                    var message = "";
                    foreach (var reference in references)
                    {
                        if (reference != null && reference.Exists(cmp))
                        {
                            findFlg = true;
                            switch (reference.level)
                            {
                            case ValidationLevel.ALLOW:
                                break;

                            case ValidationLevel.NEGOTIABLE:
                                message = string.Format("{0}:{1}を使用する場合は事前に運営に問い合わせてください。", reference.name, cmp.GetType().Name);
                                AddIssue(new Issue(obj, IssueLevel.Warning, message, string.Empty, string.Empty));
                                break;

                            case ValidationLevel.DISALLOW:
                                message = string.Format("{0}:{1}の使用は許可されていません。", reference.name, cmp.GetType().Name);
                                AddIssue(new Issue(obj, IssueLevel.Error, message, string.Empty, string.Empty));
                                break;
                            }
                        }
                    }
                    if (!findFlg)
                    {
                        message = string.Format("{0}は使用可能なコンポーネントリストに登録されていません。", cmp.GetType().Name);
                        var solution = "使用をやめるか運営に問い合わせてください。";
                        AddIssue(new Issue(obj, IssueLevel.Error, message, solution, string.Empty));
                    }
                }
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            foreach (var gameObject in target.GetAllObjects())
            {
                foreach (var shader in this.GetShaders(gameObject))
                {
                    if (shader.name == "Hidden/InternalErrorShader")
                    {
                        continue;
                    }

                    var path = AssetDatabase.GetAssetPath(Shader.Find(shader.name));
                    if (path == "Resources/unity_builtin_extra")
                    {
                        continue;
                    }

                    if (!this.shaderNameGUIDPairs.ContainsKey(shader.name))
                    {
                        this.AddIssue(new Issue(
                                          gameObject,
                                          IssueLevel.Error,
                                          string.Format("シェーダー「{0}」の使用は許可されていません。", shader.name),
                                          solution,
                                          solutionURL
                                          ));
                        continue;
                    }

                    var guid = AssetDatabase.AssetPathToGUID(path);
                    if (guid != this.shaderNameGUIDPairs[shader.name])
                    {
                        this.AddIssue(new Issue(gameObject, IssueLevel.Error, string.Format(
                                                    "シェーダー「{0}」のGUID「{1}」が「{2}」と一致しません。",
                                                    shader.name,
                                                    guid,
                                                    this.shaderNameGUIDPairs[shader.name]
                                                    ), solution, solutionURL));
                        continue;
                    }
                }
            }
        }
Example #19
0
        protected override void Logic(ValidationTarget target)
        {
            var objs = target.GetAllObjects();

            foreach (var obj in objs)
            {
                var collider = obj.GetComponent <MeshCollider>();

                if (collider != null)
                {
                    AddIssue(
                        new Issue(
                            obj,
                            IssueLevel.Warning,
                            LocalizedMessage.Get("UseMeshColliderRule.ShouldNotUse"),
                            LocalizedMessage.Get("UseMeshColliderRule.ShouldNotUse.Solution")
                            ));
                }
            }
        }
        protected override void Logic(ValidationTarget target)
        {
            foreach (var gameObject in target.GetAllObjects())
            {
                var components = gameObject.GetComponents <Component>();
                foreach (var component in components)
                {
                    if (component == null ||
                        component is Transform)
                    {
                        continue;
                    }

                    if ((component.hideFlags & HideFlags.DontSaveInEditor) == HideFlags.DontSaveInEditor)
                    {
                        continue;
                    }
                    var isPrefabComponent = !PrefabUtility.IsAddedComponentOverride(component);
                    if (IsIgnoredComponent(component) &&
                        isPrefabComponent)
                    {
                        continue;
                    }

                    bool found = false;
                    foreach (var reference in references)
                    {
                        if (reference != null && reference.Exists(component))
                        {
                            found = true;
                            AddComponentIssue(reference.name, gameObject, component, reference.level);
                        }
                    }

                    if (!found)
                    {
                        AddComponentIssue(LocalizedMessage.Get("UsableComponentListRule.DefaultComponentGroupName"), gameObject, component, unregisteredComponentValidationLevel);
                    }
                }
            }
        }
Example #21
0
        protected override void Logic(ValidationTarget target)
        {
            var finder = new MissingFinder(target.GetAllObjects());

            foreach (var missingPrefabInstance in finder.MissingPrefabInstances)
            {
                var errorMessage = string.Format("missingプレハブが含まれています!({0})", missingPrefabInstance.name);
                AddIssue(new Issue(missingPrefabInstance, IssueLevel.Error, errorMessage));
            }

            foreach (var missingComponentContainer in finder.MissingComponentContainers)
            {
                var errorMessage = string.Format("missingコンポーネントが含まれています!({0})", missingComponentContainer.name);
                var mainAsset    = GetMainAsset(missingComponentContainer);
                AddIssue(new Issue(mainAsset, IssueLevel.Error, errorMessage));
            }

            foreach (var missingProperty in finder.MissingProperties)
            {
                var    targetObject = missingProperty.serializedObject.targetObject;
                string message;
                var    targetComponent = targetObject as Component;
                if (targetComponent != null)
                {
                    message = string.Format("missingフィールドが含まれています!({0} > {1} > {2})",
                                            targetComponent.gameObject.name,
                                            targetComponent.GetType().Name,
                                            missingProperty.displayName);
                }
                else
                {
                    message = string.Format("missingフィールドが含まれています!({0} > {1})",
                                            targetObject.name,
                                            missingProperty.displayName);
                }

                var mainAsset = GetMainAsset(targetObject);
                AddIssue(new Issue(mainAsset, IssueLevel.Error, message));
            }
        }
Example #22
0
        protected override void Logic(ValidationTarget target)
        {
            var allObjects = target.GetAllObjects();

            foreach (var referenceObject in allObjects)
            {
                var isNotBaked = referenceObject
                                 .GetComponents <Renderer>()
                                 .Select(x => x.sharedMaterial)
                                 .Where(x => x != null)
                                 .Where(x => x.shader.name == "Standard")
                                 .Where(x => !AssetDatabase.GetAssetPath(x).StartsWith("Resources/unity_builtin_extra"))
                                 .Where(x => x.IsKeywordEnabled("_EMISSION"))
                                 .Any(x => x.globalIlluminationFlags != MaterialGlobalIlluminationFlags.BakedEmissive);

                if (isNotBaked)
                {
                    var message  = LocalizedMessage.Get("GlobalIlluminationBakedRule.NotBaked", referenceObject);
                    var solution = String.Format("GlobalIlluminationBakedRule.NotBaked.Solution");
                    AddIssue(new Issue(referenceObject, IssueLevel.Error, message, solution));
                }
            }
        }