80 lines
2.3 KiB
C#
80 lines
2.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace game
|
|
{
|
|
public class StuffAssembling : LongPressStuffBase
|
|
{
|
|
[Tooltip("空置时所需材质球")]
|
|
public Material m_UnoccupiedMaterial;
|
|
|
|
#region 材质球处理相关
|
|
|
|
private List<List<Material>> m_BackupMaterials = new List<List<Material>>();
|
|
public void SwitchUnoccupiedMaterial()
|
|
{
|
|
if (m_UnoccupiedMaterial == null || m_Renderers == null) return;
|
|
|
|
int count = m_Renderers.Length;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
var renderer = m_Renderers[i];
|
|
var materials = renderer.sharedMaterials.ToList();
|
|
|
|
// 备份原始材质球
|
|
List<Material> list = new List<Material>();
|
|
int tmpCount = materials.Count;
|
|
for (int j = 0; j < tmpCount; j++)
|
|
{
|
|
list.Add(materials[j]);
|
|
}
|
|
m_BackupMaterials.Add(list);
|
|
|
|
// 清空材质球
|
|
materials.Clear();
|
|
// 替换空置材质球
|
|
materials.Add(m_UnoccupiedMaterial);
|
|
|
|
renderer.materials = materials.ToArray();
|
|
}
|
|
}
|
|
|
|
public void RestoreMaterial()
|
|
{
|
|
if (m_Renderers == null) return;
|
|
|
|
int count = m_Renderers.Length;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
var renderer = m_Renderers[i];
|
|
var materials = renderer.sharedMaterials.ToList();
|
|
|
|
// 清空材质球
|
|
materials.Clear();
|
|
|
|
var list = m_BackupMaterials[i];
|
|
int tmpCount = list.Count;
|
|
// 换回备份材质球
|
|
for(int j = 0;j < tmpCount; j++)
|
|
{
|
|
materials.Add((Material)list[j]);
|
|
}
|
|
renderer.materials = materials.ToArray();
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 生命周期
|
|
public override void InitStuff()
|
|
{
|
|
base.InitStuff();
|
|
m_Type = EventWashingStuffType.Assembling;
|
|
|
|
SwitchUnoccupiedMaterial();
|
|
}
|
|
#endregion
|
|
}
|
|
}
|