【代码结构】rpf需要放到aot部分

main
刘涛 2024-09-23 15:05:34 +08:00
parent daa1cf1091
commit ec34ed519a
62 changed files with 386 additions and 360 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dbfd2a021c7c4554c9cbf6cccced1fbd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f2873bed4901e63479e6aece16d8b692
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
namespace AOT.Common
{
public static class AOTCodeDefine
{
public static bool ENABLE_OUTLINE_DEBUG = false;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b4574be5de05ae9489e10ec9afaf6516
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2f3b30e76da4a0341a86c3c80021889b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7ad5a858de5d446ea7b793ddf4bde514
timeCreated: 1720591909

View File

@ -0,0 +1,21 @@

namespace AOT.PostProcess.BlackArea
{
public class BlackAreaManager
{
private static IBlackAreaManager _instance;
public static IBlackAreaManager instance
{
get
{
return _instance;
}
}
public static void CreateInstance(IBlackAreaManager setInstance)
{
_instance = setInstance;
}
}
}

View File

@ -1,9 +1,9 @@
using PhxhSDK;
using UnityEngine;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.RendererUtils;
using UnityEngine.Rendering.Universal;
namespace Gameplay.PostProcess.BlackArea
namespace AOT.PostProcess.BlackArea
{
public class BlackAreaRPF : ScriptableRendererFeature
{
@ -34,7 +34,8 @@ namespace Gameplay.PostProcess.BlackArea
{
base.OnCameraSetup(cmd, ref renderingData);
// 只对主相机Camera.main生效
if (renderingData.cameraData.camera != Camera.main) return;
if (BlackAreaManager.instance == null) return;
if (renderingData.cameraData.camera != BlackAreaManager.instance.targetCamera) return;
if (BlackAreaManager.instance.blitMat == null) return;
if (!BlackAreaManager.instance.enableBlackArea) return;
// 创建一个RenderTexture
@ -68,7 +69,8 @@ namespace Gameplay.PostProcess.BlackArea
ref RenderingData renderingData)
{
// 只对主相机Camera.main生效
if (renderingData.cameraData.camera != CameraManager.Instance.MainCamera) return;
if (BlackAreaManager.instance == null) return;
if (renderingData.cameraData.camera != BlackAreaManager.instance.targetCamera) return;
if (_blitMaterial == null) return;
if (!BlackAreaManager.instance.enableBlackArea) return;
var cmd = CommandBufferPool.Get("BlackArea-DrawMask");

View File

@ -0,0 +1,35 @@
using UnityEngine;
namespace AOT.PostProcess.BlackArea
{
public interface IBlackAreaManager
{
public Material blitMat
{
get;
}
public bool enableBlackArea
{
get;
}
public Camera targetCamera
{
get;
}
public void Init(bool enableBlackArea);
public void LightUpCell(int cellId, float time);
public void AutoLightUpReadyArea();
public void LogicUpdate(float dt);
public bool CheckIsInLightArea(int cellId);
public void Dispose();
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7223cf6e3d2d462eb18e4170b5f341e1
timeCreated: 1727071995

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 39b76bb117df45bc9301725f9bf9a962
timeCreated: 1726293650

View File

@ -1,4 +1,5 @@
using System;
using AOT.PostProcess.ColorFade;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

View File

@ -0,0 +1,19 @@
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace AOT.PostProcess.ColorFade
{
public class GlobalFadeManager
{
private static IGlobalFadeManager _instance;
public static void CreateInstance(IGlobalFadeManager setInstance)
{
_instance = setInstance;
}
public static IGlobalFadeManager instance => _instance;
}
}

View File

@ -0,0 +1,15 @@
using UnityEngine;
namespace AOT.PostProcess.ColorFade
{
public interface IGlobalFadeManager
{
public Color fadeColor { get; }
public float fadeProgress { get; }
public float fadeTime { get; }
public Material fadeMat { get; }
public void FadeIn(float time);
public void FadeOut(float time);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4fe023b1f4d244fab28bd029254e68f2
timeCreated: 1727072828

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d7965d3f4c07c29429e4fd1a1032b58b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
namespace AOT.PostProcess.PostOutline
{
public interface IOutlineManager
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7083197bc1ef48e8a33aa58e57dcf717
timeCreated: 1727073601

View File

@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@ -6,7 +7,15 @@ using UnityEngine;
public class OutlineManager : MonoBehaviour
{
public static OutlineManager instance;
private static OutlineManager _instance;
public static OutlineManager instance
{
get
{
return _instance;
}
}
public bool m_EnableOutline = true;
@ -19,10 +28,19 @@ public class OutlineManager : MonoBehaviour
public Color m_OutlineColorEnemy = Color.red;
public List<Renderer> m_RenderListEnemy = new List<Renderer>();
public Camera targetCamera;
public float scaleProgress = 1f;
public Material mat1;
public Material mat1_1;
public Material mat2;
public Material mat3;
// Start is called before the first frame update
void OnEnable()
{
instance = this;
_instance = this;
}
public void AutoAddFromObj(GameObject obj, bool isEnemy)
@ -62,4 +80,9 @@ public class OutlineManager : MonoBehaviour
m_RenderList.Add(r);
}
}
private void OnDestroy()
{
_instance = null;
}
}

View File

@ -1,12 +1,8 @@
using Code.Scripts.Gameplay.Utils;
using Gameplay.Common;
using Gameplay.Performance;
using PhxhSDK;
using AOT.Common;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using Constants = Framework.Constants;
public class PostOutlineRPF : ScriptableRendererFeature
{
@ -41,47 +37,46 @@ public class PostOutlineRPF : ScriptableRendererFeature
{
base.OnCameraSetup(cmd, ref renderingData);
_canEnable = false;
if (renderingData.cameraData.camera != CameraManager.Instance.MainCamera)
{
if (CodeDefine.ENABLE_OUTLINE_DEBUG)
{
DebugUtil.Log("不是主相机, 当前相机名字: " + renderingData.cameraData.camera.name + " 主相机名字:" + CameraManager.Instance.MainCamera.name);
}
return;
}
if (OutlineManager.instance == null || !OutlineManager.instance.m_EnableOutline)
{
if (CodeDefine.ENABLE_OUTLINE_DEBUG)
if (AOTCodeDefine.ENABLE_OUTLINE_DEBUG)
{
DebugUtil.Log("OutlineManager.instance == null || !OutlineManager.instance.m_EnableOutline");
Debug.Log("OutlineManager.instance == null || !OutlineManager.instance.m_EnableOutline");
}
return;
}
if (renderingData.cameraData.camera != OutlineManager.instance.targetCamera)
{
if (AOTCodeDefine.ENABLE_OUTLINE_DEBUG)
{
Debug.Log("不是主相机, 当前相机名字: " + renderingData.cameraData.camera.name + " 主相机名字:" + OutlineManager.instance.targetCamera.name);
}
return;
}
if (OutlineManager.instance.m_RenderList.Count == 0
&& OutlineManager.instance.m_RenderListEnemy.Count == 0)
{
if (CodeDefine.ENABLE_OUTLINE_DEBUG)
if (AOTCodeDefine.ENABLE_OUTLINE_DEBUG)
{
DebugUtil.Log("OutlineManager.instance.m_RenderList.Count == 0 && OutlineManager.instance.m_RenderListEnemy.Count == 0");
}
return;
}
if (!PerformanceManager.instance.data.enablePostOutline)
{
if (CodeDefine.ENABLE_OUTLINE_DEBUG)
{
DebugUtil.Log("!PerformanceManager.instance.data.enablePostOutline");
Debug.Log("OutlineManager.instance.m_RenderList.Count == 0 && OutlineManager.instance.m_RenderListEnemy.Count == 0");
}
return;
}
if (_mat1 == null)
{
_mat1 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1));
_mat1_1 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1_1));
_mat2 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH2));
_mat3 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH3));
// _mat1 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1));
// _mat1_1 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1_1));
// _mat2 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH2));
// _mat3 = Instantiate(AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH3));
_mat1 = OutlineManager.instance.mat1;
_mat1_1 = OutlineManager.instance.mat1_1;
_mat2 = OutlineManager.instance.mat2;
_mat3 = OutlineManager.instance.mat3;
// DebugUtil.LogError("shader name: " + _mat1.shader.name + " " + _mat2.shader.name + " " + _mat3.shader.name);
// DebugUtil.LogError("shader pass count:" + _mat1.shader.passCount + " " + _mat2.shader.passCount + " " + _mat3.shader.passCount);
@ -95,15 +90,15 @@ public class PostOutlineRPF : ScriptableRendererFeature
if (!isSupported)
{
DebugUtil.LogError("Shader not supported on platform");
Debug.LogError("Shader not supported on platform");
return;
}
_canEnable = true;
if (CodeDefine.ENABLE_OUTLINE_DEBUG)
if (AOTCodeDefine.ENABLE_OUTLINE_DEBUG)
{
DebugUtil.LogG("可以进行描边渲染");
Debug.Log("可以进行描边渲染");
}
}
@ -210,14 +205,11 @@ public class PostOutlineRPF : ScriptableRendererFeature
{
var desc = renderingData.cameraData.cameraTargetDescriptor;
cmd.GetTemporaryRT(_EdgeTexureID, desc.width, desc.height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
var screenWidth = desc.width;
var sampleDistance = OutlineManager.instance.m_SampleDistance;
var wrapDistance = sampleDistance / 1080 * screenWidth;
var scaleProgress = CameraManager.Instance.GetOutlineScale(wrapDistance);
var scaleProgress = OutlineManager.instance.scaleProgress;
_mat2.SetFloat(SampleDistance, scaleProgress * sampleDistance);
_mat2.SetColor(OutlineColor, OutlineManager.instance.m_OutlineColor);
cmd.Blit(_SSOutlineTexureID, _EdgeTexureID, _mat2);
}
// context.ExecuteCommandBuffer(cmd);
// CommandBufferPool.Release(cmd);

View File

@ -0,0 +1,20 @@
{
"name": "ScriptsAOT",
"rootNamespace": "",
"references": [
"Unity.RenderPipelines.Universal.Runtime",
"Unity.RenderPipeline.Universal.ShaderLibrary",
"UniTask",
"Unity.RenderPipelines.Universal.Shaders",
"Unity.RenderPipelines.Core.Runtime"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 665a1a105b52a644cb1da94dfe5e0e87
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,5 @@
using cfg.SkillCfg;
using AOT.PostProcess.BlackArea;
using cfg.SkillCfg;
using Gameplay.Character;
using Gameplay.PostProcess.BlackArea;
using Gameplay.Skill;

View File

@ -1,6 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Text;
using AOT.PostProcess.BlackArea;
using Gameplay.Area;
using Gameplay.Character;
using Gameplay.Level;
@ -49,7 +50,7 @@ namespace Gameplay
if (moveUnit.commonData.troopId == ETroopsId.Self)
{
// 如果是己方,需要将所有未照亮的格子设置为不可通行
var allLightPoints = BlackAreaManager.instance.pointList;
var allLightPoints = (BlackAreaManager.instance as BlackAreaManagerImpl).pointList;
for (int i = 0; i < allLightPoints.Count; i++)
{
var point = allLightPoints[i];

View File

@ -1,4 +1,5 @@
using Gameplay.Area;
using AOT.PostProcess.BlackArea;
using Gameplay.Area;
using Gameplay.PostProcess.BlackArea;
namespace Gameplay.Buff
{

View File

@ -1,4 +1,5 @@
using Gameplay.Area;
using AOT.PostProcess.BlackArea;
using Gameplay.Area;
using Gameplay.PostProcess.BlackArea;
namespace Gameplay.Buff
{

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AOT.PostProcess.BlackArea;
using Gameplay.PostProcess.BlackArea;
using Gameplay.Summon;
using Gameplay.Unit;

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AOT.PostProcess.BlackArea;
using Gameplay.PostProcess.BlackArea;
namespace Gameplay.Bullet

View File

@ -1,4 +1,5 @@
using Gameplay.Effect;
using AOT.PostProcess.BlackArea;
using Gameplay.Effect;
using LTGame;
using Gameplay.PostProcess.BlackArea;

View File

@ -1,4 +1,5 @@
using Gameplay.PostProcess.BlackArea;
using AOT.PostProcess.BlackArea;
using Gameplay.PostProcess.BlackArea;
using LTGame;
namespace Gameplay.Character

View File

@ -15,7 +15,6 @@ namespace Gameplay.Common
public const int BLEED_BUFF_ID = 8;
public static bool ENABLE_OUTLINE_DEBUG = false;
}
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using AOT.Common;
using CriWare;
using Cysharp.Threading.Tasks;
using Framework;
@ -90,11 +91,11 @@ public partial class SROptions
{
get
{
return CodeDefine.ENABLE_OUTLINE_DEBUG;
return AOTCodeDefine.ENABLE_OUTLINE_DEBUG;
}
set
{
CodeDefine.ENABLE_OUTLINE_DEBUG = value;
AOTCodeDefine.ENABLE_OUTLINE_DEBUG = value;
}
}

View File

@ -38,7 +38,8 @@
"GUID:d0bf1e9f644394e1de13e6ae02458b07",
"GUID:fe25561d224ed4743af4c60938a59d0b",
"GUID:70ea675efa2644cef98c7ece24158333",
"GUID:ac145e6b8c6034cdbadc8c6e26aedbcf"
"GUID:ac145e6b8c6034cdbadc8c6e26aedbcf",
"GUID:665a1a105b52a644cb1da94dfe5e0e87"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@ -1,5 +1,6 @@
using cfg.LevelCfg;
using System.Collections.Generic;
using AOT.PostProcess.BlackArea;
using Code.Scripts.Gameplay.Utils;
using Cysharp.Threading.Tasks;
using Framework;
@ -330,7 +331,7 @@ namespace Gameplay.Level
AssetManager.Instance.Unload(Constants.FIGHT_LIGHT_AREA_PATH);
AssetManager.Instance.Unload(Constants.FIGHT_CELL_COLLIDER_PATH);
AssetManager.Instance.Unload(SkillRotateCamera.PREFAB_PATH);
AssetManager.Instance.Unload(BlackAreaManager.BLIT_MAT_PATH);
AssetManager.Instance.Unload(BlackAreaManagerImpl.BLIT_MAT_PATH);
_UnloadOutlinePost();
@ -395,7 +396,9 @@ namespace Gameplay.Level
_stateMachine.ChangeState(new PrepareState(this));
SelecterView.Instance.Init();
BlackAreaManager.instance.Init(_currLevelInfo.Cfg.LevelTime == DayNightType.Night);
var enableBlackArea = _currLevelInfo.Cfg.LevelTime == DayNightType.Night;
BlackAreaManager.instance.Init(enableBlackArea);
InitAIStart();
}
@ -539,13 +542,16 @@ namespace Gameplay.Level
AssetManager.Instance.PostPreload(Constants.FIGHT_LIGHT_AREA_PATH);
AssetManager.Instance.PostPreload(Constants.FIGHT_CELL_COLLIDER_PATH);
AssetManager.Instance.PostPreload(SkillRotateCamera.PREFAB_PATH);
AssetManager.Instance.PostPreload(BlackAreaManager.BLIT_MAT_PATH);
AssetManager.Instance.PostPreload(BlackAreaManagerImpl.BLIT_MAT_PATH);
await AssetManager.Instance.WaitAllPreloads();
}
private async UniTask _InitAfterLoadMap()
{
var blackAreaInst = new BlackAreaManagerImpl();
BlackAreaManager.CreateInstance(blackAreaInst);
_InitCameraParams();
// 加载后处理
@ -585,6 +591,21 @@ namespace Gameplay.Level
if (loadObj != null)
{
Object.Instantiate(loadObj);
OutlineManager.instance.mat1 = AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1);
OutlineManager.instance.mat1_1 = AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH1_1);
OutlineManager.instance.mat2 = AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH2);
OutlineManager.instance.mat3 = AssetManager.Instance.GetPreLoadResult<Material>(Constants.SHADER_OUTLINE_PATH3);
OutlineManager.instance.targetCamera = CameraManager.Instance.MainCamera;
OutlineManager.instance.m_EnableOutline = PerformanceManager.instance.data.enablePostOutline;
var screenWidth = Screen.width;
var sampleDistance = OutlineManager.instance.m_SampleDistance;
var wrapDistance = sampleDistance / 1080 * screenWidth;
var scaleProgress = CameraManager.Instance.GetOutlineScale(wrapDistance);
OutlineManager.instance.scaleProgress = scaleProgress;
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using AOT.PostProcess.BlackArea;
using BehaviorDesigner.Runtime.Tasks;
using Code.Scripts.Gameplay.Enviorment;
using Framework;

View File

@ -1,4 +1,5 @@
using System;
using AOT.PostProcess.BlackArea;
using BehaviorDesigner.Runtime.Tasks;
using Cysharp.Threading.Tasks;
using Framework;

View File

@ -2,6 +2,7 @@
using System.IO;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
using AOT.PostProcess.ColorFade;
using CriWare;
using Cysharp.Threading.Tasks;
using Framework;
@ -118,7 +119,10 @@ namespace Gameplay
AssetManager.Instance.PostPreload(CommonUtils.BLUR_MAT_PATH);
await AssetManager.Instance.WaitAllPreloads();
await GlobalFadeManager.CreateInstance();
var globalFadeManagerInst = new ColorFadeManagerImpl();
GlobalFadeManager.CreateInstance(globalFadeManagerInst);
await globalFadeManagerInst.Init();
return E_LoadingResult.Success;
}

View File

@ -1,3 +1,8 @@
fileFormatVersion: 2
guid: 7ad5a858de5d446ea7b793ddf4bde514
timeCreated: 1720591909
fileFormatVersion: 2
guid: 51b5bd45e2469734d898d5862442f913
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,34 +1,33 @@
using System.Collections.Generic;
using AOT.PostProcess.BlackArea;
using Gameplay.Area;
using Gameplay.Character;
using Gameplay.Level;
using Gameplay.Unit;
using Gameplay.Unit.Data;
using Gameplay.Vehicle.Impl;
using PhxhSDK;
using UnityEngine;
using Constants = Framework.Constants;
namespace Gameplay.PostProcess.BlackArea
{
public class BlackAreaManager
public class BlackAreaManagerImpl : IBlackAreaManager
{
private static BlackAreaManager _instance;
public static BlackAreaManager instance
private bool _enableBlackArea;
public bool enableBlackArea
{
get
{
if (_instance == null)
{
_instance = new BlackAreaManager();
}
return _instance;
return _enableBlackArea;
}
}
public bool enableBlackArea
private Camera _targetCamera;
public Camera targetCamera
{
get;
private set;
get
{
return _targetCamera;
}
}
private List<LightPoint> _pointList = new List<LightPoint>();
@ -43,16 +42,24 @@ namespace Gameplay.PostProcess.BlackArea
private Dictionary<int, LightPoint> _pointDic = new Dictionary<int, LightPoint>();
private GameObject _rootObj;
public Material blitMat;
private Material _blitMat;
public Material blitMat
{
get
{
return _blitMat;
}
}
public const string BLIT_MAT_PATH = "Assets/Art/Other/mat/black_area_blit.mat";
public void Init(bool enable)
{
enableBlackArea = enable;
_enableBlackArea = enable;
if (!enableBlackArea) return;
_InitLightMap();
blitMat = AssetManager.Instance.GetPreLoadResult<Material>(BLIT_MAT_PATH);
_blitMat = AssetManager.Instance.GetPreLoadResult<Material>(BLIT_MAT_PATH);
_targetCamera = CameraManager.Instance.MainCamera;
}
private void _InitLightMap()
@ -61,7 +68,7 @@ namespace Gameplay.PostProcess.BlackArea
_pointDic.Clear();
_rootObj = new GameObject("[BlackAreaRoot]");
var allCells = LevelManager.Instance.CurrentLevel.Map.TerrainGridSystem.cells;
var sampleObj = AssetManager.Instance.GetPreLoadResult<GameObject>(Constants.FIGHT_LIGHT_AREA_PATH);
var sampleObj = AssetManager.Instance.GetPreLoadResult<GameObject>(Framework.Constants.FIGHT_LIGHT_AREA_PATH);
for (int i = 0; i < allCells.Count; i++)
{
var cell = allCells[i];
@ -144,12 +151,13 @@ namespace Gameplay.PostProcess.BlackArea
public void Dispose()
{
_enableBlackArea = false;
if (_rootObj != null)
{
Object.Destroy(_rootObj);
_rootObj = null;
}
enableBlackArea = false;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1eb1a8d8149a4a698df29c14cb236395
timeCreated: 1727072282

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 849b54d863b245c5b36051c443497c63
timeCreated: 1713506069

View File

@ -1,62 +0,0 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace Code.Scripts.Gameplay.PostProcess.ColorChange
{
public class ChangeColorRPF : ScriptableRendererFeature
{
[Serializable]
public class Settings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
}
public class ChangeColorPass : ScriptableRenderPass
{
public Settings settings;
private Material _blitMaterial;
public ChangeColorPass(Settings settings)
{
this.settings = settings;
}
public override void Configure(CommandBuffer cmd,
RenderTextureDescriptor cameraTextureDescriptor)
{
base.Configure(cmd, cameraTextureDescriptor);
_blitMaterial = new Material(Shader.Find("Hide/ChangeColor"));
}
[Obsolete("Obsolete")]
public override void Execute(ScriptableRenderContext context,
ref RenderingData renderingData)
{
if (renderingData.cameraData.camera.name != "UICamera") return;
var cmd = CommandBufferPool.Get("ChangeColor");
cmd.Blit(renderingData.cameraData.renderer.cameraColorTarget, renderingData.cameraData.renderer.cameraColorTarget, _blitMaterial);
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
}
private ChangeColorPass _changeColorPass;
public Settings settings = new Settings();
public override void Create()
{
_changeColorPass = new ChangeColorPass(settings);
_changeColorPass.renderPassEvent = settings.renderPassEvent;
}
public override void AddRenderPasses(ScriptableRenderer renderer,
ref RenderingData renderingData)
{
renderer.EnqueuePass(_changeColorPass);
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: ade665c3762743f182f3ed75d09382e9
timeCreated: 1713506100

View File

@ -1,3 +1,3 @@
fileFormatVersion: 2
guid: 39b76bb117df45bc9301725f9bf9a962
timeCreated: 1726293650
guid: 73ac190d242b4b38a8d9c5f0c79ea820
timeCreated: 1727072891

View File

@ -1,14 +1,22 @@
using Cysharp.Threading.Tasks;
using AOT.PostProcess.ColorFade;
using Cysharp.Threading.Tasks;
using PhxhSDK;
using UnityEngine;
namespace Gameplay.PostProcess.ColorFade
{
public class GlobalFadeManager
public class ColorFadeManagerImpl : IGlobalFadeManager
{
public async UniTask Init()
{
var loadMat = await AssetManager.Instance.LoadAssetAsync<Material>(MAT_PATH);
fadeMat = Object.Instantiate(loadMat);
SetFadeColor(Color.black);
MonoHelper.instance.AddAction(EActionType.UPDATE, _LogicUpdate);
}
public const string MAT_PATH = "Assets/Art/Other/mat/mat_colorfade.mat";
private enum EFadeState
{
None,
@ -16,36 +24,17 @@ namespace Gameplay.PostProcess.ColorFade
FadeOut,
}
private static GlobalFadeManager _instance;
public static async UniTask CreateInstance()
{
if (_instance == null)
{
_instance = new GlobalFadeManager();
var loadMat = await AssetManager.Instance.LoadAssetAsync<Material>(MAT_PATH);
_instance.fadeMat = Object.Instantiate(loadMat);
_instance.SetFadeColor(Color.black);
MonoHelper.instance.AddAction(EActionType.UPDATE, _instance._LogicUpdate);
}
}
public static GlobalFadeManager instance => _instance;
public Color fadeColor { get; private set; }
public float fadeProgress { get; private set; }
public float fadeTime { get; private set; }
private EFadeState _fadeState = EFadeState.None;
private float _currentFadeTime;
private static readonly int FadeColor = Shader.PropertyToID("_FadeColor");
public Material fadeMat { get; private set; }
private GlobalFadeManager()
{
}
public void SetFadeColor(Color color)
{
fadeColor = color;
@ -58,7 +47,7 @@ namespace Gameplay.PostProcess.ColorFade
_fadeState = EFadeState.FadeIn;
_currentFadeTime = 0;
}
public void FadeOut(float setTime)
{
fadeTime = setTime;
@ -90,7 +79,7 @@ namespace Gameplay.PostProcess.ColorFade
_fadeState = EFadeState.None;
}
}
private void _HandleFadeOut(float dt)
{
_currentFadeTime += dt;
@ -104,12 +93,9 @@ namespace Gameplay.PostProcess.ColorFade
public void Dispose()
{
if (_instance == null) return;
MonoHelper.instance.RemoveAction(EActionType.UPDATE, _LogicUpdate);
Object.Destroy(_instance.fadeMat);
Object.Destroy(fadeMat);
AssetManager.Instance.Unload(MAT_PATH);
_instance = null;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8667ff66f7ea44cb9778b09d4824b1bc
timeCreated: 1727072902

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: f1e62f1a88a64e12b75ffc2fcc9153f6
timeCreated: 1698986042

View File

@ -1,160 +0,0 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.SceneManagement;
public class FullBlurRPF : ScriptableRendererFeature
{
[Serializable] //序列化 会在ForwardRenderer下创建Blur时看到m_Data就是它
public class BlurData
{
// 模糊材质
public Material blurMat;
// 叠加材质
public Material overlayMat;
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
[Tooltip("渲染次数,次数越多越模糊,但是性能消耗也越大")]
[Range(0, 4)]
public int iterations = 3;
[Tooltip("采样间距X,值越大越模糊")]
[Range(0, 2f)]
public float blurSizeX = 0.5f;
[Tooltip("采样间距Y,值越大越模糊")]
[Range(0, 2f)]
public float blurSizeY = 0.5f;
[Tooltip("降采样,值越小越模糊,性能越好")]
[Range(0.1f, 1f)]
public float downScale = 0.5f;
[Tooltip("模糊混合进度")]
[Range(0f, 1f)]
public float blurBlendProgress = 0.5f;
[Tooltip("叠加颜色")]
public Color overlayColor;
}
public class BlurRenderPass : ScriptableRenderPass
{
private BlurData _data;
private RenderTexture _rt0;
private RenderTexture _rt1;
private RenderTargetIdentifier _buffer0Id;
private RenderTargetIdentifier _buffer1Id;
private int _blurSizeX = Shader.PropertyToID("_BlurSizeX");
private int _blurSizeY = Shader.PropertyToID("_BlurSizeY");
private int _overlayColor = Shader.PropertyToID("_OverlayColor");
private int _blurTex = Shader.PropertyToID("_BlurTex");
private int _blurBlendProgress = Shader.PropertyToID("_BlurBlendProgress");
public BlurRenderPass(BlurData data)
{
_data = data;
}
public void Setup()
{
_buffer0Id = Shader.PropertyToID("_BlurBuffer0");
_buffer1Id = Shader.PropertyToID("_BlurBuffer1");
}
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
{
var width = Mathf.FloorToInt(cameraTextureDescriptor.width * _data.downScale);
var height = Mathf.FloorToInt(cameraTextureDescriptor.height * _data.downScale);
var rt0 = RenderTexture.GetTemporary(width, height, 0, RenderTextureFormat.ARGB32);
rt0.filterMode = FilterMode.Bilinear;
rt0.wrapMode = TextureWrapMode.Clamp;
_buffer0Id = rt0;
_rt0 = rt0;
var rt1 = RenderTexture.GetTemporary(width, height, 0, RenderTextureFormat.ARGB32);
rt1.filterMode = FilterMode.Bilinear;
rt1.wrapMode = TextureWrapMode.Clamp;
_buffer1Id = rt1;
_rt1 = rt1;
// cmd.GetTemporaryRT(_buffer0Id, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
// cmd.GetTemporaryRT(_buffer1Id, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
}
public override void FrameCleanup(CommandBuffer cmd)
{
RenderTexture.ReleaseTemporary(_rt0);
RenderTexture.ReleaseTemporary(_rt1);
// cmd.ReleaseTemporaryRT(_buffer0Id);
// cmd.ReleaseTemporaryRT(_buffer1Id);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
//TODO: 临时处理
#if UNITY_EDITOR
var currentSceneName = SceneManager.GetActiveScene().name;
if (currentSceneName.StartsWith("story")) return;
#endif
if (renderingData.cameraData.camera != Camera.main) return; //只对主摄像机进行处理
var mat = _data.blurMat;
if (mat == null) return;
//renderingData.cameraData.camera 可获取摄像机判定哪个摄像机才进行处理渲染(每个摄像机都会进一遍pass 如果摄像机有多个且都有这个Blur(ScriptableRendererFeature资源)
CommandBuffer cmd = CommandBufferPool.Get("FullBlur"); //从池获取一个cmd 命名为MyBlurCmd 能在FrameDebugger看到
var cameraRt = renderingData.cameraData.renderer.cameraColorTargetHandle.nameID; //获取摄像机主纹理
// 模糊
cmd.Blit(cameraRt, _buffer0Id);//将摄像机图渲染至buffer0
//开始iterations次渲染,每次都会进行2次Pass操作横向、纵向谁先谁后都无所谓
for (int i = 0; i < _data.iterations; i++)
{
//指定采样间距,逐级递增的形式
mat.SetFloat(_blurSizeX, 1.0f + i * _data.blurSizeX);
mat.SetFloat(_blurSizeY, 1.0f + i * _data.blurSizeY);
cmd.Blit(_buffer0Id, _buffer1Id, mat);
(_buffer0Id, _buffer1Id) = (_buffer1Id, _buffer0Id);
}
// 叠色
mat = _data.overlayMat;
if (mat == null) return;
mat.SetColor(_overlayColor, _data.overlayColor);
// var blurTex =
mat.SetTexture(_blurTex, _rt0);
mat.SetFloat(_blurBlendProgress, _data.blurBlendProgress);
cmd.Blit(cameraRt, cameraRt, mat);
// cmd.Blit(_buffer1Id, cameraRt); //将最终结果渲染到摄像机上
//执行cmd
context.ExecuteCommandBuffer(cmd);
//清空回收cmd
cmd.Clear();
CommandBufferPool.Release(cmd);
}
}
public BlurData data = new BlurData();
private BlurRenderPass _blurPass;
public override void Create()
{
_blurPass = new BlurRenderPass(data); //创建一个pass
_blurPass.renderPassEvent = data.renderPassEvent;
}
public override void AddRenderPasses(ScriptableRenderer renderer,
ref RenderingData renderingData)
{
_blurPass.Setup();
renderer.EnqueuePass(_blurPass); //入队渲染pass
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 685341af175240debcb555e29a642b4d
timeCreated: 1698986060

View File

@ -1,8 +1,3 @@
fileFormatVersion: 2
guid: d7965d3f4c07c29429e4fd1a1032b58b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 7de99856012e4587a9ca7ccd32ecdd25
timeCreated: 1727073625

View File

@ -0,0 +1,8 @@
using AOT.PostProcess.PostOutline;
namespace Gameplay.PostProcess.PostOutline
{
public class PostOutlineManagerImpl : IOutlineManager
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4a694edc14394f28af5af3782870918c
timeCreated: 1727073635

View File

@ -1,4 +1,5 @@
using Cysharp.Threading.Tasks;
using AOT.PostProcess.ColorFade;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay.PostProcess.ColorFade;
using PhxhSDK;

View File

@ -1,3 +1,4 @@
using AOT.PostProcess.BlackArea;
using Gameplay.Area;
using Gameplay.Character;
using Gameplay.PostProcess.BlackArea;

View File

@ -3,6 +3,7 @@ using Gameplay.Buff;
using Gameplay.Character;
using Gameplay.Level;
using System;
using AOT.PostProcess.BlackArea;
using cfg.BuffCfg;
using CodeStage.AntiCheat.ObscuredTypes;
using Cysharp.Threading.Tasks;

View File

@ -1,4 +1,5 @@
using Code.Scripts.Gameplay.Weapon;
using AOT.PostProcess.BlackArea;
using Code.Scripts.Gameplay.Weapon;
using Cysharp.Threading.Tasks;
using Gameplay.Performance;
using Gameplay.Pool;