Files
Main/Assets/Code/Logic/_Required/GameSetting/SettingProcess/PerformanceSetting.cs
2025-01-25 04:38:09 +08:00

890 lines
47 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}