using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.Rendering;
using System.Reflection;
public class UniversalRenderPipelineSetting : MonoBehaviour
{
[SerializeField]
UniversalRenderPipelineAsset URPPerformant;
[SerializeField]
UniversalRenderPipelineAsset URPBalanced;
[SerializeField]
UniversalRenderPipelineAsset URPHighFidelity;
[SerializeField]
UniversalRenderPipelineAsset URPOne;
private void Awake()
{
Get_CurrentUniversalRenderPipelineAsset();
Change_UniversalRenderPipelineAssetSetting();
}
void Get_CurrentUniversalRenderPipelineAsset()
{
// 현재 UniversalRenderPipelineAsset을 확인
UniversalRenderPipelineAsset _UniversalRenderPipelineAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
Debug.Log($"<color=red>{_UniversalRenderPipelineAsset.name}</color>");
// UniversalRenderPipelineAsset을 URP-Balanced로 변경
QualitySettings.renderPipeline = URPBalanced;
_UniversalRenderPipelineAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
Debug.Log($"<color=green>{_UniversalRenderPipelineAsset.name}</color>");
// UniversalRenderPipelineAsset을 URP-HighFidelity로 변경
QualitySettings.renderPipeline = URPHighFidelity;
_UniversalRenderPipelineAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
Debug.Log($"<color=blue>{_UniversalRenderPipelineAsset.name}</color>");
}
void Change_UniversalRenderPipelineAssetSetting()
{
// UniversalRenderPipelineAsset을 URPOne으로 변경
QualitySettings.renderPipeline = URPOne;
UniversalRenderPipelineAsset _UniversalRenderPipelineAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
Debug.Log($"<color=green>{_UniversalRenderPipelineAsset.name}</color>"); // UniversalRenderPipelineAsset 변경 확인
// URP Renderer List 리플렉션 참조 (Internal 변수라서 그냥 참조 불가능)
// 리플렉션(Reflection)은 C#에서 런타임 중에 객체나 타입의 정보를 조사하고 조작할 수 있는 기능
// 일반적으로 접근할 수 없는 필드나 메서드, 속성 등의 정보를 런타임에 동적으로 가져올 수 있음.
// 이를 통해 코드가 실행되는 동안 타입에 대한 정보(예: 클래스 내부의 변수, 메서드)를 알아내거나 수정할 수 있음.
// 이 코드에서 리플렉션 참조는 클래스의 비공개 필드를 접근하기 위해 사용
// 여기서 m_RendererDataList라는 필드는 UniversalRenderPipelineAsset 클래스의 내부(private) 필드로, 일반적으로 외부에서 접근할 수 없음.
// 리플렉션을 사용하여 private 또는 internal 필드도 가져옴
// (using System.Reflection)
FieldInfo propertyInfo = _UniversalRenderPipelineAsset.GetType().GetField("m_RendererDataList", BindingFlags.Instance | BindingFlags.NonPublic);
// indingFlags.Instance | BindingFlags.NonPublic 의 설명 / Bindingflags
// https://learn.microsoft.com/ko-kr/dotnet/api/system.reflection.bindingflags?view=net-8.0
ScriptableRendererData[] _ScriptableRendererDataList = (ScriptableRendererData[])propertyInfo.GetValue(_UniversalRenderPipelineAsset);
foreach (ScriptableRendererData _ScriptableRendererData in _ScriptableRendererDataList)
{
Debug.Log($"<color=green> ScriptableRendererData : {_ScriptableRendererData.name}</color>");
}
}
}
🔥 Connecting server and clients Netcode for Entities 1.5.0v https://docs.unity3d.com/Packages/com.unity.netcode@1.5/manual/creating-multiplayer-gameplay.html 주제 설명…