Files
aibis-dream/Assets/Scripts/FixSystem/HeatMap/HeatMapController.cs
T
2024-11-09 06:19:03 +08:00

109 lines
3.1 KiB
C#

//using System.Drawing;
using UnityEngine;
using UnityEngine.UI;
public class HeatMapController : MonoBehaviour
{
public Material heatMaterial; // 需要传递数据的材质
public Transform[]Pos;
[HideInInspector]
private Vector4[] points = new Vector4[7]; // 存储6个点的数组,(x, y, z) = center, w = temperature
[HideInInspector]
private Vector4[] properties = new Vector4[7]; // 存储6个盒子大小的数组, (x,y) = boxsize
public Slider slider;
private float tempNum=0;
public float tempNumMax;
private float uftempture=1;
private float backtemture=1;
private float modulesTempture=1;
public float uf=1;
public float back=1;
public float module=0.7f;
//public Texture2D hotspotShapeTexture; // 引用热点形状纹理
private float tempture;
void Start()
{
slider.value=1;
tempture=slider.value;
// 初始化数据,这里是示例,你可以根据实际需求设置
SetDataToMaterial();
}
public void SetDataToMaterial()
{
// uftempture=slider.value;
// uftempture=Map(uftempture,0,3,1.5f,2.6f);
// backtemture=slider.value;
// backtemture=Map(backtemture,0,3,1.5f,3.6f);
// modulesTempture=slider.value;
// modulesTempture=Map(modulesTempture,0,3f,1.5f,2.3f);
if (slider.value <= 1)
{
uftempture = Mathf.Lerp(1.5f, 2.4f, slider.value ); // 线性插值
modulesTempture = Mathf.Lerp(1.5f, 2.1f, slider.value)-tempNum;
backtemture = Mathf.Lerp(1.5f, 2.1f, slider.value);
}
else if (slider.value <= 2)
{
uftempture = Mathf.Lerp(2.4f, 2.7f, slider.value - 1);
modulesTempture = Mathf.Lerp(2.1f, 2.3f, slider.value - 1);
backtemture = Mathf.Lerp(2.1f, 3.6f, slider.value - 1);
}
else
{
uftempture =2.7f;
modulesTempture = 2.6f;
backtemture = 3.8f;
}
for (int i = 0; i < 7; i++)
{
RectTransform transform=Pos[i].GetComponent<RectTransform>();
if(i==0)
{
points[i] = new Vector4(Pos[i].position.x, Pos[i].position.y, uftempture, 0);
}
else if(i==6)
{
points[i] = new Vector4(Pos[i].position.x, Pos[i].position.y, backtemture, 0);
}
else
{
points[i] = new Vector4(Pos[i].position.x, Pos[i].position.y, modulesTempture, 0); // (x, y, z, temperature)
}
properties[i] = new Vector4(transform.rect.width*1, transform.rect.height*1, 0.0f, 0.0f); // (boxsize x, boxsize y, unused, unused)
}
// 将数据传递给 Shader
heatMaterial.SetVectorArray("_Points", points);
heatMaterial.SetVectorArray("_Properties", properties);
}
float Map(float value, float minSource, float maxSource, float minTarget, float maxTarget)
{
return minTarget + (value - minSource) * (maxTarget - minTarget) / (maxSource - minSource);
}
}