Inheritance: MonoBehaviour
コード例 #1
0
        private List <QualitySetting> GetQualitySettings()
        {
            // Pull the quality settings from the runtime.
            var qualitySettings = new List <QualitySetting>();

            foreach (SerializedProperty prop in m_QualitySettingsProperty)
            {
                var qs = new QualitySetting
                {
                    m_Name         = prop.FindPropertyRelative("name").stringValue,
                    m_PropertyPath = prop.propertyPath
                };

                qs.m_PropertyPath = prop.propertyPath;

                var platforms     = new List <string>();
                var platformsProp = prop.FindPropertyRelative("excludedTargetPlatforms");
                foreach (SerializedProperty platformProp in platformsProp)
                {
                    platforms.Add(platformProp.stringValue);
                }

                qs.m_ExcludedPlatforms = platforms;
                qualitySettings.Add(qs);
            }
            return(qualitySettings);
        }
コード例 #2
0
    void InitLightMap()
    {
        // 保险起见,只在Iphone上进行处理
#if UNITY_IPHONE
        // 低配机型,为了节省内存删除lightmapDir贴图
        if (QualitySetting.GetAdviceGraphicLevel() == 2)
        {
            LightmapSettings.lightmapsMode = LightmapsMode.NonDirectional;

            var lightMaps = LightmapSettings.lightmaps;//当前场景中已经存在的lightmap数据
            if (lightMaps == null)
            {
                return;
            }

            for (int i = 0; i < lightMaps.Length; i++)
            {
                var lightmapData = lightMaps[i];
                var lightmapDir  = lightmapData.lightmapDir;
                if (lightmapDir != null)
                {
                    GameObject.DestroyImmediate(lightmapDir, true);
                    lightmapData.lightmapDir = null;
                }
            }
            ;
        }
#endif
    }
コード例 #3
0
        private QualitySetting LoadQualitySettingFromXml(SecurityElement element)
        {
            QualitySetting setting = new QualitySetting();

            setting.qualityLevel = StrParser.ParseDecInt(element.Attribute("QualityLevel"), setting.qualityLevel);
            setting.border       = StrParser.ParseStr(element.Attribute("Border"), "");
            return(setting);
        }
コード例 #4
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        private QualitySetting CreateFastSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                  = "Low";
            setting.ShadowCascades        = ShadowCascades.NoCascades;
            setting.ShadowDistance        = 20;
            setting.SkinWeights           = SkinWeights.TwoBones;
            setting.LodBias               = 0.4f;
            setting.ParticleRaycastBudget = 16;
            return(setting);
        }
コード例 #5
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        private QualitySetting CreateFastestSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                  = "Very Low";
            setting.ShadowCascades        = ShadowCascades.NoCascades;
            setting.ShadowDistance        = 15;
            setting.SkinWeights           = SkinWeights.OneBone;
            setting.TextureQuality        = TextureQuality.HalfRes;
            setting.LodBias               = 0.3f;
            setting.ParticleRaycastBudget = 4;
            return(setting);
        }
コード例 #6
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        private QualitySetting CreateSimpleSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                  = "Medium";
            setting.PixelLightCount       = 1;
            setting.Shadows               = ShadowQuality.HardOnly;
            setting.ShadowCascades        = ShadowCascades.NoCascades;
            setting.ShadowDistance        = 20;
            setting.SkinWeights           = SkinWeights.TwoBones;
            setting.AnisotropicTextures   = AnisotropicFiltering.Enable;
            setting.VSyncCount            = VSyncCount.EveryVBlank;
            setting.LodBias               = 0.7f;
            setting.ParticleRaycastBudget = 64;
            return(setting);
        }
コード例 #7
0
    private void Awake()
    {
        if (Singleton != null)
        {
            Destroy(gameObject);
            return;
        }

        Singleton = this;
        if (transform.parent == null)
        {
            DontDestroyOnLoad(gameObject);
        }

        Application.targetFrameRate = 60;
    }
コード例 #8
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        private QualitySetting CreateGoodSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                  = "High";
            setting.PixelLightCount       = 2;
            setting.Shadows               = ShadowQuality.All;
            setting.ShadowResolution      = ShadowResolution.Medium;
            setting.ShadowCascades        = ShadowCascades.TwoCascades;
            setting.ShadowDistance        = 40;
            setting.SkinWeights           = SkinWeights.TwoBones;
            setting.AnisotropicTextures   = AnisotropicFiltering.Enable;
            setting.AntiAliasing          = AntiAliasing._2X;
            setting.SoftVegetation        = true;
            setting.VSyncCount            = VSyncCount.EveryVBlank;
            setting.LodBias               = 1.0f;
            setting.ParticleRaycastBudget = 256;
            return(setting);
        }
コード例 #9
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        private QualitySetting CreateFantasticSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                         = "Ultra";
            setting.PixelLightCount              = 4;
            setting.Shadows                      = ShadowQuality.All;
            setting.ShadowResolution             = ShadowResolution.High;
            setting.ShadowCascades               = ShadowCascades.FourCascades;
            setting.ShadowDistance               = 150;
            setting.ShadowmaskMode               = ShadowmaskMode.DistanceShadowmask;
            setting.SkinWeights                  = SkinWeights.FourBones;
            setting.AnisotropicTextures          = AnisotropicFiltering.Enable;
            setting.AntiAliasing                 = AntiAliasing._4X;
            setting.SoftParticles                = true;
            setting.SoftVegetation               = true;
            setting.RealtimeReflectionProbes     = true;
            setting.BillboardsFaceCameraPosition = true;
            setting.VSyncCount                   = VSyncCount.EveryVBlank;
            setting.LodBias                      = 2.0f;
            setting.ParticleRaycastBudget        = 4096;
            return(setting);
        }
コード例 #10
0
ファイル: QualitySettings.cs プロジェクト: w2lf/UtinyRipper
        private QualitySetting CreateBeautifulSettings()
        {
            QualitySetting setting = new QualitySetting(true);

            setting.Name                         = "Very High";
            setting.PixelLightCount              = 3;
            setting.Shadows                      = ShadowQuality.All;
            setting.ShadowResolution             = ShadowResolution.High;
            setting.ShadowCascades               = ShadowCascades.TwoCascades;
            setting.ShadowDistance               = 40;
            setting.ShadowmaskMode               = ShadowmaskMode.DistanceShadowmask;
            setting.BlendWeights                 = BlendWeights.FourBones;
            setting.AnisotropicTextures          = AnisotropicFiltering.Enable;
            setting.AntiAliasing                 = AntiAliasing._4X;
            setting.SoftParticles                = true;
            setting.SoftVegetation               = true;
            setting.RealtimeReflectionProbes     = true;
            setting.BillboardsFaceCameraPosition = true;
            setting.VSyncCount                   = VSyncCount.EveryVBlank;
            setting.LodBias                      = 1.5f;
            setting.ParticleRaycastBudget        = 1024;
            return(setting);
        }
コード例 #11
0
    void Awake()
    {
        if (Instance != null)
        {
            Debug.LogError("QuadTreeSceneManager inited many times!");
            Destroy(this);
            return;
        }
        Instance = this;

        if (QualitySetting.IsVeryLowIPhone())
        {
            MAX_CACHE_NUM = 5;
            DIE_TIME      = 5;
        }
        else
        {
            MAX_CACHE_NUM = 10;
            DIE_TIME      = 10;
        }

        InvokeRepeating("ReleaseTooOld", DIE_TIME, DIE_TIME);
    }
コード例 #12
0
        private int DoQualityLevelSelection(int currentQualitylevel, IList <QualitySetting> qualitySettings, Dictionary <string, int> platformDefaultQualitySettings)
        {
            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            GUILayout.FlexibleSpace();
            GUILayout.BeginVertical(new GUILayoutOption[0]);
            int num = currentQualitylevel;

            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            GUILayoutOption[] options = new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(80f), GUILayout.Height(20f) };
            Rect position             = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, options);

            position.x     += EditorGUI.indent;
            position.width -= EditorGUI.indent;
            GUI.Label(position, "Levels", EditorStyles.boldLabel);
            foreach (BuildPlayerWindow.BuildPlatform platform in this.m_ValidPlatforms)
            {
                GUILayoutOption[] optionArray2 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f), GUILayout.Height(20f) };
                Rect       rect2   = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray2);
                GUIContent content = EditorGUIUtility.TempContent(platform.smallIcon);
                content.tooltip = platform.name;
                GUI.Label(rect2, content);
                content.tooltip = string.Empty;
            }
            GUILayoutOption[] optionArray3 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f), GUILayout.Height(20f) };
            GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray3);
            GUILayout.EndHorizontal();
            Event current = Event.current;

            for (int i = 0; i < qualitySettings.Count; i++)
            {
                GUILayout.BeginHorizontal(new GUILayoutOption[0]);
                GUIStyle          style        = ((i % 2) != 0) ? Styles.kListOddBg : Styles.kListEvenBg;
                bool              on           = num == i;
                GUILayoutOption[] optionArray4 = new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(80f) };
                Rect              rect3        = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray4);
                switch (current.type)
                {
                case EventType.MouseDown:
                    if (rect3.Contains(current.mousePosition))
                    {
                        num = i;
                        GUIUtility.keyboardControl = 0;
                        GUIUtility.hotControl      = this.m_QualityElementHash;
                        Dragging dragging = new Dragging {
                            m_StartPosition = i,
                            m_Position      = i
                        };
                        this.m_Dragging = dragging;
                        current.Use();
                    }
                    break;

                case EventType.MouseUp:
                    if (GUIUtility.hotControl == this.m_QualityElementHash)
                    {
                        GUIUtility.hotControl = 0;
                        current.Use();
                    }
                    break;

                case EventType.MouseDrag:
                    if ((GUIUtility.hotControl == this.m_QualityElementHash) && rect3.Contains(current.mousePosition))
                    {
                        this.m_Dragging.m_Position = i;
                        current.Use();
                    }
                    break;

                case EventType.KeyDown:
                    if ((current.keyCode == KeyCode.UpArrow) || (current.keyCode == KeyCode.DownArrow))
                    {
                        num += (current.keyCode != KeyCode.UpArrow) ? 1 : -1;
                        num  = Mathf.Clamp(num, 0, qualitySettings.Count - 1);
                        GUIUtility.keyboardControl = 0;
                        current.Use();
                    }
                    break;

                case EventType.Repaint:
                {
                    style.Draw(rect3, GUIContent.none, false, false, on, false);
                    QualitySetting setting = qualitySettings[i];
                    GUI.Label(rect3, EditorGUIUtility.TempContent(setting.m_Name));
                    break;
                }
                }
                foreach (BuildPlayerWindow.BuildPlatform platform2 in this.m_ValidPlatforms)
                {
                    bool flag2 = false;
                    if (platformDefaultQualitySettings.ContainsKey(platform2.name) && (platformDefaultQualitySettings[platform2.name] == i))
                    {
                        flag2 = true;
                    }
                    GUILayoutOption[] optionArray5 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f) };
                    Rect rect4 = GUILayoutUtility.GetRect(Styles.kPlatformTooltip, Styles.kToggle, optionArray5);
                    if (Event.current.type == EventType.Repaint)
                    {
                        style.Draw(rect4, GUIContent.none, false, false, on, false);
                    }
                    Color backgroundColor = GUI.backgroundColor;
                    if (flag2 && !EditorApplication.isPlayingOrWillChangePlaymode)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    QualitySetting setting2 = qualitySettings[i];
                    bool           flag3    = !setting2.m_ExcludedPlatforms.Contains(platform2.name);
                    bool           flag4    = GUI.Toggle(rect4, flag3, Styles.kPlatformTooltip, !flag2 ? Styles.kToggle : Styles.kDefaultToggle);
                    if (flag3 != flag4)
                    {
                        if (flag4)
                        {
                            QualitySetting setting3 = qualitySettings[i];
                            setting3.m_ExcludedPlatforms.Remove(platform2.name);
                        }
                        else
                        {
                            QualitySetting setting4 = qualitySettings[i];
                            setting4.m_ExcludedPlatforms.Add(platform2.name);
                        }
                    }
                    GUI.backgroundColor = backgroundColor;
                }
                GUILayoutOption[] optionArray6 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f) };
                Rect rect5 = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray6);
                if (Event.current.type == EventType.Repaint)
                {
                    style.Draw(rect5, GUIContent.none, false, false, on, false);
                }
                if (GUI.Button(rect5, Styles.kIconTrash, GUIStyle.none))
                {
                    this.m_DeleteLevel = i;
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            GUILayoutOption[] optionArray7 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f), GUILayout.Height(1f) };
            GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray7);
            DrawHorizontalDivider();
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            GUILayoutOption[] optionArray8 = new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(80f), GUILayout.Height(20f) };
            Rect rect6 = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray8);

            rect6.x     += EditorGUI.indent;
            rect6.width -= EditorGUI.indent;
            GUI.Label(rect6, "Default", EditorStyles.boldLabel);
            foreach (BuildPlayerWindow.BuildPlatform platform3 in this.m_ValidPlatforms)
            {
                int num3;
                GUILayoutOption[] optionArray9 = new GUILayoutOption[] { GUILayout.MinWidth(15f), GUILayout.MaxWidth(20f), GUILayout.Height(20f) };
                Rect rect7 = GUILayoutUtility.GetRect(GUIContent.none, Styles.kToggle, optionArray9);
                if (!platformDefaultQualitySettings.TryGetValue(platform3.name, out num3))
                {
                    platformDefaultQualitySettings.Add(platform3.name, 0);
                }
                if (< > f__am$cache8 == null)
                {
コード例 #13
0
ファイル: QualitySettings.cs プロジェクト: zbx91/UtinyRipper
        public override void Read(AssetReader reader)
        {
            base.Read(reader);

            if (IsReadDefaultStandaloneQuality(reader.Version))
            {
                QualityLevel defaultStandaloneQuality = (QualityLevel)reader.ReadInt32();
                QualityLevel defaultWebPlayerQuality  = (QualityLevel)reader.ReadInt32();
                m_perPlatformDefaultQuality = new Dictionary <string, int>();
                SetDefaultPlatformQuality(m_perPlatformDefaultQuality);
                m_perPlatformDefaultQuality[BuildTargetGroup.Standalone.ToExportString()] = (int)defaultStandaloneQuality;
                m_perPlatformDefaultQuality[BuildTargetGroup.WebPlayer.ToExportString()]  = (int)defaultStandaloneQuality;
            }
            if (IsReadDefaultMobileQuality(reader.Version))
            {
                QualityLevel defaultMobileQuality = (QualityLevel)reader.ReadInt32();
                m_perPlatformDefaultQuality[BuildTargetGroup.Android.ToExportString()] = (int)defaultMobileQuality;
                m_perPlatformDefaultQuality[BuildTargetGroup.iOS.ToExportString()]     = (int)defaultMobileQuality;
            }
            CurrentQuality = reader.ReadInt32();
            if (IsReadQualitySettingArray(reader.Version))
            {
                m_qualitySettings = reader.ReadAssetArray <QualitySetting>();
            }
            else
            {
                m_qualitySettings = new QualitySetting[6];
                QualitySetting fastest = reader.ReadAsset <QualitySetting>();
                fastest.Name = nameof(QualityLevel.Fastest);
                m_qualitySettings[(int)QualityLevel.Fastest] = fastest;

                QualitySetting fast = reader.ReadAsset <QualitySetting>();
                fast.Name = nameof(QualityLevel.Fast);
                m_qualitySettings[(int)QualityLevel.Fast] = fast;

                QualitySetting simple = reader.ReadAsset <QualitySetting>();
                simple.Name = nameof(QualityLevel.Simple);
                m_qualitySettings[(int)QualityLevel.Simple] = simple;

                QualitySetting good = reader.ReadAsset <QualitySetting>();
                good.Name = nameof(QualityLevel.Good);
                m_qualitySettings[(int)QualityLevel.Good] = good;

                QualitySetting beautiful = reader.ReadAsset <QualitySetting>();
                beautiful.Name = nameof(QualityLevel.Beautiful);
                m_qualitySettings[(int)QualityLevel.Beautiful] = beautiful;

                QualitySetting fantastic = reader.ReadAsset <QualitySetting>();
                fantastic.Name = nameof(QualityLevel.Fantastic);
                m_qualitySettings[(int)QualityLevel.Fantastic] = fantastic;
            }
            foreach (QualitySetting setting in m_qualitySettings)
            {
                switch (setting.Name)
                {
                case nameof(QualityLevel.Fastest):
                case "Very Low":
                    QualitySetting fastest = CreateFastestSettings();
                    setting.Merge(fastest, reader.Version, reader.Flags);
                    break;

                case nameof(QualityLevel.Fast):
                case "Low":
                    QualitySetting fast = CreateFastSettings();
                    setting.Merge(fast, reader.Version, reader.Flags);
                    break;

                case nameof(QualityLevel.Simple):
                case "Medium":
                    QualitySetting simple = CreateSimpleSettings();
                    setting.Merge(simple, reader.Version, reader.Flags);
                    break;

                case nameof(QualityLevel.Good):
                case "High":
                    QualitySetting good = CreateGoodSettings();
                    setting.Merge(good, reader.Version, reader.Flags);
                    break;

                case nameof(QualityLevel.Beautiful):
                case "Very High":
                    QualitySetting beautiful = CreateBeautifulSettings();
                    setting.Merge(beautiful, reader.Version, reader.Flags);
                    break;

                case nameof(QualityLevel.Fantastic):
                case "Ultra":
                default:
                    QualitySetting fantastic = CreateFantasticSettings();
                    setting.Merge(fantastic, reader.Version, reader.Flags);
                    break;
                }
            }

            if (IsReadWebPlayer(reader.Version))
            {
                QualitySetting webPlayer = reader.ReadAsset <QualitySetting>();
                webPlayer.Name = "WebPlayer";
            }

#if UNIVERSAL
            if (IsReadPerPlatformDefaultQuality(reader.Version, reader.Flags))
            {
                m_perPlatformDefaultQuality = new Dictionary <string, int>();
                m_perPlatformDefaultQuality.Read(reader);
            }
#endif
            if (IsReadStrippedMaximumLODLevel(reader.Version, reader.Flags))
            {
                StrippedMaximumLODLevel = reader.ReadInt32();
            }
        }
コード例 #14
0
 public static string GetAssetBundleSuffix(this QualitySetting set)
 {
     return("quality-" + set.ToString().ToLower());
 }