예제 #1
0
        public static List <IssueRecord> CheckSceneSettingsForMissingReferences(AssetInfo sceneAsset)
        {
            var result = new List <IssueRecord>();

            var sceneSettingsObject = CSSettingsTools.GetInSceneLightmapSettings();

            if (sceneSettingsObject != null)
            {
                var initialInfo = new SerializedObjectTraverseInfo(sceneSettingsObject);
                CSTraverseTools.TraverseObjectProperties(initialInfo, (info, property) =>
                {
                    if (MissingReferenceDetector.IsPropertyHasMissingReference(property))
                    {
                        var record = SceneSettingsIssueRecord.Create(SceneSettingsKind.LightmapSettings, IssueKind.MissingReference, sceneAsset.Path, property.propertyPath);
                        result.Add(record);
                    }
                });
            }

            sceneSettingsObject = CSSettingsTools.GetInSceneRenderSettings();
            if (sceneSettingsObject != null)
            {
                var initialInfo = new SerializedObjectTraverseInfo(sceneSettingsObject);
                CSTraverseTools.TraverseObjectProperties(initialInfo, (info, property) =>
                {
                    if (MissingReferenceDetector.IsPropertyHasMissingReference(property))
                    {
                        var record = SceneSettingsIssueRecord.Create(SceneSettingsKind.RenderSettings, IssueKind.MissingReference, sceneAsset.Path, property.propertyPath);
                        result.Add(record);
                    }
                });
            }

            return(result);
        }
예제 #2
0
        private static void CheckLightMapSettings(TreeConjunction conjunction, int candidateInstanceId)
        {
            lightmapSettings = lightmapSettings ? lightmapSettings : CSSettingsTools.GetInSceneLightmapSettings();

            if (lightmapSettings == null)
            {
                return;
            }

            lightmapSettingsSo      = lightmapSettingsSo ?? new SerializedObject(lightmapSettings);
            lightmapParametersField = lightmapParametersField ??
                                      lightmapSettingsSo.FindProperty(
                "m_LightmapEditorSettings.m_LightmapParameters");
            if (lightmapParametersField != null && lightmapParametersField.propertyType ==
                SerializedPropertyType.ObjectReference)
            {
                if (lightmapParametersField.objectReferenceInstanceIDValue == candidateInstanceId)
                {
                    var entry = new ReferencingEntryData
                    {
                        location    = Location.SceneLightingSettings,
                        prefixLabel =
                            "Lighting settings (Scene tab > Lightmapping Settings > Lightmap Parameters)"
                    };

                    conjunction.referencedAtInfo.AddNewEntry(entry);
                }
            }
            else
            {
                Debug.LogError(
                    Maintainer.ConstructError(
                        "Can't find m_LightmapParameters at the LightmapSettings!"));
            }
        }
예제 #3
0
        private static void CheckRenderSettingsTexture(TreeConjunction conjunction, int candidateInstanceId)
        {
            renderSettings = renderSettings ? renderSettings : CSSettingsTools.GetInSceneRenderSettings();
            if (renderSettings == null)
            {
                return;
            }

            renderSettingsSo = renderSettingsSo ?? new SerializedObject(renderSettings);
            renderHaloField  = renderHaloField ?? renderSettingsSo.FindProperty("m_HaloTexture");

            if (renderHaloField != null && renderHaloField.propertyType == SerializedPropertyType.ObjectReference)
            {
                if (renderHaloField.objectReferenceInstanceIDValue == candidateInstanceId)
                {
                    var entry = new ReferencingEntryData
                    {
                        location    = Location.SceneLightingSettings,
                        prefixLabel = "Lighting settings (Scene tab > Other Settings > Halo Texture)"
                    };

                    conjunction.referencedAtInfo.AddNewEntry(entry);
                }
            }
            else
            {
                Debug.LogError(Maintainer.ConstructError("Can't find m_HaloTexture at the RenderSettings!"));
            }

            renderSpotField = renderSpotField ?? renderSettingsSo.FindProperty("m_SpotCookie");
            if (renderSpotField != null && renderSpotField.propertyType == SerializedPropertyType.ObjectReference)
            {
                if (renderSpotField.objectReferenceInstanceIDValue == candidateInstanceId)
                {
                    var entry = new ReferencingEntryData
                    {
                        location    = Location.SceneLightingSettings,
                        prefixLabel = "Lighting settings (Scene tab > Other Settings > Spot Cookie)"
                    };

                    conjunction.referencedAtInfo.AddNewEntry(entry);
                }
            }
            else
            {
                Debug.LogError(Maintainer.ConstructError("Can't find m_SpotCookie at the RenderSettings!"));
            }

            /*var iterator = renderSettingsSo.GetIterator();
             * while (iterator.Next(true))
             * {
             *      if (iterator.propertyType == SerializedPropertyType.ObjectReference)
             *      {
             *              Debug.Log(iterator.propertyPath + " [" + iterator.objectReferenceValue + "]");
             *      }
             * }*/
        }
예제 #4
0
        private Object GetSettingsObjectWithThisIssue()
        {
            Object result;

            switch (SettingsKind)
            {
            case SceneSettingsKind.LightmapSettings:
                result = CSSettingsTools.GetInSceneLightmapSettings();
                break;

            case SceneSettingsKind.RenderSettings:
                result = CSSettingsTools.GetInSceneRenderSettings();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(result);
        }