CQ_Intelligent-Technology-T.../Assets/Scripts/康养仿真/ClickKangYangdevice.cs

352 lines
11 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Playables;
using HighlightPlus;
using System.Collections.Generic;
using static UnityEditor.PlayerSettings;
/// <summary>
/// 开始选择界面
/// </summary>
public enum kangYangRegion
{
None,
,//健康管理与检测
,//康复与辅助设备
,//环境与交互
//紧急响应与安全
}
/// <summary>
/// 康养仿真设备
/// </summary>
public enum KangYangDevice
{
None,
,
,
}
public class ClickKangYangdevice : MonoBehaviour
{
public Transform PlayerTrans;//玩家
public static ClickKangYangdevice Instance;
public HighlightEffect StartBtn_highlight;
public KangYangDevice kangYangDevice = KangYangDevice.None;
public SkinnedMeshRenderer XueYaYiSMR;//血压计动画
public GameObject XYPXObj;//血压计屏幕显示
public RawImage ShuaiDaoIamge;//紧急呼叫
public Animator OldManAni;//NPC动画
public PlayableDirector playableDirector;//timeline动画
public Button EmergencyCallBtn;//右下角紧急呼叫按钮
public GameObject oldman;//紧急呼叫演练
public Image treadmillIamge;//跑步机
public Button BraceletIamge;//手环
public Button lightBtn;//灯光按钮
public Button Open;// 开灯/关灯
private bool Is_Open = true;// 开灯还是关灯 默认为开灯
private float lightsildervalue;//灯光强度滑动条
public Slider Lightbrightness;//控制灯光强度、亮度
private Color InitColor = new Color(1, 1, 1);// 初始发散颜色
public Toggle cool;
public Toggle warm;
public Toggle Incandescent;
public Button YWGLBtn;//药物管理按钮
public Button JKJCBtn;//健康检测按钮
public Button MNJKGLBtn;//模拟健康管理
public List<Transform> Point;//场景中的点位
public List<Transform> LightsModel = new List<Transform>();//所有灯模型
public GameObject treadmillmaterial;
private void Awake()
{
Instance = this;
}
/// <summary>
/// 初始化
/// </summary>
public void Init()
{
XueYaYiSMR.SetBlendShapeWeight(0,0);
ShuaiDaoIamge.gameObject.SetActive(false);
OldManAni.speed = 0;
playableDirector.Pause();
YWGLBtn.gameObject.SetActive(false);
JKJCBtn.gameObject.SetActive(false);
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;
});
}
// Start is called before the first frame update
void Start()
{
Init();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool raycast = Physics.Raycast(ray, out hit);
if (raycast)
{
print(hit.collider.gameObject.name);
switch (KangYangMangner.Instance.kangYangregion)
{
case kangYangRegion.:
if (hit.collider.gameObject.name == "血压计")
{
StartCoroutine(Sphygmomanometer());
XueYaYiSMR.GetComponent<BoxCollider>().enabled = false;
}
float weigh = XueYaYiSMR.GetBlendShapeWeight(0);
if (weigh == 100)
{
if (hit.collider.gameObject.name == "血压仪开始/停止按钮")
{
StartBtn_highlight.highlighted = false;//血压计开关按钮
XYPXObj.gameObject.SetActive(true);
}
}
break;
case kangYangRegion.:
if (hit.collider.gameObject.name == "跑步机")
{
treadmillIamge.gameObject.SetActive(true);
}
if (hit.collider.gameObject.name == "手环")
{
BraceletIamge.gameObject.SetActive(true);
}
break;
}
}
}
}
/// <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>
/// <param name="rend"></param>
/// <param name="intensity"></param>
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>
/// <returns></returns>
IEnumerator Sphygmomanometer()
{
yield return new WaitForSeconds(0.1f);
for (int i = 0; i <=100; i++)
{
yield return new WaitForSeconds(0.01f);
XueYaYiSMR.SetBlendShapeWeight(0, i);
}
float weigh = XueYaYiSMR.GetBlendShapeWeight(0);
//if (weigh > 0 )
//{
// XueYaYiSMR.GetComponent<BoxCollider>().enabled = false;
//}
yield return new WaitForSeconds(1f);
StartBtn_highlight.highlighted = true;//血压计开关按钮
}
/// <summary>
/// 紧急响应
/// </summary>
public void EmergencyResponse()
{
ShuaiDaoIamge.gameObject.SetActive(true);
OldManAni.speed = 1;
playableDirector.Play();
StartCoroutine(ShowButtonAfterDelay(6f, EmergencyCallBtn)); // 延迟 6 秒后显示按钮
}
/// <summary>
/// 过几秒后显示按钮
/// </summary>
/// <param name="delay">等待几秒</param>
/// <param name="Btn">按钮</param>
/// <returns></returns>
IEnumerator ShowButtonAfterDelay(float delay,Button Btn)
{
yield return new WaitForSeconds(delay);
Btn.gameObject.SetActive(true);
}
public void TreadmillRun()
{
treadmillmaterial.GetComponent<MeshRenderer>().materials[0].EnableKeyword("_EMISSION");
}
public void TreadmillStop()
{
treadmillmaterial.GetComponent<MeshRenderer>().materials[0].DisableKeyword("_EMISSION");
}
/// <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 IsClick(bool isclick)
{
Incandescent.interactable = isclick;
cool.interactable = isclick;
warm.interactable = isclick;
Lightbrightness.interactable = isclick;
}
/// <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].GetComponentInParent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(1, 1, 1));
}
}
/// <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].GetComponentInParent<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].GetComponentInParent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(1, 0.6831585f, 0));
}
}
}