Forest_Client/Forest/Assets/PhxhSDK/Phxh/Wrapper/RendererWrapper.cs

98 lines
3.0 KiB
C#

using UnityEngine;
namespace PhxhSDK
{
public class RendererWrapper
{
private readonly Renderer[] _renderers;
private Material[][] _originalMaterials;
private Shader[] _originalShaders;
public RendererWrapper(Renderer[] renderers)
{
if (renderers == null)
{
DebugUtil.LogError("RendererWrapper: renderer is null");
}
_renderers = renderers;
if (_renderers.Length > 0)
{
_originalMaterials = new Material[_renderers.Length][];
for (int i = 0; i < _renderers.Length; i++)
{
_originalMaterials[i] = _renderers[i].sharedMaterials;
}
}
}
public void SetVisible(bool visible)
{
if (_renderers != null)
{
foreach (var renderer in _renderers)
{
if (renderer != null)
{
renderer.enabled = visible;
}
}
}
}
public void SetMaterialProperty(string name, Color value)
{
if (_renderers != null)
{
foreach (var renderer in _renderers)
{
if (renderer != null)
{
var mpb = TempMaterialPropertyBlock.Instance;
mpb.SetColor(name, value);
renderer.SetPropertyBlock(mpb);
}
}
}
}
public void SetMaterial(Material material)
{
if (_renderers != null)
{
foreach (var renderer in _renderers)
{
if (renderer != null)
{
if (renderer.materials != null && renderer.sharedMaterials.Length > 0)
{
var mats = new Material[renderer.sharedMaterials.Length];
for (int i = 0; i < mats.Length; i++)
{
mats[i] = material;
}
renderer.sharedMaterials = mats;
}
}
}
}
}
public void ResetMaterial()
{
if (_originalMaterials != null && _renderers != null && _originalMaterials.Length != _renderers.Length)
{
DebugUtil.LogError(
"{0}.ResetMaterial, _originalMaterials.Length {1} != _renderers.Length {2}", GetType(),
_originalMaterials.Length, _renderers.Length);
return;
}
for (int i = 0; i < _originalMaterials.Length; i++)
{
_renderers[i].sharedMaterials = _originalMaterials[i];
}
}
}
}