using HighlightingSystem; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.XR; public class DeviceClick : MonoBehaviour { //设备编号 public int index; //设备类型 public DeviceType deviceType; //是否允许单体化展示 public bool isSingle = false; private GameObject warmIcon; //摄像头是否警告 private bool isCamWarm; public bool _isCamWarm { get { return isCamWarm; } set { isCamWarm=value; if(value) AddWarmIcon(); else RemovWarmIcon(); } } void Start() { AddGameObjectCollider(); } private void Awake() { } void Update() { } private void OnMouseUp() { if (EventSystem.current.IsPointerOverGameObject()) { Debug.Log("鼠标在UI上"); return; } ViewCenter(); //摄像头弹窗 if (deviceType == DeviceType.SheXiangTou) { Main.intance.m_htmlPanel.CallFunction("showCarema"); return; } if (!isSingle) return; //开启高亮,闪烁3秒后关闭高亮 LightFlashOn(); Invoke("LightFlahOff", 3); if (deviceType != DeviceType.GongPai) ShowSingle(); } /// /// 视角居中 /// void ViewCenter() { Debug.Log("model" + transform.name); //获取模型中心点位置(加上模型方向*3)X轴方向朝前 Vector3 playerPos = transform.position + transform.right * 3; //相机面向设备 Quaternion angle = Quaternion.LookRotation(-transform.right); Debug.Log("pos" + playerPos + ";angle" + angle); //Main.intance.mainCamera.GetComponent().CameraMoveTarget(playerPos, angle); Main.intance.CameraMoveTarget(playerPos, angle); } /// /// 单体化展示 /// void ShowSingle() { if (deviceType != DeviceType.SheXiangTou) { //当设备类型不为摄像头时,显示设备信息弹窗(传入设备ID) Main.intance.m_htmlPanel.CallFunction("clickShowDetails", deviceType.GetHashCode()-1); } //将上一个单体化物体隐藏 if (Main.intance.CurentSingleObj != null) { Main.intance.singleCam.GetComponent().ChangeObjLayer(Main.intance.CurentSingleObj, "Default"); } //显示单体化展示页面 Main.intance.CurentSinglePage.SetActive(true); //将当前物体设置为单体化360观察的物体 Main.intance.CurentSingleObj = gameObject; //Main.intance.singleCam.GetComponent().SetTarget(transform.GetComponent().bounds.center); Main.intance.singleCam.GetComponent().SetTarget(transform); Main.intance.singleCam.GetComponent().ChangeObjLayer(gameObject, "single360"); Main.intance.ShowSingleModel(true); } /// /// 在自身添加碰撞体 /// /// public void AddGameObjectCollider() { //获取物体的最小包围盒 Bounds itemBound = GetLocalBounds(gameObject); if (!gameObject.GetComponent()) { gameObject.AddComponent(); gameObject.GetComponent().size = itemBound.size; gameObject.GetComponent().center = itemBound.center - transform.position; } } /// /// 获得对象的最小包围盒 /// public static Bounds GetLocalBounds(GameObject target) { MeshRenderer[] mfs = target.GetComponentsInChildren(); Bounds bounds = new Bounds(); if (mfs.Length != 0) { bounds = mfs[0].bounds; foreach (MeshRenderer mf in mfs) { bounds.Encapsulate(mf.bounds); } } return bounds; } /// /// 添加摄像头警告Icon /// void AddWarmIcon() { GameObject obj = Resources.Load(ResourcePath._camWarn3DIcon); GameObject icon = GameObject.Instantiate(obj); warmIcon = icon; icon.GetComponent().SetParent(ModelManager.instance.iconPanel); icon.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); icon.transform.position = transform.position; if (icon.GetComponent() == null) icon.AddComponent(); } /// /// 移除摄像头警告 /// void RemovWarmIcon() { if (warmIcon) Destroy(warmIcon); } /// /// 开启高亮 /// void LightFlashOn() { LightFlash(true); } /// /// 关闭高亮 /// void LightFlahOff() { LightFlash(false); } /// /// 高亮闪烁两下 /// /// void LightFlash(bool on) { if(!GetComponent()) gameObject.AddComponent(); if(on) GetComponent().TweenStart(); else GetComponent().TweenStop(); } }