diff --git a/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs index 1fa398e..6191f57 100644 --- a/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs +++ b/Assets/Cryville.EEW.Unity/Map/LineRenderer.cs @@ -13,11 +13,16 @@ namespace Cryville.EEW.Unity.Map { [RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(MeshRenderer))] class LineRenderer : MonoBehaviour { + Material _sharedMaterial; public Material Material { - get => _meshRenderer.material; + get => _meshRenderer.sharedMaterial; set { - _meshRenderer.material = value; - _meshRenderer.material.color = m_color; + if (value == _sharedMaterial) return; + if (_sharedMaterial != null) Destroy(_meshRenderer.sharedMaterial); + _sharedMaterial = value; + if (_sharedMaterial == null) return; + _meshRenderer.sharedMaterial = Instantiate(_sharedMaterial); + _meshRenderer.sharedMaterial.color = m_color; } } @@ -28,7 +33,7 @@ namespace Cryville.EEW.Unity.Map { set { if (m_color == value) return; m_color = value; - _meshRenderer.material.color = value; + _meshRenderer.sharedMaterial.color = value; } } @@ -126,12 +131,17 @@ namespace Cryville.EEW.Unity.Map { _meshFilter.mesh = new(); } _mesh = _meshFilter.mesh; - _meshRenderer.material.color = m_color; + if (_sharedMaterial == null && _meshRenderer.sharedMaterial != null) { + _sharedMaterial = _meshRenderer.sharedMaterial; + _meshRenderer.sharedMaterial = Instantiate(_sharedMaterial); + _meshRenderer.sharedMaterial.color = m_color; + } } void OnDestroy() { if (_positions is not null) ArrayPool.Shared.Return(_positions); Destroy(_mesh); + Destroy(Material); } void LateUpdate() { if (_valid) return; diff --git a/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs index 43a17ff..049ba29 100644 --- a/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs +++ b/Assets/Cryville.EEW.Unity/Map/PolygonRenderer.cs @@ -11,11 +11,16 @@ namespace Cryville.EEW.Unity.Map { [RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(MeshRenderer))] class PolygonRenderer : MonoBehaviour { + Material _sharedMaterial; public Material Material { - get => _meshRenderer.material; + get => _meshRenderer.sharedMaterial; set { - _meshRenderer.material = value; - _meshRenderer.material.color = m_color; + if (value == _sharedMaterial) return; + if (_sharedMaterial != null) Destroy(_meshRenderer.sharedMaterial); + _sharedMaterial = value; + if (_sharedMaterial == null) return; + _meshRenderer.sharedMaterial = Instantiate(_sharedMaterial); + _meshRenderer.sharedMaterial.color = m_color; } } @@ -40,10 +45,15 @@ namespace Cryville.EEW.Unity.Map { _meshFilter.mesh = new(); } _mesh = _meshFilter.mesh; - _meshRenderer.material.color = m_color; + if (_sharedMaterial == null && _meshRenderer.sharedMaterial != null) { + _sharedMaterial = _meshRenderer.sharedMaterial; + _meshRenderer.sharedMaterial = Instantiate(_sharedMaterial); + _meshRenderer.sharedMaterial.color = m_color; + } } void OnDestroy() { Destroy(_mesh); + Destroy(Material); } public void SetPolygon(IEnumerable> polygon) { _mesh.Clear();