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

191 lines
6.0 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;
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);
//});
}
/// <summary>
/// 语音控制
/// </summary>
public void AudiosContorl(string str)
{
if (str.Contains("开灯"))
{
OpenorCloseLight(true);
}
else if (str.Contains("关灯"))
{
OpenorCloseLight(false);
}
else if (str.Contains("暖光"))
{
Warmlight();
}
else if (str.Contains("冷光"))
{
Coollight();
}
else if (str.Contains("白光"))
{
Incandescentlight();
}
else if (str.Contains("灯光调暗"))
{
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("灯光调亮"))
{
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));
}
}
}