using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; #region 当前脚本的引用路径 /***************************************************************** ForScripts *****************************************************************/ #endregion public class ProcessModelMatData : MonoBehaviour { //string regionMatDir = @"Assets\Resources\Models\Mat\Brain\"; //string organMatDir = @"Assets\Resources\Models\Mat\BodyAndOrgans\"; public List regionMat = new List(); public List organMat = new List(); private void Awake() { InitModelMatDict(ModelType.brain, regionMat); InitModelMatDict(ModelType.organ, organMat); } private void Start() { SetMatColor(); } void InitModelMatDict(ModelType type, List matList) { Dictionary tempDict = new Dictionary(); foreach (Material mat in matList) { string matName = mat.name; tempDict[matName] = mat; } if (type == ModelType.brain) DataSource.regionMatDict = tempDict; else DataSource.organMatDict = tempDict; //Debug.Log(tempDict.Count); } public void SetMatColor() { // 设置脑区材质颜色 float brainAlpha = 0.75f; foreach (Material mat in regionMat) { string matName = mat.name; if (DataSource.regionColorDict.ContainsKey(matName)) { Vector3 matRGB = DataSource.regionColorDict[matName]; Color matColor = new Color(matRGB.x, matRGB.y, matRGB.z, brainAlpha); mat.color = matColor; } else { Debug.Log("material name: " + matName + " is not contained in keys list of " + "regionColorDict."); } } // 设置器官材质颜色 foreach (Material mat in organMat) { string matName = mat.name; if (DataSource.organColorDict.ContainsKey(matName)) { // 为每个器官设置独立的透明度 float organAlpha = 1.0f; // 默认不透明 if (matName == "Body") { organAlpha = 0.6f; // Body设置为60%透明度,比原来的40%更清晰 } Vector3 matRGB = DataSource.organColorDict[matName]; Color matColor = new Color(matRGB.x, matRGB.y, matRGB.z, organAlpha); mat.color = matColor; // 根据材质名称设置合适的渲染模式 if (matName == "Body") { // Body使用特殊的渲染模式,确保单独显示时也能看到 MaterialRenderModeHelper.SetBodyRenderMode(mat, organAlpha); } else { // 其他器官使用标准渲染模式 MaterialRenderModeHelper.AutoSetRenderMode(mat, organAlpha); } } else { Debug.Log("material name: " + matName + " is not contained in keys list of " + "organColorDict."); } } } /// /// 动态调整Body材质的透明度 /// /// 透明度值,范围0-1,0为完全透明,1为完全不透明 public void SetBodyAlpha(float alpha) { alpha = Mathf.Clamp01(alpha); // 确保值在0-1范围内 foreach (Material mat in organMat) { string matName = mat.name; if (matName == "Body" && DataSource.organColorDict.ContainsKey(matName)) { Vector3 matRGB = DataSource.organColorDict[matName]; Color currentColor = mat.color; // 保持当前颜色,只更改透明度 mat.color = new Color(currentColor.r, currentColor.g, currentColor.b, alpha); // 为Body使用特殊的渲染模式,确保单独显示时也能看到 MaterialRenderModeHelper.SetBodyRenderMode(mat, alpha); break; } } } /// /// 获取当前Body材质的透明度 /// /// 当前Body的透明度值 public float GetBodyAlpha() { foreach (Material mat in organMat) { string matName = mat.name; if (matName == "Body") { return mat.color.a; } } return 1.0f; // 如果未找到Body材质,返回默认值 } }