using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.Playables; using HighlightPlus; using System.Collections.Generic; using static UnityEditor.PlayerSettings; /// /// 开始选择界面 /// public enum kangYangRegion { None, 健康管理与检测,//健康管理与检测 康复与辅助设备,//康复与辅助设备 环境与交互,//环境与交互 紧急响应与安全//紧急响应与安全 } /// /// 康养仿真设备 /// 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 Point;//场景中的点位 public List LightsModel = new List();//所有灯模型 public GameObject treadmillmaterial; private void Awake() { Instance = this; } /// /// 初始化 /// 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(), 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; }); } // 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().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; } } } } /// /// 开灯或关灯 /// 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); } } } /// /// 根据强度调整发光 /// /// /// 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")); } /// /// 血压仪动画 /// /// 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().enabled = false; //} yield return new WaitForSeconds(1f); StartBtn_highlight.highlighted = true;//血压计开关按钮 } /// /// 紧急响应 /// public void EmergencyResponse() { ShuaiDaoIamge.gameObject.SetActive(true); OldManAni.speed = 1; playableDirector.Play(); StartCoroutine(ShowButtonAfterDelay(6f, EmergencyCallBtn)); // 延迟 6 秒后显示按钮 } /// /// 过几秒后显示按钮 /// /// 等待几秒 /// 按钮 /// IEnumerator ShowButtonAfterDelay(float delay,Button Btn) { yield return new WaitForSeconds(delay); Btn.gameObject.SetActive(true); } public void TreadmillRun() { treadmillmaterial.GetComponent().materials[0].EnableKeyword("_EMISSION"); } public void TreadmillStop() { treadmillmaterial.GetComponent().materials[0].DisableKeyword("_EMISSION"); } /// /// 语音控制 /// 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 IsClick(bool isclick) { Incandescent.interactable = isclick; cool.interactable = isclick; warm.interactable = isclick; Lightbrightness.interactable = isclick; } /// /// 白炽光 /// 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].GetComponentInParent().material.SetColor("_EmissionColor", new Color(1, 1, 1)); } } /// /// 冷灯光 /// 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].GetComponentInParent().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].GetComponentInParent().material.SetColor("_EmissionColor", new Color(1, 0.6831585f, 0)); } } }