CQ_Intelligent-Technology-T.../Assets/Scripts/Control_Light.cs

237 lines
7.4 KiB
C#

using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 灯光控制
/// </summary>
public class Control_Light : MonoBehaviour
{
public static Control_Light Instance;
/// <summary>
/// 控制灯光强度、亮度
/// </summary>
public Slider Lightbrightness;
/// <summary>
/// 开灯/关灯
/// </summary>
public Button Open;
/// <summary>
/// 所有灯模型
/// </summary>
public List<Transform> LightsModel = new List<Transform>();
/// <summary>
/// 灯光强度滑动条
/// </summary>
private float lightsildervalue;
/// <summary>
/// 开灯还是关灯 默认为开灯
/// </summary>
private bool Is_Open = true;
/// <summary>
/// 初始发散颜色
/// </summary>
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<MeshRenderer>(), value);
LightsModel[i].GetChild(0).GetComponent<Light>().intensity = value;
}
else if (lightsildervalue < value)
{
Debug.Log("+++++++++");
SetEmissionIntensity(LightsModel[i].GetComponent<MeshRenderer>(), value);
LightsModel[i].GetChild(0).GetComponent<Light>().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;
}
/// <summary>
/// 语音控制
/// </summary>
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<MeshRenderer>(), 0);
LightsModel[i].GetChild(0).GetComponent<Light>().intensity = 1;
}
}
else if (str.Contains("灯光调亮"))
{
Lightbrightness.value = 2;
for (int i = 0; i < LightsModel.Count; i++)
{
SetEmissionIntensity(LightsModel[i].GetComponent<MeshRenderer>(), 10);
LightsModel[i].GetChild(0).GetComponent<Light>().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"));
}
/// <summary>
/// 开灯或关灯
/// </summary>
private void OpenorCloseLight(bool IsOpen)
{
if (IsOpen)
{
//Open.transform.GetComponentInChildren<TextMeshProUGUI>().text = "关";
for (int i = 0; i < LightsModel.Count; i++)
{
Material material = LightsModel[i].GetComponent<MeshRenderer>().materials[0];
material.EnableKeyword("_EMISSION");
//material.SetColor("_EmissionColor", Color.HSVToRGB(0, 0, 1));
LightsModel[i].GetChild(0).gameObject.SetActive(true);
}
}
else
{
//Open.transform.GetComponentInChildren<TextMeshProUGUI>().text = "开";
for (int i = 0; i < LightsModel.Count; i++)
{
Material material = LightsModel[i].GetComponent<MeshRenderer>().materials[0];
material.DisableKeyword("_EMISSION");
//material.SetColor("_EmissionColor", Color.HSVToRGB(5, 5, 1));
LightsModel[i].GetChild(0).gameObject.SetActive(false);
}
}
}
/// <summary>
/// 冷灯光
/// </summary>
public void Coollight()
{
InitColor = new Color(0, 0.6145419f, 0.9433962f);
for (int i = 0; i < LightsModel.Count; i++)
{
LightsModel[i].GetChild(0).GetComponent<Light>().color = new Color(0, 0.6145419f, 0.9433962f);
LightsModel[i].GetComponent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(0, 0.6145419f, 0.9433962f));
}
}
/// <summary>
/// 暖灯光
/// </summary>
public void Warmlight()
{
InitColor = new Color(1, 0.6831585f, 0);
for (int i = 0; i < LightsModel.Count; i++)
{
LightsModel[i].GetChild(0).GetComponent<Light>().color = new Color(1, 0.6831585f, 0);
LightsModel[i].GetComponent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(1, 0.6831585f, 0));
}
}
/// <summary>
/// 白炽光
/// </summary>
public void Incandescentlight()
{
InitColor = new Color(1, 1, 1);
for (int i = 0; i < LightsModel.Count; i++)
{
LightsModel[i].GetChild(0).GetComponent<Light>().color = new Color(1, 1, 1);
LightsModel[i].GetComponent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(1, 1, 1));
}
}
}