Files
Main/Assets/Code/Logic/_Required/GameSetting/SettingProcess/PerformanceSetting.cs

890 lines
47 KiB
C#
Raw Normal View History

2025-01-25 04:38:09 +08:00
using Thousandto.Cfg.Data;
using Thousandto.Code.Center;
using Thousandto.Core.Asset;
using Thousandto.Core.Base;
using Thousandto.Core.PostEffect;
using Thousandto.Core.Support;
using Thousandto.Plugins.Common.UniScene;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Thousandto.Code.Logic
{
/// <summary>
/// 性能,质量,效果方面的配置
/// </summary>
public class PerformanceSetting : SettingProcessBase
{
#region//私有变量
//设备匹配
private DeviceMatcher _matcher = new DeviceMatcher();
private bool _isInitialized = false;
private int _deviceLevel = 1;
private int _oriScreenWidth = 0;
private int _oriScreenHeight = 0;
private float[] _performanceLevel = null;
#endregion
#region //初始化,注册函数,继承父类
protected override void OnInitializeAfter()
{
if (!_isInitialized)
{
base.OnInitializeAfter();
if (Application.isMobilePlatform)
{
if(GameCenter.SDKSystem.IsEmulator())
{
//如果是模拟器
_deviceLevel = 2;
EnableShaderLightFlow(true);
Debug.Log("当前设备为模拟器!");
}
else
{
_matcher.Initialize(GetDeviceInfoList());
_matcher.PrintDeviceInfo();
//通过设备信息来加载默认的配置信息
int cfgID = -1;
_deviceLevel = _matcher.Process(out cfgID);
Debug.Log("当前设备支持的游戏品质为:" + _deviceLevel);
//_deviceLevel = 2;
if (cfgID >= 0)
{
var cfg = DeclareDeviceMatchConfig.Get(cfgID);
if (cfg != null) EnableShaderLightFlow(cfg.UseFlow > 0);
}
else
{
EnableShaderLightFlow(_deviceLevel > 0);
}
}
}
else
{
//如果非移动设备
_deviceLevel = 2;
EnableShaderLightFlow(true);
}
//创建一个共享内存,用于存储性能等级
_performanceLevel = GonbestGMemoryAccessor.AllocFloatBlock("qlevel", 1);
if(_performanceLevel != null) _performanceLevel[0] = _deviceLevel;
_isInitialized = true;
}
}
protected override void OnLoadDefault(bool isforce, bool save)
{
_oriScreenWidth = Screen.width;
_oriScreenHeight = Screen.height;
//根据设备重新设置游戏品质 -- 这里只处理那些还没有设置过的内容,对于已经设置过的不做处理
if (_deviceLevel <= 0)
{
SetLowQuality(isforce, save);
}
else if (_deviceLevel <= 1)
{
SetNormaQuality(isforce, save);
}
else
{
SetHighQuality(isforce, save);
}
//初始化QulitySetting
InitializeQualitySetting();
//设置默认的其他玩家等级
GameSettingCore.SetUnSave(GameSettingKeyCode.OtherPlayerSkillVfxLevel, 1, false);
}
//进入场景
protected override void OnEnterScene(GameScene scene)
{
//记载阴影灯光的问题
LoadLightCfg(scene);
OnEnableSceneLightingChanged(GameSettingCore.Get(GameSettingKeyCode.EnableSceneLighting));
OnEnableRainChanged(GameSettingCore.Get(GameSettingKeyCode.EnableRain));
OnEnableCameraVFXChanged(GameSettingCore.Get(GameSettingKeyCode.EnableCameraVFX));
OnSceneVFXLevelChanged(GameSettingCore.Get(GameSettingKeyCode.SceneVFXLevel));
OnEnableWaterChanged(GameSettingCore.Get(GameSettingKeyCode.EnableWater));
OnEnableHighFogChanged(GameSettingCore.Get(GameSettingKeyCode.EnableHighFog));
OnFarAndNearFogChanged(GameSettingCore.Get(GameSettingKeyCode.FarAndNearFog));
OnSceneObjClipDisChanged(GameSettingCore.Get(GameSettingKeyCode.SceneObjClipDis));
OnSceneShelterHideChanged(GameSettingCore.Get(GameSettingKeyCode.SceneShelterHide));
OnEnablePostEffectChanged(GameSettingCore.Get(GameSettingKeyCode.EnablePostEffect));
OnCastShadowLevelChanged(GameSettingCore.Get(GameSettingKeyCode.CastShadowLevel));
OnEnableReceiveShadowChanged(GameSettingCore.Get(GameSettingKeyCode.EnableReceiveShadow));
OnEnableGrassChanged(GameSettingCore.Get(GameSettingKeyCode.EnableGrass));
OnEnableFreeCameraViewChanged(GameSettingCore.Get(GameSettingKeyCode.EnableFreeCameraView));
OnEnableFarViewChanged(GameSettingCore.Get(GameSettingKeyCode.EnableFarView));
//是否开启场景物件远近分层显示
SetShaderLevel(GameSettingCore.Get(GameSettingKeyCode.QualityLevel));
OnEnableSoftBoneChanged(GameSettingCore.Get(GameSettingKeyCode.EnableSoftBone));
}
protected override void OnRegisterSettingChangedHandler()
{
base.OnRegisterSettingChangedHandler();
AddSettingChangedHandler(GameSettingKeyCode.QualityLevel, OnQualityLevelChanged);
AddSettingChangedHandler(GameSettingKeyCode.EnableSceneLighting, OnEnableSceneLightingChanged);//场景光照
AddSettingChangedHandler(GameSettingKeyCode.EnableRain, OnEnableRainChanged);//是否显示下雨效果(水面波纹)
AddSettingChangedHandler(GameSettingKeyCode.EnableCameraVFX, OnEnableCameraVFXChanged);//是否显示摄像机的特效
AddSettingChangedHandler(GameSettingKeyCode.SceneVFXLevel, OnSceneVFXLevelChanged);//场景特效的等级
AddSettingChangedHandler(GameSettingKeyCode.EnableWater, OnEnableWaterChanged);//是否显示水(水面反射,镜像)
AddSettingChangedHandler(GameSettingKeyCode.EnableHighFog, OnEnableHighFogChanged);//是否显示高度雾
AddSettingChangedHandler(GameSettingKeyCode.FarAndNearFog, OnFarAndNearFogChanged);//远近雾缩放因子,设置的雾效距离乘以这个值
AddSettingChangedHandler(GameSettingKeyCode.SceneObjClipDis, OnSceneObjClipDisChanged);//场景物件裁剪距离
AddSettingChangedHandler(GameSettingKeyCode.SceneShelterHide, OnSceneShelterHideChanged);//场景遮挡主角渐隐效果
AddSettingChangedHandler(GameSettingKeyCode.EnablePostEffect, OnEnablePostEffectChanged);//后处理效果
AddSettingChangedHandler(GameSettingKeyCode.CastShadowLevel, OnCastShadowLevelChanged);//生成阴影的等级,0不生成阴影1主角生成阴影2所有角色生成阴影
AddSettingChangedHandler(GameSettingKeyCode.EnableReceiveShadow, OnEnableReceiveShadowChanged);//是否接收阴影(场景)
AddSettingChangedHandler(GameSettingKeyCode.MaxShowPlayerCount, OnMaxShowPlayerCountChanged);//显示玩家数量
AddSettingChangedHandler(GameSettingKeyCode.CurvedScreenScreenScale, OnMaxCurvedScreenScaleChanged);//设置屏幕缩放
AddSettingChangedHandler(GameSettingKeyCode.PlayerLighting, OnPlayerLightingChanged);//玩家光照 0关闭1只要主角开启2所有玩家开启
AddSettingChangedHandler(GameSettingKeyCode.NPCLighting, OnNPCLightingChanged);//NPC光照 0关闭1开启
AddSettingChangedHandler(GameSettingKeyCode.MonsterLighting, OnMonsterLightingChanged);//怪物光照 0关闭1开启
AddSettingChangedHandler(GameSettingKeyCode.LocalBonesCount, OnLocalBonesCountChanged);//主角骨骼数量2, 4, 4
AddSettingChangedHandler(GameSettingKeyCode.OtherBonesCount, OnOtherBonesCountChanged);//其他角色骨骼数量1, 2, 4
AddSettingChangedHandler(GameSettingKeyCode.VfxLevel, OnVfxLevelChanged);//特效等级
AddSettingChangedHandler(GameSettingKeyCode.EnableShakeEffect, OnEnableShakeEffectChanged);//震动特效(技能震动)
AddSettingChangedHandler(GameSettingKeyCode.EnableRadialBlurEffect, OnEnableRadialBlurEffectChanged);//是否显示使用径向模糊效果 (技能模糊)
AddSettingChangedHandler(GameSettingKeyCode.SkillVfxLevel, OnSkillVfxLevelChanged);//技能特效等级0只显示主角技能特效1显示主角和主角宠物法宝的技能特效2显示所有技能特效
AddSettingChangedHandler(GameSettingKeyCode.DamageNumber, OnDamageNumberChanged);//伤害数字数量
AddSettingChangedHandler(GameSettingKeyCode.HitBlink, OnHitBlinkChanged);//受击闪烁 0关闭1仅主角产生的伤害有2所有
AddSettingChangedHandler(GameSettingKeyCode.SkillSFX, OnSkillSFXChanged);//技能音效 0只有主角有1所有角色都有
AddSettingChangedHandler(GameSettingKeyCode.HitVfx, OnHitVfxChanged);//受击特效 0只有主角产生的伤害有1所有角色都有
AddSettingChangedHandler(GameSettingKeyCode.ScreenResolutionLevel, OnScreenResolutionLevelChanged);//当前屏幕的分辨率等级,主要针对弱显卡,高分辨率的机器
AddSettingChangedHandler(GameSettingKeyCode.EnableGrass, OnEnableGrassChanged);//是否使用动态,可碰撞的草
AddSettingChangedHandler(GameSettingKeyCode.EnableAirWaveEffect, OnEnableAirWaveEffectChanged);//是否使用空气波效果
AddSettingChangedHandler(GameSettingKeyCode.EnableMonsterGrownEffect, OnEnableMonsterGrownEffectChanged);//怪物出生特效
AddSettingChangedHandler(GameSettingKeyCode.EnableMonsterDeadEffect, OnEnableMonsterDeadEffectChanged);//怪物死亡效果
AddSettingChangedHandler(GameSettingKeyCode.EnableFreeCameraView, OnEnableFreeCameraViewChanged);//是否启动自由摄像机视角
AddSettingChangedHandler(GameSettingKeyCode.EnableModelVFX, OnEnableModelVFXChanged);//是否显示挂载在模型上的特效
AddSettingChangedHandler(GameSettingKeyCode.EnableDynamicBone, OnEnableDynamicBoneChanged);//是否开启动态骨骼系统(柔体)
AddSettingChangedHandler(GameSettingKeyCode.EnablePowerSave, OnEnablePowerSaveChanged);//是否开启省电模式
AddSettingChangedHandler(GameSettingKeyCode.EnableFarView, OnEnableFarViewChanged);//是否是远视野
AddSettingChangedHandler(GameSettingKeyCode.EnableShowWing, OnEnableShowWingChanged);//场景中是否显示翅膀
AddSettingChangedHandler(GameSettingKeyCode.OtherPlayerSkillVfxLevel, OnOtherPlayerSkillVfxLevelChanged);//场景中是否显示翅膀
AddSettingChangedHandler(GameSettingKeyCode.PanelUpdateRate, OnPanelUpdateRateRateChanged);//Panel update的频率
AddSettingChangedHandler(GameSettingKeyCode.ShowOtherFaBao, OnMaxShowPlayerCountChanged);//显示其他法宝
AddSettingChangedHandler(GameSettingKeyCode.ShowOtherPet, OnMaxShowPlayerCountChanged);//显示其他宠物
AddSettingChangedHandler(GameSettingKeyCode.ShowOtherMarryChild, OnMaxShowPlayerCountChanged);//显示其他仙娃
AddSettingChangedHandler(GameSettingKeyCode.ShowOtherFlySword, OnMaxShowPlayerCountChanged);//显示其他飞剑
AddSettingChangedHandler(GameSettingKeyCode.EnableSoftBone, OnEnableSoftBoneChanged);//柔体开关
}
#endregion
#region//配置改变后的处理函数 --- 针对性能的每一个配置枚举,这里都应该有一个对应的函数
//品质等级改变
public void OnQualityLevelChanged(int value)
{
if (value <= 0)
{
SetLowQuality(true, true);
}
else if (value <= 1)
{
SetNormaQuality(true, true);
}
else
{
SetHighQuality(true, true);
}
//初始化QulitySetting
InitializeQualitySetting();
}
//品质等级改变
public void SetQualityLevelUnSave(int value)
{
if (value <= 0)
{
SetLowQuality(true, false);
}
else if (value <= 1)
{
SetNormaQuality(true, false);
}
else
{
SetHighQuality(true, false);
}
//初始化QulitySetting
InitializeQualitySetting();
}
//场景光照改变
public void OnEnableSceneLightingChanged(int value)
{
}
//下雨改变
public void OnEnableRainChanged(int value)
{
EnableShaderRain(value > 0);
}
//是否开启摄像机特效
public void OnEnableCameraVFXChanged(int value)
{
var scene = GameCenter.GameSceneSystem.ActivedScene;
if (scene != null)
{
scene.LoadCameraVfx();
}
}
//场景特效的等级
public void OnSceneVFXLevelChanged(int value)
{
var scene = GameCenter.GameSceneSystem.ActivedScene;
if (scene != null)
{
scene.SetSceneEffectLevel();
}
}
//是否开启水的效果
public void OnEnableWaterChanged(int value)
{
//ShaderManager.SharedInstance.EnableWater(value > 0);
}
//是否显示高度雾
public void OnEnableHighFogChanged(int value)
{
EnableHighFog(value > 0);
}
//远近雾缩放因子,设置的雾效距离乘以这个值
public void OnFarAndNearFogChanged(int value)
{
}
//场景物件裁剪距离
public void OnSceneObjClipDisChanged(int value)
{
GameCenter.SceneRestoreSystem.SetEnable(value);
}
//场景遮挡主角渐隐效果
public void OnSceneShelterHideChanged(int value)
{
var scene = GameCenter.GameSceneSystem.ActivedScene;
if(scene != null && scene.SceneCameraControl != null)
{
scene.SceneCameraControl.SetRayCheckModel(value > 0);
}
}
//是否开启曝光效果
public void OnEnablePostEffectChanged(int value)
{
var scene = GameCenter.GameSceneSystem.ActivedScene;
if (scene != null && scene.CameraManager != null)
{
var eveneId = value != 0 ? Global.LogicEventDefine.EID_EVENT_ENABLE_CAMERA_POSTEFFECT : Global.LogicEventDefine.EID_EVENT_DISABLE_CAMERA_POSTEFFECT;
var cameraList = scene.CameraManager.SceneCamList;
for (int i = 0; i < cameraList.Count; ++i)
{
GameCenter.PushFixEvent(eveneId, cameraList[i].gameObject);
}
}
for (int i = 0; i < Camera.allCamerasCount; i++)
{
var c = Camera.allCameras[i];
if (c != null && c.gameObject != null && c.enabled )
{
c.gameObject.SendMessage("OnPostEffectActive", value, SendMessageOptions.DontRequireReceiver);
}
}
}
//生成阴影的等级,0不生成阴影1主角生成阴影2所有角色生成阴影
public void OnCastShadowLevelChanged(int value)
{
RefreshShadow();
}
//是否接收阴影(场景)
public void OnEnableReceiveShadowChanged(int value)
{
RefreshShadow();
}
//当前场景中最多有玩家角色模型被显示
public void OnMaxShowPlayerCountChanged(int value)
{
GameObjectLimit.RefreshShowPlayer();
}
//屏幕缩放改变
public void OnMaxCurvedScreenScaleChanged(int value)
{
GameCenter.PushFixEvent(Global.LogicEventDefine.EID_CURVEDSCREENSCALE_CHANGE, (float)value);
}
//玩家光照 0关闭1只要主角开启2所有玩家开启
public void OnPlayerLightingChanged(int value)
{
}
//NPC光照 0关闭1开启
public void OnNPCLightingChanged(int value)
{
}
//怪物光照 0关闭1开启
public void OnMonsterLightingChanged(int value)
{
}
//主角骨骼数量2, 4, 4
public void OnLocalBonesCountChanged(int value)
{
var lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if(lp != null)
{
lp.RefreshSkinQuality();
}
}
//其他角色骨骼数量1, 2, 4
public void OnOtherBonesCountChanged(int value)
{
var charList = GameCenter.GameSceneSystem.FindEntityAll<Character>();
if(charList != null && charList.Count > 0)
{
for(int i = 0; i < charList.Count; ++i)
{
charList[i].RefreshSkinQuality();
}
}
}
//特效等级
public void OnVfxLevelChanged(int value)
{
if (value <= 1)
{
FGameObjectVFXRoot.Vfxlevel = 1;
}
else
{
FGameObjectVFXRoot.Vfxlevel = value;
}
}
//震动特效(技能震动)
public void OnEnableShakeEffectChanged(int value)
{
VFXCameraShaker.Enabled = (value > 0);
//if (GameCenter.PowerSaveModelSysytem.IsEnterSaveModel())
// VFXCameraShaker.Enabled = false;
}
//是否显示使用径向模糊效果 (技能模糊)
public void OnEnableRadialBlurEffectChanged(int value)
{
//Tips:这里不进行处理,是因为这个效果,是一个限制效果,不需要立刻生效,只需要在技能释放时进行限制处理.
}
//技能特效等级0只显示主角技能特效1显示主角和主角宠物法宝的技能特效2显示所有技能特效
public void OnSkillVfxLevelChanged(int value)
{
//Tips:这里不进行处理,是因为这个效果,是一个限制效果,不需要立刻生效,只需要在技能释放时进行限制处理.
}
//伤害数字数量
public void OnDamageNumberChanged(int value)
{
}
//受击闪烁 0关闭1仅主角产生的伤害有2所有
public void OnHitBlinkChanged(int value)
{
}
//技能音效 0只有主角有1所有角色都有
public void OnSkillSFXChanged(int value)
{
}
//受击特效 0只有主角产生的伤害有1所有角色都有
public void OnHitVfxChanged(int value)
{
}
//当前屏幕的分辨率等级,主要针对弱显卡,高分辨率的机器
public void OnScreenResolutionLevelChanged(int value)
{
if (value <= 1)
{
ScreenSystem.SetDesignContentScale();
}
else
{
ScreenSystem.SetMaxDesignContent();
}
}
//是否使用动态,可碰撞的草
public void OnEnableGrassChanged(int value)
{
GameScene.SetGrassEnable();
}
//是否使用空气波效果
public void OnEnableAirWaveEffectChanged(int value)
{
//PostEffectManager.Instance.IsEnableAirWave = value > 0;
}
//怪物出生特效
public void OnEnableMonsterGrownEffectChanged(int value)
{
//Tips:这里不进行处理,是因为这个效果,是一个限制效果,不需要立刻生效,只需要在怪物出生时进行限制处理.
}
//怪物死亡效果
public void OnEnableMonsterDeadEffectChanged(int value)
{
//Tips:这里不进行处理,是因为这个效果,是一个限制效果,不需要立刻生效,只需要在怪物死亡时进行限制处理.
}
//是否启动自由摄像机视角
public void OnEnableFreeCameraViewChanged(int value)
{
GameCenter.CameraControlUtil.ChangeCamearLockState(value <= 0);
}
//是否显示挂载在模型上的特效
public void OnEnableModelVFXChanged(int value)
{
var playerList = GameCenter.GameSceneSystem.FindEntityAll<Character>();
if (playerList != null)
{
for (int i = 0; i < playerList.Count; ++i)
{
if (playerList[i].ID != LocalPlayerRoot.LocalPlayerID)
{
if (value > 0)
{
playerList[i].Skin.ShowAllPartVfx();
}
else
{
playerList[i].Skin.HideAllPartVfx();
}
}
}
}
}
//是否开启动态骨骼系统(柔体)
public void OnEnableDynamicBoneChanged(int value)
{
FBoneClothComp.IsEnable = value > 0;
FSpringClothComp.IsEnable = value > 0;
}
//是否开启省电模式
public void OnEnablePowerSaveChanged(int value)
{
//PowerSaveModelSysytem.enablePowerSaveModel = value == 1 ? true : false;
}
//是否是远视野
public void OnEnableFarViewChanged(int value)
{
if (GameCenter.GameSceneSystem.ActivedScene != null && GameCenter.GameSceneSystem.ActivedScene.SceneCameraControl != null)
{
if (value > 0)
{
GameCenter.GameSceneSystem.ActivedScene.SceneCameraControl.SetFarViewState(true);
}
else
{
GameCenter.GameSceneSystem.ActivedScene.SceneCameraControl.SetFarViewState(false);
}
}
}
//场景中是否显示翅膀
public void OnEnableShowWingChanged(int value)
{
var playerList = GameCenter.GameSceneSystem.FindEntityAll<Player>();
if (playerList != null)
{
for (int i = 0; i < playerList.Count; ++i)
{
if (value > 0)
{
playerList[i].Skin.ShowSkinPart(FSkinPartCode.Wing);
}
else
{
playerList[i].Skin.HideSkinPart(FSkinPartCode.Wing);
}
}
}
}
//其他玩家的技能等级
public void OnOtherPlayerSkillVfxLevelChanged(int value)
{
//Tips:这里不做处理,只在释放技能那一刻进行判断
}
//Panel填充DrawCall的频率
public void OnPanelUpdateRateRateChanged(int value)
{
GameCenter.PushFixEvent(Global.LogicEventDefine.EID_PANEL_FILLDRAWCALLRATE_CHANGED);
}
//是否是远视野
public void OnEnableSoftBoneChanged(int value)
{
GameCenter.PushFixEvent(Global.LogicEventDefine.EID_EVENT_SOFTBONE_ENABLE_CHANGED, value);
}
#endregion
#region//私有函数
private void InitializeQualitySetting()
{
var qlevel = GameSettingCore.Get(GameSettingKeyCode.QualityLevel);
if (qlevel <= 0)
{
QualitySettings.skinWeights = SkinWeights.OneBone;
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
QualitySettings.antiAliasing = 0;
QualitySettings.globalTextureMipmapLimit = 1;
#if !UNITY_STANDALONE_WIN
//设置为640P
var scale = _oriScreenHeight > 640 ? 640f / _oriScreenHeight : 1f;
Screen.SetResolution((int)(_oriScreenWidth * scale), (int)(_oriScreenHeight * scale), true);
#endif
}
else if (qlevel <= 1)
{
QualitySettings.skinWeights = SkinWeights.TwoBones;
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Enable;
QualitySettings.antiAliasing = 2;
QualitySettings.globalTextureMipmapLimit = 0;
#if !UNITY_STANDALONE_WIN
//设置为720P
var scale = _oriScreenHeight > 720 ? 720f / _oriScreenHeight : 1f;
Screen.SetResolution((int)(_oriScreenWidth * scale), (int)(_oriScreenHeight * scale), true);
#endif
}
else
{
QualitySettings.skinWeights = SkinWeights.TwoBones;
QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
QualitySettings.antiAliasing = 4;
QualitySettings.globalTextureMipmapLimit = 0;
#if !UNITY_STANDALONE_WIN
//设置为原大小
Screen.SetResolution(_oriScreenWidth, _oriScreenHeight, true);
#endif
}
SetShaderLevel(qlevel);
if (_performanceLevel != null)
{
_performanceLevel[0] = qlevel;
}
}
private void SetShaderLevel(int qlevel)
{
if (qlevel <= 0)
{
Shader.globalMaximumLOD = 210;
}
else if (qlevel <= 1)
{
Shader.globalMaximumLOD = 260;
}
else
{
Shader.globalMaximumLOD = 310;
}
}
//设置为低配
private void SetLowQuality(bool isForce, bool save)
{
GameSettingCore.SetUnSave(GameSettingKeyCode.QualityLevel, 0, isForce, false); //画面质量(总开关)
GameSettingCore.SetUnSave(GameSettingKeyCode.VfxLevel, 1, isForce);//特效等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSceneLighting, 0, isForce);//场景光照
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRain, 0, isForce);//是否显示下雨效果(水面波纹)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableCameraVFX, 0, isForce);//是否显示摄像机的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneVFXLevel, 1, isForce);//场景特效的等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableWater, 0, isForce);//是否显示水(水面反射,镜像)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableHighFog, 0, isForce);//是否显示高度雾
GameSettingCore.SetUnSave(GameSettingKeyCode.FarAndNearFog, 30, isForce);//远近雾缩放因子,设置的雾效距离乘以这个值
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneObjClipDis, 0, isForce);//场景物件裁剪距离
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneShelterHide, 0, isForce);//场景遮挡主角渐隐效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePostEffect, 0, isForce);//后处理效果
GameSettingCore.SetUnSave(GameSettingKeyCode.CastShadowLevel, 0, isForce);//生成阴影的等级,0不生成阴影1主角生成阴影2所有角色生成阴影
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableReceiveShadow, 0, isForce);//是否接收阴影(场景)
GameSettingCore.SetUnSave(GameSettingKeyCode.MaxShowPlayerCount, 4, isForce);//显示玩家数量
GameSettingCore.SetUnSave(GameSettingKeyCode.CurvedScreenScreenScale, 100, isForce);//屏幕缩放
GameSettingCore.SetUnSave(GameSettingKeyCode.PlayerLighting, 0, isForce);//玩家光照 0关闭1只要主角开启2所有玩家开启
GameSettingCore.SetUnSave(GameSettingKeyCode.NPCLighting, 0, isForce);//NPC光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.MonsterLighting, 0, isForce);//怪物光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.LocalBonesCount, 2, isForce);//主角骨骼数量2, 4, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.OtherBonesCount, 1, isForce);//其他角色骨骼数量1, 2, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShakeEffect, 0, isForce);//震动特效(技能震动)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRadialBlurEffect, 0, isForce);//是否显示使用径向模糊效果 (技能模糊)
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillVfxLevel, 0, isForce);//技能特效等级0只显示主角技能特效1显示主角和主角宠物法宝的技能特效2显示所有技能特效
GameSettingCore.SetUnSave(GameSettingKeyCode.DamageNumber, 10, isForce);//伤害数字数量
GameSettingCore.SetUnSave(GameSettingKeyCode.HitBlink, 0, isForce);//受击闪烁 0关闭1仅主角产生的伤害有2所有
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillSFX, 0, isForce);//技能音效 0只有主角有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.HitVfx, 0, isForce);//受击特效 0只有主角产生的伤害有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.ScreenResolutionLevel, 0, isForce);//当前屏幕的分辨率等级,主要针对弱显卡,高分辨率的机器
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableGrass, 0, isForce);//是否使用动态,可碰撞的草
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableAirWaveEffect, 0, isForce);//是否使用空气波效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterGrownEffect, 0, isForce);//怪物出生特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterDeadEffect, 0, isForce);//怪物死亡效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableFreeCameraView, 0, isForce);//是否启动自由摄像机视角
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableModelVFX, 0, isForce);//是否显示挂载在模型上的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableDynamicBone, 0, isForce);//是否开启动态骨骼系统(柔体)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShowWing, 1, isForce);//场景中是否显示翅膀
GameSettingCore.SetUnSave(GameSettingKeyCode.PanelUpdateRate, 0, isForce);//Panel update的频率
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableUIAnimation, 0, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePowerSave, 1, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFaBao, 0, isForce);//显示其他法宝
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherPet, 0, isForce);//显示其他宠物
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherMarryChild, 0, isForce);//显示其他仙娃
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFlySword, 1, isForce);//显示其他飞剑
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSoftBone, 1, isForce);//开启柔体
if (save)
{
GameSettingCore.Save();
}
}
//设置为正常配置
private void SetNormaQuality(bool isForce, bool save)
{
GameSettingCore.SetUnSave(GameSettingKeyCode.QualityLevel, 1, isForce, false); //画面质量(总开关)
GameSettingCore.SetUnSave(GameSettingKeyCode.VfxLevel, 2, isForce);//特效等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSceneLighting, 1, isForce);//场景光照
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRain, 0, isForce);//是否显示下雨效果(水面波纹)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableCameraVFX, 1, isForce);//是否显示摄像机的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneVFXLevel, 2, isForce);//场景特效的等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableWater, 0, isForce);//是否显示水(水面反射,镜像)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableHighFog, 0, isForce);//是否显示高度雾
GameSettingCore.SetUnSave(GameSettingKeyCode.FarAndNearFog, 50, isForce);//远近雾缩放因子,设置的雾效距离乘以这个值
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneObjClipDis, 1, isForce);//场景物件裁剪距离
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneShelterHide, 1, isForce);//场景遮挡主角渐隐效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePostEffect, 0, isForce);//后处理效果
GameSettingCore.SetUnSave(GameSettingKeyCode.CastShadowLevel, 1, isForce);//生成阴影的等级,0不生成阴影1主角生成阴影2所有角色生成阴影
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableReceiveShadow, 1, isForce);//是否接收阴影(场景)
GameSettingCore.SetUnSave(GameSettingKeyCode.MaxShowPlayerCount, 8, isForce);//显示玩家数量
GameSettingCore.SetUnSave(GameSettingKeyCode.CurvedScreenScreenScale, 100, isForce);//屏幕缩放
GameSettingCore.SetUnSave(GameSettingKeyCode.PlayerLighting, 1, isForce);//玩家光照 0关闭1只要主角开启2所有玩家开启
GameSettingCore.SetUnSave(GameSettingKeyCode.NPCLighting, 1, isForce);//NPC光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.MonsterLighting, 0, isForce);//怪物光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.LocalBonesCount, 4, isForce);//主角骨骼数量2, 4, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.OtherBonesCount, 2, isForce);//其他角色骨骼数量1, 2, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShakeEffect, 1, isForce);//震动特效(技能震动)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRadialBlurEffect, 1, isForce);//是否显示使用径向模糊效果 (技能模糊)
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillVfxLevel, 1, isForce);//技能特效等级0只显示主角技能特效1显示主角和主角宠物法宝的技能特效2显示所有技能特效
GameSettingCore.SetUnSave(GameSettingKeyCode.DamageNumber, 20, isForce);//伤害数字数量
GameSettingCore.SetUnSave(GameSettingKeyCode.HitBlink, 1, isForce);//受击闪烁 0关闭1仅主角产生的伤害有2所有
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillSFX, 1, isForce);//技能音效 0只有主角有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.HitVfx, 0, isForce);//受击特效 0只有主角产生的伤害有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.ScreenResolutionLevel, 1, isForce);//当前屏幕的分辨率等级,主要针对弱显卡,高分辨率的机器
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableGrass, 1, isForce);//是否使用动态,可碰撞的草
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableAirWaveEffect, 0, isForce);//是否使用空气波效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterGrownEffect, 1, isForce);//怪物出生特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterDeadEffect, 1, isForce);//怪物死亡效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableFreeCameraView, 0, isForce);//是否启动自由摄像机视角
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableModelVFX, 1, isForce);//是否显示挂载在模型上的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableDynamicBone, 0, isForce);//是否开启动态骨骼系统(柔体)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShowWing, 1, isForce);//场景中是否显示翅膀
GameSettingCore.SetUnSave(GameSettingKeyCode.PanelUpdateRate, 0, isForce);//Panel update的频率
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableUIAnimation, 1, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePowerSave, 1, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFaBao, 0, isForce);//显示其他法宝
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherPet, 1, isForce);//显示其他宠物
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherMarryChild, 0, isForce);//显示其他仙娃
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFlySword, 1, isForce);//显示其他飞剑
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSoftBone, 2, isForce);//开启柔体
if (save)
{
GameSettingCore.Save();
}
}
//设置高配
private void SetHighQuality(bool isForce, bool save)
{
GameSettingCore.SetUnSave(GameSettingKeyCode.QualityLevel, 2, isForce, false); //画面质量(总开关)
GameSettingCore.SetUnSave(GameSettingKeyCode.VfxLevel, 3, isForce);//特效等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSceneLighting, 1, isForce);//场景光照
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRain, 1, isForce);//是否显示下雨效果(水面波纹)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableCameraVFX, 1, isForce);//是否显示摄像机的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneVFXLevel, 3, isForce);//场景特效的等级
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableWater, 1, isForce);//是否显示水(水面反射,镜像)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableHighFog, 1, isForce);//是否显示高度雾
GameSettingCore.SetUnSave(GameSettingKeyCode.FarAndNearFog, 100, isForce);//远近雾缩放因子,设置的雾效距离乘以这个值
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneObjClipDis, 2, isForce);//场景物件裁剪距离
GameSettingCore.SetUnSave(GameSettingKeyCode.SceneShelterHide, 1, isForce);//场景遮挡主角渐隐效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePostEffect, 1, isForce);//后处理效果
GameSettingCore.SetUnSave(GameSettingKeyCode.CastShadowLevel, 2, isForce);//生成阴影的等级,0不生成阴影1主角生成阴影2所有角色生成阴影
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableReceiveShadow, 1, isForce);//是否接收阴影(场景)
GameSettingCore.SetUnSave(GameSettingKeyCode.MaxShowPlayerCount, 12, isForce);//显示玩家数量
GameSettingCore.SetUnSave(GameSettingKeyCode.CurvedScreenScreenScale, 100, isForce);//屏幕缩放
GameSettingCore.SetUnSave(GameSettingKeyCode.PlayerLighting, 2, isForce);//玩家光照 0关闭1只要主角开启2所有玩家开启
GameSettingCore.SetUnSave(GameSettingKeyCode.NPCLighting, 1, isForce);//NPC光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.MonsterLighting, 1, isForce);//怪物光照 0关闭1开启
GameSettingCore.SetUnSave(GameSettingKeyCode.LocalBonesCount, 4, isForce);//主角骨骼数量2, 4, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.OtherBonesCount, 4, isForce);//其他角色骨骼数量1, 2, 4
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShakeEffect, 1, isForce);//震动特效(技能震动)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableRadialBlurEffect, 1, isForce);//是否显示使用径向模糊效果 (技能模糊)
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillVfxLevel, 2, isForce);//技能特效等级0只显示主角技能特效1显示主角和主角宠物法宝的技能特效2显示所有技能特效
GameSettingCore.SetUnSave(GameSettingKeyCode.DamageNumber, 30, isForce);//伤害数字数量
GameSettingCore.SetUnSave(GameSettingKeyCode.HitBlink, 2, isForce);//受击闪烁 0关闭1仅主角产生的伤害有2所有
GameSettingCore.SetUnSave(GameSettingKeyCode.SkillSFX, 1, isForce);//技能音效 0只有主角有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.HitVfx, 1, isForce);//受击特效 0只有主角产生的伤害有1所有角色都有
GameSettingCore.SetUnSave(GameSettingKeyCode.ScreenResolutionLevel, 2, isForce);//当前屏幕的分辨率等级,主要针对弱显卡,高分辨率的机器
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableGrass, 1, isForce);//是否使用动态,可碰撞的草
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableAirWaveEffect, 1, isForce);//是否使用空气波效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterGrownEffect, 1, isForce);//怪物出生特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableMonsterDeadEffect, 1, isForce);//怪物死亡效果
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableFreeCameraView, 0, isForce);//是否启动自由摄像机视角
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableModelVFX, 1, isForce);//是否显示挂载在模型上的特效
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableDynamicBone, 1, isForce);//是否开启动态骨骼系统(柔体)
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableShowWing, 1, isForce);//场景中是否显示翅膀
GameSettingCore.SetUnSave(GameSettingKeyCode.PanelUpdateRate, 0, isForce);//Panel update的频率
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableUIAnimation, 1, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.EnablePowerSave, 1, isForce);//是否开启UI动画
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFaBao, 1, isForce);//显示其他法宝
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherPet, 1, isForce);//显示其他宠物
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherMarryChild, 1, isForce);//显示其他仙娃
GameSettingCore.SetUnSave(GameSettingKeyCode.ShowOtherFlySword, 1, isForce);//显示其他飞剑
GameSettingCore.SetUnSave(GameSettingKeyCode.EnableSoftBone, 3, isForce);//开启柔体
if (save)
{
GameSettingCore.Save();
}
}
/// <summary>
/// 获取设备的信息
/// </summary>
/// <returns></returns>
private List<DeviceMatchInfo> GetDeviceInfoList()
{
char[] splitChars = new char[] { ' ' };
List<DeviceMatchInfo> list = new List<DeviceMatchInfo>(DeclareDeviceMatchConfig.CacheDataCount);
var em = DeclareDeviceMatchConfig.CacheData.GetEnumerator();
while (em.MoveNext())
{
var cfg = em.Current.Value;
if (cfg != null && !string.IsNullOrEmpty(cfg.DeviceName))
{
var arr = cfg.DeviceName.Split(splitChars, StringSplitOptions.RemoveEmptyEntries);
if (arr != null && arr.Length > 0)
{
list.Add(
new DeviceMatchInfo()
{
DeviceNameKeyWords = arr,
DeviceType = cfg.DeviceType,
Id = cfg.Id,
Level = cfg.Level,
MatchCPU = cfg.MatchCPU > 0,
}
);
}
}
}
return list;
}
#endregion
#region //一些效果的设置以及加载
private void LoadLightCfg(GameScene scene)
{
PostEffectManager.Instance.SetPlayerShadowLight(scene.ShadowLightDir, scene.ShadowNightStrength);
PostEffectManager.Instance.EnableSceneShadow(scene.SceneShadowOpen);
PostEffectManager.Instance.SetSceneShadowLight(scene.SceneShadowLightDir, scene.SceneShadowNightStrength);
}
#endregion
#region//通过Shader的Keyworld来设置一些效果的开关
//是否开启流光的效果
public void EnableShaderLightFlow(bool isEnable)
{
//禁止流光
if (isEnable)
{
Shader.EnableKeyword("_GONBEST_FLOW_ON");
Shader.DisableKeyword("_GONBEST_FLOW_OFF");
}
else
{
Shader.EnableKeyword("_GONBEST_FLOW_OFF");
Shader.DisableKeyword("_GONBEST_FLOW_ON");
}
}
//是否开启阴影的效果
public void EnableShaderShadow(bool isEnable)
{
if (isEnable)
{
Shader.EnableKeyword("_GONBEST_SHADOW_ON");
Shader.DisableKeyword("_GONBEST_SHADOW_OFF");
}
else
{
Shader.EnableKeyword("_GONBEST_SHADOW_OFF");
Shader.DisableKeyword("_GONBEST_SHADOW_ON");
}
}
//是否开启下雨的效果
public void EnableShaderRain(bool isEnable)
{
if (isEnable)
{
Shader.DisableKeyword("_GONBEST_RAIN_OFF");
Shader.EnableKeyword("_GONBEST_RAIN_ON");
}
else
{
Shader.DisableKeyword("_GONBEST_RAIN_ON");
Shader.EnableKeyword("_GONBEST_RAIN_OFF");
}
}
//是否开启高度雾
public void EnableHighFog(bool isEnable)
{
if (isEnable)
{
Shader.DisableKeyword("_GONBEST_HEIGHT_FOG_OFF");
Shader.EnableKeyword("_GONBEST_HEIGHT_FOG_ON");
}
else
{
Shader.DisableKeyword("_GONBEST_HEIGHT_FOG_ON");
Shader.EnableKeyword("_GONBEST_HEIGHT_FOG_OFF");
}
}
//刷新阴影效果
public void RefreshShadow()
{
int castValue = GameSettingCore.Get(GameSettingKeyCode.CastShadowLevel);
int recValue = GameSettingCore.Get(GameSettingKeyCode.EnableReceiveShadow);
if(castValue > 0 && recValue > 0)
{
PostEffectManager.Instance.EnablePlayerShadow(true);
PostEffectManager.Instance.SetCullingMaskModle(castValue);
}
else
{
PostEffectManager.Instance.EnablePlayerShadow(false);
}
}
#endregion
}
}