237 lines
7.4 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|