先修复一下,错误的场景 删除不必要的钓场资产 修复into场景 update:更新meta文件,修复报错 update:修复资源 修复第一章节建造 修复建造第三章 update:删除多余内容 update:更新README.md update:还原图标 update:更新README update:更新配置
145 lines
3.6 KiB
C#
145 lines
3.6 KiB
C#
using asap.core;
|
|
using System;
|
|
using UnityEngine;
|
|
using UniRx;
|
|
|
|
public struct QualityChangedEvt { }
|
|
|
|
public class QualityManager
|
|
{
|
|
private const string Quality_Level = "QualityLevel";
|
|
public static void ChangeQuality(int level)
|
|
{
|
|
string[] names = QualitySettings.names;
|
|
if (level >= names.Length)
|
|
{
|
|
return;
|
|
}
|
|
|
|
QualitySettings.SetQualityLevel(level);
|
|
PlayerPrefs.SetInt(Quality_Level, level);
|
|
GContext.Publish(new QualityChangedEvt());
|
|
}
|
|
|
|
public static void ChangeQuality(string levelName)
|
|
{
|
|
var names = QualitySettings.names;
|
|
for (int i = 0; i < names.Length; i++)
|
|
{
|
|
if (names[i] == levelName)
|
|
{
|
|
ChangeQuality(i);
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void AutoSetQualityLevel()
|
|
{
|
|
var level=PlayerPrefs.GetInt(Quality_Level, -1);
|
|
if (level == -1)
|
|
{
|
|
level = GpuEvaluation.Tier;
|
|
}
|
|
ChangeQuality(level);
|
|
}
|
|
|
|
public static string[] QualityNames => QualitySettings.names;
|
|
}
|
|
|
|
[Serializable]
|
|
public class QualityAdapter : MonoBehaviour
|
|
{
|
|
[Serializable]
|
|
private class AdapterData
|
|
{
|
|
public GameObject[] enableObjects;
|
|
public GameObject[] disableObjects;
|
|
public Renderer renderer;
|
|
public string[] keywordsToEnable;
|
|
public string[] keywordsToDisable;
|
|
public string[] propToEnable;
|
|
public string[] propToDisable;
|
|
}
|
|
|
|
[SerializeField]
|
|
private AdapterData[] adapterDatas;
|
|
|
|
private IDisposable disposable = null;
|
|
|
|
private void Start()
|
|
{
|
|
disposable = GContext.OnEvent<QualityChangedEvt>().Subscribe(_ => SetQualityLevel());
|
|
SetQualityLevel();
|
|
}
|
|
|
|
private void SetQualityLevel()
|
|
{
|
|
int level = QualitySettings.GetQualityLevel();
|
|
if (level >= adapterDatas.Length)
|
|
{
|
|
level = adapterDatas.Length - 1;
|
|
}
|
|
var adapterData = adapterDatas[level];
|
|
|
|
if (adapterData.enableObjects != null)
|
|
{
|
|
foreach (var go in adapterData.enableObjects)
|
|
{
|
|
go.SetActive(true);
|
|
}
|
|
}
|
|
|
|
if (adapterData.disableObjects != null)
|
|
{
|
|
foreach (var go in adapterData.disableObjects)
|
|
{
|
|
go.SetActive(false);
|
|
}
|
|
}
|
|
|
|
if (adapterData.renderer != null)
|
|
{
|
|
var mat = adapterData.renderer.material;
|
|
var keywordsToEnable = adapterData.keywordsToEnable;
|
|
if (keywordsToEnable != null)
|
|
{
|
|
foreach (var keyword in keywordsToEnable)
|
|
{
|
|
mat.EnableKeyword(keyword);
|
|
}
|
|
}
|
|
var keywordsToDisable = adapterData.keywordsToDisable;
|
|
if (keywordsToDisable != null)
|
|
{
|
|
foreach (var keyword in keywordsToDisable)
|
|
{
|
|
mat.DisableKeyword(keyword);
|
|
}
|
|
}
|
|
var propToEnable = adapterData.propToEnable;
|
|
if (propToEnable != null)
|
|
{
|
|
foreach (var prop in propToEnable)
|
|
{
|
|
mat.SetInt(prop, 1);
|
|
}
|
|
}
|
|
var propToDisable = adapterData.propToDisable;
|
|
if (propToDisable != null)
|
|
{
|
|
foreach (var prop in propToDisable)
|
|
{
|
|
mat.SetInt(prop, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
disposable?.Dispose();
|
|
}
|
|
}
|