2025-02-12 08:43:33 +08:00

123 lines
4.8 KiB
C#

using HighlightingSystem;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXK.UTility;
/*******************************************************************************
*Create By CG
*Function 场景中每个需要缺失的模型在添加时的控制脚本
*******************************************************************************/
namespace ZXK.BYSS
{
public class ItemModelCtrl : MonoBehaviour
{
[SerializeField]
private string _typeName = null;
//此零件应该对应的步骤名字
public string _ProcessName = null;
public string[] _NeedToolsName = null;
private List<OutLineRender> _curHighs = new List<OutLineRender>();
private List<Material> _mats = new List<Material>();
private void Awake()
{
if (EnumCtrl.GetEnumDescription(AppManagement.Instance._CurType).Equals(_typeName))
{
transform.GetComponent<Collider>().enabled = true;
MeshRenderer[] matRenderers = gameObject.GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < matRenderers.Length; i++)
{
for (int j = 0; j < matRenderers[i].materials.Length; j++)
{
Material mat = matRenderers[i].materials[j];
//修改本身材质球渲染模式
//if (mat.HasProperty("_AlphaClip") && mat.HasProperty("_ClipValue"))
//{
// // 开启Alpha剪裁
// mat.EnableKeyword("_ALPHACLIP");
// // 设置剪裁阈值
// mat.SetFloat("_ClipValue", 0.5f);
//}
//mat.SetFloat("_Cutoff", 1f);
//mat.SetFloat("_AlphaClip", 1f);
//MaterialRenderingSetModeCtrl.SetTransparent(mat, true);
//MaterialRenderingSetModeCtrl.SetMaterialRenderingMode(mat, MaterialRenderingSetModeCtrl.RenderingMode.Cutout);
_mats.Add(mat);
}
OutLineRender matHigh;
if (!matRenderers[i].TryGetComponent<OutLineRender>(out matHigh))
{
//添加高亮脚本
matHigh = matRenderers[i].gameObject.AddComponent<OutLineRender>();
}
matHigh.OutLineStrength = 2;
matHigh.enabled = true;
_curHighs.Add(matHigh);
}
DefaultAlphaState();
}
else
{
Destroy(gameObject.GetComponent<Collider>());
}
}
/// <summary>
/// 默认透明状态
/// </summary>
public void DefaultAlphaState()
{
for (int i = 0; i < _curHighs.Count; i++)
{
_curHighs[i].OutLineColor = Color.blue;
}
for (int i = 0; i < _mats.Count; i++)
{
Color tempColor = _mats[i].GetColor("_Color");
_mats[i].SetColor("_Color", new Color(tempColor.r, tempColor.g, tempColor.b, 0));
if (_mats[i].shader.name.Equals("Universal Render Pipeline/Lit"))
{
Color tempMapColor = _mats[i].GetColor("_BaseColor");
_mats[i].SetColor("_BaseColor", new Color(tempMapColor.r, tempMapColor.g, tempMapColor.b, 0));
}
}
}
/// <summary>
/// 悬浮状态
/// </summary>
public void HoverState()
{
for (int i = 0; i < _curHighs.Count; i++)
{
_curHighs[i].OutLineColor = Color.yellow;
}
}
/// <summary>
/// 显示物体
/// </summary>
public void ShowState()
{
for (int i = 0; i < _curHighs.Count; i++)
{
_curHighs[i].enabled = false;
}
for (int i = 0; i < _mats.Count; i++)
{
Color tempColor = _mats[i].GetColor("_Color");
_mats[i].SetColor("_Color", new Color(tempColor.r, tempColor.g, tempColor.b, 1));
if (_mats[i].shader.name.Equals("Universal Render Pipeline/Lit"))
{
Color tempMapColor = _mats[i].GetColor("_BaseColor");
_mats[i].SetColor("_BaseColor", new Color(tempMapColor.r, tempMapColor.g, tempMapColor.b, 1));
}
}
System.Array.ForEach(transform.GetComponents<Collider>(), col => { col.enabled = false; });
//transform.GetComponents<Collider>().enabled = false;
}
}
}