using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [SerializeField] public class Heatmap3D { public List x1; public List y1; public int z1; public List dz1; public List alpha_values1; public List x2; public List y2; public int z2; public List dz2; public List alpha_values2; public List x3; public List y3; public int z3; public List dz3; public List alpha_values3; } public class SetStaticHeatmapTime : MonoBehaviour { [Header("Settings")] public string jsonPath1 = "json/1/heatmap3D1"; public string jsonPath2 = "json/1/heatmap3D2"; public string jsonPath3 = "json/1/heatmap3D3"; public float scaleHight = 10; [Header("Set the color for each day")] public Material defaultMaterial; public Color color1; public Color color2; public Color color3; [Header("Disable Game Object")] public GameObject playback; // GameObjects to store all the created bars and to easily toggle them private GameObject staticBars1; private GameObject staticBars2; private GameObject staticBars3; // Toggles that define if the bars should be active/inactive private Toggle[] days; private Toggle day1; private Toggle day2; private Toggle day3; public static T ImportJson(string path) { TextAsset textAsset = Resources.Load(path); return JsonUtility.FromJson(textAsset.text); } // Start is called before the first frame update void Start() { // Get the Checkboxes from the Legend days = FindObjectsOfType(); foreach (var day in days) { if ("Visibility 2019" == day.name) { day1 = day; } else if ("Visibility 2020" == day.name) { day2 = day; } else if ("Visibility 2021" == day.name) { day3 = day; } } if (playback.activeSelf) playback.SetActive(false); // Take data from json file and save in variable Heatmap3D heatmap3DData1 = ImportJson(jsonPath1); Heatmap3D heatmap3DData2 = ImportJson(jsonPath2); heatmap3DData2.x2 = heatmap3DData2.x1; heatmap3DData2.y2 = heatmap3DData2.y1; heatmap3DData2.z2 = heatmap3DData2.z1; heatmap3DData2.dz2 = heatmap3DData2.dz1; heatmap3DData2.alpha_values2 = heatmap3DData2.alpha_values1; Heatmap3D heatmap3DData3 = ImportJson(jsonPath3); heatmap3DData3.x3 = heatmap3DData3.x1; heatmap3DData3.y3 = heatmap3DData3.y1; heatmap3DData3.z3 = heatmap3DData3.z1; heatmap3DData3.dz3 = heatmap3DData3.dz1; heatmap3DData3.alpha_values3 = heatmap3DData3.alpha_values1; // GameObjects where all the bars are stored staticBars1 = new GameObject("StaticBars1"); staticBars2 = new GameObject("StaticBars2"); staticBars3 = new GameObject("StaticBars3"); staticBars1.transform.position = new Vector3(0, 0, 0); staticBars2.transform.position = new Vector3(0, 0, 0); staticBars3.transform.position = new Vector3(0, 0, 0); // Iterate through the length of the x coordiante, bc x, y have the same length for (int it = 0; it < heatmap3DData1.x1.Count; it++) { GameObject block1 = GameObject.CreatePrimitive(PrimitiveType.Cube); // take position from data and add Vector(0.25f, 0, 0.25f) to align the bars right block1.transform.parent = staticBars1.transform; block1.transform.localPosition = new Vector3(0.5f + heatmap3DData1.x1[it], 0.49f + 0.5f * (heatmap3DData1.dz1[it] * scaleHight), 0.5f + heatmap3DData1.y1[it]); block1.transform.localScale = new Vector3(1f, (heatmap3DData1.dz1[it] * scaleHight), 1f); // Create new Material and set the color; Turn off the shadows to have a better visibility Renderer renderer = block1.GetComponent(); renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; Material mat = new Material(defaultMaterial); Color customColor = new Color(color1.r, color1.g, color1.b, heatmap3DData1.alpha_values1[it]); mat.color = customColor; renderer.material = mat; } for (int it = 0; it < heatmap3DData2.x2.Count; it++) { GameObject block2 = GameObject.CreatePrimitive(PrimitiveType.Cube); block2.transform.parent = staticBars2.transform; block2.transform.localPosition = new Vector3(1.5f + heatmap3DData2.x2[it], 0.49f + 0.5f * (heatmap3DData2.dz2[it] * scaleHight), 0.5f + heatmap3DData2.y2[it]); block2.transform.localScale = new Vector3(1f, (heatmap3DData2.dz2[it] * scaleHight), 1f); Renderer renderer = block2.GetComponent(); renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; Material mat = new Material(defaultMaterial); Color customColor = new Color(color2.r, color2.g, color2.b, heatmap3DData2.alpha_values2[it]); mat.color = customColor; renderer.material = mat; } for (int it = 0; it < heatmap3DData3.x3.Count; it++) { GameObject block3 = GameObject.CreatePrimitive(PrimitiveType.Cube); block3.transform.parent = staticBars3.transform; block3.transform.localPosition = new Vector3(1.5f + heatmap3DData3.x3[it], 0.49f + 0.5f * (heatmap3DData3.dz3[it] * scaleHight), 1.5f + heatmap3DData3.y3[it]); block3.transform.localScale = new Vector3(1f, (heatmap3DData3.dz3[it] * scaleHight), 1f); Renderer renderer = block3.GetComponent(); renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; Material mat = new Material(defaultMaterial); Color customColor = new Color(color3.r, color3.g, color3.b, heatmap3DData3.alpha_values3[it]); mat.color = customColor; renderer.material = mat; } } private void FixedUpdate() { // Toggle the visibility of the bars according to the checkboxes in the legend if (!day1.isOn) staticBars1.SetActive(false); else staticBars1.SetActive(true); if (!day2.isOn) staticBars2.SetActive(false); else staticBars2.SetActive(true); if (!day3.isOn) staticBars3.SetActive(false); else staticBars3.SetActive(true); } }