using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; /// /// 灯光控制 /// public class Control_Light : MonoBehaviour { public static Control_Light Instance; /// /// 控制灯光强度、亮度 /// public Slider Lightbrightness; /// /// 开灯/关灯 /// public Button Open; /// /// 所有灯模型 /// public List LightsModel = new List(); /// /// 灯光强度滑动条 /// private float lightsildervalue; /// /// 开灯还是关灯 默认为开灯 /// private bool Is_Open = true; /// /// 初始发散颜色 /// private Color InitColor = new Color(1, 1, 1); public TMP_InputField listenFeild; public Button enter; public Toggle cool; public Toggle warm; public Toggle Incandescent; private void Awake() { Instance = this; } void Start() { Open.onClick.AddListener(() => { Is_Open = !Is_Open; OpenorCloseLight(Is_Open); }); lightsildervalue = Lightbrightness.value; Lightbrightness.onValueChanged.AddListener((value) => { for (int i = 0; i < LightsModel.Count; i++) { if (lightsildervalue > value) { Debug.Log("----"); SetEmissionIntensity(LightsModel[i].GetComponent(), value); LightsModel[i].GetChild(0).GetComponent().intensity = value; } else if (lightsildervalue < value) { Debug.Log("+++++++++"); SetEmissionIntensity(LightsModel[i].GetComponent(), value); LightsModel[i].GetChild(0).GetComponent().intensity = value; } } lightsildervalue = Lightbrightness.value; }); //enter.onClick.AddListener(() => //{ // AudiosContorl(listenFeild.text); //}); } private void Update() { if (SelectModel.Instance.region != Region.None && LightsModel.Count < 1) { switch (SelectModel.Instance.region) { case Region.环境控制: LightsModel = Furniture_Manager.Instance.FindHomes("环境", "灯"); break; case Region.设备互联与系统控制: LightsModel = Furniture_Manager.Instance.FindHomes("互联", "灯"); break; case Region.智能家电与维护: LightsModel = Furniture_Manager.Instance.FindHomes("家电", "灯"); break; } } if (Is_Open) { IsClick(Is_Open); } else { IsClick(Is_Open); } } void IsClick(bool isclick) { Incandescent.interactable = isclick; cool.interactable = isclick; warm.interactable = isclick; Lightbrightness.interactable = isclick; } /// /// 语音控制 /// public void AudiosContorl(string str) { if (str.Contains("开灯")) { Is_Open = true; IsClick(Is_Open); OpenorCloseLight(true); } else if (str.Contains("关灯")) { Is_Open = false; IsClick(Is_Open); OpenorCloseLight(false); } else if (str.Contains("暖光")) { warm.isOn = true; Warmlight(); } else if (str.Contains("冷光")) { cool.isOn = true; Coollight(); } else if (str.Contains("白光")) { Incandescent.isOn = true; Incandescentlight(); } else if (str.Contains("灯光调暗")) { Lightbrightness.value = 1.5f; for (int i = 0; i < LightsModel.Count; i++) { Debug.Log("----"); SetEmissionIntensity(LightsModel[i].GetComponent(), 0); LightsModel[i].GetChild(0).GetComponent().intensity = 1; } } else if (str.Contains("灯光调亮")) { Lightbrightness.value = 2; for (int i = 0; i < LightsModel.Count; i++) { SetEmissionIntensity(LightsModel[i].GetComponent(), 10); LightsModel[i].GetChild(0).GetComponent().intensity = 2; } } } // 根据强度调整发光 void SetEmissionIntensity(Renderer rend, float intensity) { // 更新材质的发光颜色 rend.material.SetColor("_EmissionColor", new Color(InitColor.r * intensity, InitColor.g * intensity, InitColor.b * intensity)); Debug.Log(rend.material.GetColor("_EmissionColor")); } /// /// 开灯或关灯 /// private void OpenorCloseLight(bool IsOpen) { if (IsOpen) { //Open.transform.GetComponentInChildren().text = "关"; for (int i = 0; i < LightsModel.Count; i++) { Material material = LightsModel[i].GetComponent().materials[0]; material.EnableKeyword("_EMISSION"); //material.SetColor("_EmissionColor", Color.HSVToRGB(0, 0, 1)); LightsModel[i].GetChild(0).gameObject.SetActive(true); } } else { //Open.transform.GetComponentInChildren().text = "开"; for (int i = 0; i < LightsModel.Count; i++) { Material material = LightsModel[i].GetComponent().materials[0]; material.DisableKeyword("_EMISSION"); //material.SetColor("_EmissionColor", Color.HSVToRGB(5, 5, 1)); LightsModel[i].GetChild(0).gameObject.SetActive(false); } } } /// /// 冷灯光 /// public void Coollight() { InitColor = new Color(0, 0.6145419f, 0.9433962f); for (int i = 0; i < LightsModel.Count; i++) { LightsModel[i].GetChild(0).GetComponent().color = new Color(0, 0.6145419f, 0.9433962f); LightsModel[i].GetComponent().material.SetColor("_EmissionColor", new Color(0, 0.6145419f, 0.9433962f)); } } /// /// 暖灯光 /// public void Warmlight() { InitColor = new Color(1, 0.6831585f, 0); for (int i = 0; i < LightsModel.Count; i++) { LightsModel[i].GetChild(0).GetComponent().color = new Color(1, 0.6831585f, 0); LightsModel[i].GetComponent().material.SetColor("_EmissionColor", new Color(1, 0.6831585f, 0)); } } /// /// 白炽光 /// public void Incandescentlight() { InitColor = new Color(1, 1, 1); for (int i = 0; i < LightsModel.Count; i++) { LightsModel[i].GetChild(0).GetComponent().color = new Color(1, 1, 1); LightsModel[i].GetComponent().material.SetColor("_EmissionColor", new Color(1, 1, 1)); } } }