352 lines
11 KiB
C#
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].parent.GetComponent<MeshRenderer>(), value);
|
|
LightsModel[i].GetComponent<Light>().intensity = value;
|
|
}
|
|
else if (lightsildervalue < value)
|
|
{
|
|
Debug.Log("+++++++++");
|
|
SetEmissionIntensity(LightsModel[i].parent.GetComponent<MeshRenderer>(), value);
|
|
LightsModel[i].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].parent.GetComponent<MeshRenderer>().materials[0];
|
|
material.EnableKeyword("_EMISSION");
|
|
//material.SetColor("_EmissionColor", Color.HSVToRGB(0, 0, 1));
|
|
LightsModel[i].gameObject.SetActive(true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//Open.transform.GetComponentInChildren<TextMeshProUGUI>().text = "开";
|
|
for (int i = 0; i < LightsModel.Count; i++)
|
|
{
|
|
Material material = LightsModel[i].parent.GetComponent<MeshRenderer>().materials[0];
|
|
material.DisableKeyword("_EMISSION");
|
|
//material.SetColor("_EmissionColor", Color.HSVToRGB(5, 5, 1));
|
|
LightsModel[i].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].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].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].GetComponent<Light>().color = new Color(1, 0.6831585f, 0);
|
|
LightsModel[i].GetComponentInParent<MeshRenderer>().material.SetColor("_EmissionColor", new Color(1, 0.6831585f, 0));
|
|
}
|
|
}
|
|
}
|